MySQL进阶13--常见六大约束: 非空/默认/主键/唯一约束/检查约束/外键约束--表级约束 / 列级约束

/* MySQL进阶13
常见六大约束: 
    1.not null 非空
    2.default :默认值,用于保证该字段的默认值 ; 比如年龄:1900-10-10
    3.primary key : 主键,用于保证该字段的值具有唯一性,并且非空
    4.unique : 唯一约束,保证该字段的值可以为空,具有唯一性
    5.check : 检查约束[mysql不支持,不报错,没有实际效果]
    6.foreign key : 外键约束; 用于限制两个表的关系, 用于保证该字段的值必须来自于主表的关联列的值;
        在从表中添加外键约束,用于引用主表中的某列的值;
        比如: 学生表的专业编号,员工表的部门编号,员工表的工种编号;
添加约束的时机:
    1.创建表时
    2.修改表时
    ----------
约束的添加分类:
    列级约束  : 六大约束语法上都支持,但外键没有效果!! 
    表级约束  : 
    除了非空,默认, 其他的都支持!
    语法 : constraint 约束名 约束类型(字段名)
主键和唯一:
    都可以组合!
    
#二. 修改表的时候
    添加列级约束
    alter table 表名  modify column 字段名 字段类型 新类型;
    添加表级约束
    alter table 表名  add [constraint 约束名]  约束类型(字段名) [外键的引用];
    
    #********添加表名
    #    alter table 表名  add column 字段名 字段类型;
*/

CREATE TABLE 表名(
    字段名 字段类型 列级约束,
    字段名 字段类型,
    表级约束
);

#一: 创建表时添加约束
CREATE DATABASE students;    
    #1.添加列级约束
USE students;
CREATE TABLE stuinfo(
    id INT PRIMARY KEY,  #主键
    stuName VARCHAR(20) NOT NULL, #非空
    gender CHAR(1) CHECK(gender IN ('','')),   #检查约束
    seat INT UNIQUE, #唯一
    age INT DEFAULT 18  , #默认约束
    majorId INT  REFERENCES major(id) #设置为外键
);
DESC stuinfo;
CREATE TABLE major(
    id INT PRIMARY KEY,
    majorName VARCHAR(20)
);
    #2 添加表级约束
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
    id INT ,  #主键
    stuName VARCHAR(20), #非空
    gender CHAR(1),   #检查约束
    seat INT, #唯一
    age INT , #默认约束
    majorid INT,
    
    CONSTRAINT pk PRIMARY KEY(id), #设置主键
    CONSTRAINT uq    UNIQUE(seat), #唯一键
    CONSTRAINT ck CHECK(gender ='' OR gender =''), #检查
    CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外键
);
SHOW INDEX FROM stuinfo;
    
    #组合写法,更常用! 主键和唯一:都可以组合!
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
    id INT ,  #主键
    stuName VARCHAR(20), #非空
    gender CHAR(1),   #检查约束
    seat INT, #唯一
    age INT , #默认约束
    majorid INT,
    
    PRIMARY KEY(id,stuName), #设置主键
    UNIQUE(seat), #唯一键
    CHECK(gender ='' OR gender =''), #检查
    CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) #外键
);

#二. 修改表的时候添加约束
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
    id INT , 
    stuName VARCHAR(20),
    gender CHAR(1),  
    seat INT, 
    age INT , 
    majorid INT
    );
DESC stuinfo;
    #1.添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
    #2 添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
    #3添加主键: 1)列级约束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
           #2) 表级约束
ALTER TABLE stuinfo ADD PRIMARY KEY(id);

#4.添加唯一
  #1.列级约束
ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
  #2) 表级约束
ALTER TABLE stuinfo ADD UNIQUE(id);

#5.添加外键
ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id);
ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);

#三 .删除约束

#1.删除非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
#2 删除默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT;
#3删除主键
ALTER TABLE stuinfo DROP PRIMARY KEY;
#4删除唯一
ALTER TABLE stuinfo DROP INDEX seat;
#5.删除外键
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;

DESC stuinfo;

 

posted @ 2018-10-29 17:54  山枫叶纷飞  阅读(1515)  评论(0编辑  收藏  举报