约束
是对表中的数据进行限定,从而保证数据的正确性、有效性和完整性
mysql约束分类
1、主键约束 primary key (自动增长)
2、非空约束 not null (不能是空的)
3、唯一约束 unique (不能重复) mysql中的unique限定的值可以有多个null;
4、外键约束 foreign key
a、创建表的时候添加约束
CREATE TABLE stu(
id INT 约束,
NAME VARCHAR(8) 约束
);
b、通过ALTER 修改字段时添加约束,,(MODIFY和CHANGE的区别在于一个可以修改字段名, )
ALTER TABLE stu MODIFY id INT 约束 约束...;
c、删除约束;创建好后添加约束一样。。修改字段的类型,不带约束即可
ALTER TABLE stu MODIFY id INT;//not null 可以这样操作 有唯一和带有约束不能这样删
删除唯一约束
ALTER TABLE stu DROP INDEX 需要删除唯一约束的字段名;
创建后添加唯一约束;
ALTER TABLE stu MODIFY username VARCHAR(20) UNIQUE;
创建后添加主键约束(primary key);
1、主键约束表示非空且唯一;
2、一张表只能有一个是主键;
3、主键就是表中记录的唯一标识,如身份证号;
创建时添加主键
删除 主键约束;
ALTER TABLE 表名 DROP PRIMARY KEY;//因为主键是一张表唯一的 所以删除时值需要选择表即可 不需要输入字段
创建后添加主键
ALTER TABLE 表名 MODIFY id INT PRIMARY KEY;
自动增长,如果某一列是数值类型的使用 auto_increment 可以完成自动增长(一般配合数值类型的主键进行使用), 自增和上一条记录相关,执行时会查询上一条记录的值 在上一条记录基础上自增
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
删除自动增长
ALTER TABLE 表名 MODIFY 字段 类型;//通过修改字段进行删除
外键约束:foreign key
解决方案 创建两张表:
1、创建表的时候可以添加外键
(外键列名称) 外的括号是语法
*语法 creat table 表名(
…
外键列
CONSTRAINT 自定义外键名称 foreign key (外键列名称) references 主表名称(主表主键字段 )
)
CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id)
部门表:
员工表:
删除外键:
ALTER TABLE employee DROP FOREIGN KEY 自定义外键名 ;
添加外键;
ALTER TABLE 表名 ADD CONSTRAINT 自定义外键名 FOREIGN KEY(外键字段) REFERENCES 主表名称(需关联的主表字段);
sqlLyog通过架构设计器 查看关联
没有关联的时候 能够看到 两张表中间是没有线的
使用外键关联后能够看到 中间是有线关联的
外键约束——级联操作;(联动操作)//
在添加外键的时候设置级联更新 末尾添加ON UPDATE CASCADE
ALTER TABLE employee ADD CONSTRAINT emp_relv_dep_ky FOREIGN KEY(dep_id) REFERENCES department(id) **ON UPDATE CASCADE**;
使用了级联更新后,主表的主键更新 外键也会随着主表更新;
删除级联,
第一步先删除外键
ALTER TABLE employee DROP FOREIGN KEY 自定义外键名 ;
第二部 重新设置关联
ALTER TABLE employee ADD CONSTRAINT emp_relv_dep_ky FOREIGN KEY(dep_id) REFERENCES department(id) ;