约束


对表中的数据进行限定

1.非空约束(not null)

??在创建表的时候,进行约束

???CREATE TABLE stud(
    ??NAME VARCHAR(12) NOT NULL,
    ??id INT 
????);

删除非空约束:

???ALTER TABLE stud MODIFY NAME VARCHAR(20);#消除约束
??ALTER TABLE stud MODIFY NAME VARCHAR(20) NOT NULL;#添加约束

2.唯一约束(UNIQUE)

CREATE TABLE stude(
    id INT,
    tel VARCHAR(11) UNIQUE
    );

ALTER TABLE stude MODIFY tel VARCHAR(11) UNIQUE;#添加唯一约束
ALTER TABLE stude DROP INDEX tel;#去除唯一约束

3.主键约束(primary key)

??主键:非空,唯一。用于多表联立。

??在建表时添加主键(非空,唯一)

??CREATE TABLE stude(
    id INT primary key ,
    tel VARCHAR(11) UNIQUE
    );

??删除主键:

??? ??alter table stude drop primary key;?

??添加主键:

????alter table stude modify id int primary key;

??自动增长id,配合int类型的主键使用

??????CREATE TABLE stude(
    ??????id INT primary key auto_increment,
    ??????tel VARCHAR(11) UNIQUE
    ??????);

??设置完第一个数据后,insert into中的主键就可以为NULL了

??删除自动增长

????alter table stu modify id int;

??添加自动增长

????alter table stude modify id int auto_increment;

4.外键约束(CONSTRAINT)

 

??从表内容不能直接删除,也不能修改。

??修改可用 update department set id=10 where id=1; 

??解决两列数据重复冗余(如男性 全是 18岁 )

??新建表时增加外键: 

????[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名) 

??create table employee(
??id int primary key auto_increment,
??name varchar(20),
??age int,
??dep_id int, -- 外键对应主表的主键
??-- 创建外键约束
??constraint emp_depid_fk foreign key (dep_id) references department(id)
??) 

??已有表增加外键: 

????ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段名);

??外键约束-级联??ON update CASCADE

????修改从表,使得主表的数据直接更新

????添加外键时,设置级联

??????constraint emp_depid_fk foreign key (dep_id) references
 ??????department(id) on update cascade on update cascade
??????) 

????删除级联

????constraint emp_depid_fk foreign key (dep_id) references
 ??????department(id) on update cascade on delete cascade
??????)