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;

 

 

posted @ 2018-10-22 10:23  nonzero  阅读(371)  评论(0编辑  收藏  举报