mysql 约束
在sql中约束用于限制表中的数据规则。如果不按照约束的条件则无法插入数据。
约束一般在创建表的时候就已经确定号,当然也可以在后期添加约束。
主要的约束有以下一些:
- nut null 非空约束,某字段不能为空
- unique 唯一约束,某字段中每一条记录都唯一不可重复,可以为null
- primary key 主键约束,非空且唯一,一般设为自动增长的整数
- foreign key 外键约束,确保该字段的值是另一表某字段的值
- default 默认值,未赋值时使用该默认值
1、简单的在创建表的时候添加约束--主键/外键/非空
1)首先创建一个数据库
mysql> create database test2; Query OK, 1 row affected (0.00 sec)
2)创建表
① 班级表,字段有:id,name。其中id为主键
create table cls( cls_id int auto_increment primary key, name varchar(30) not null );
② 学生表,字段有:id,name,cls_id。其中id为主键,cls_id为外键
create table stu( stu_id int auto_increment primary key, name varchar(30) not null, cls_id int, foreign key (cls_id) references cls(cls_id) );
3)插入信息,stu插入数据时外键对应的表中的字段找不到值会出错
insert into cls(name) values('1班'); insert into cls(name) values('2班'); insert into cls(name) values('3班');
insert into stu values(0, 'zhangsan', 1); insert into stu values(0, 'lisi', 2); insert into stu values(0, 'wangwu', 1); insert into stu values(0, 'peiqi', 3);
mysql> insert into stu values(0, 'peiqi', 5); # 插入外键5,cls_id中不存在不无法添加 ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test2`.`stu`, CONSTRAINT `stu_ibfk_1` FOREIGN KEY (`cls_id`) REFERENCES `cls` (`cls_id`))
2、唯一约束
唯一约束可以单独使用也可以多列结合一起共同使用
create table info( id int auto_increment primary key, name varchar(30) not null, email varchar(30) not null, unique (name, email) );
insert into info values(0, 'zhangsan', '123@.com'); insert into info values(0, 'lisi', '123@.com');
insert into info values(0, 'zhangsan', '123@.com'); #当再次插入有唯一约束会出错 ERROR 1062 (23000): Duplicate entry 'zhangsan-123@.com' for key 'name'
3、约束的命名
"constraint 约束名 约束类型;"
create table info( id int auto_increment primary key, name varchar(30) not null, email varchar(30) not null, constraint uq_name_email unique (name, email) );
4、创建表之后添加约束
有时候创建表后发现忘记忘记把约束一起创建了,这时就会用到添加约束了
"alter table 表名 add constraint 约束名 约束类型;"
create table stu( stu_id int auto_increment primary key, name varchar(30) not null, cls_id int );
alter table stu add constraint fk_stu_cls foreign key(cls_id) references cls(cls_id);
5、删除约束
"alter table 表名 drop 约束类型 约束名;"
alter table stu drop foreign key fk_stu_cls;