#约束
–主键约束
它能够唯一确定一张表中的一条记录,也就是我们通过给某个字段添加约束,就可以使得改字段不重复且不为空。
mysql> create table user(
id int primary key,
name varchar(20)
);
mysql> insert into user values(1,‘zhangsan’);
mysql> insert into user values(2,‘zhangsan’);
mysql> select * from user;
mysql> insert into user values(NULL,‘zhangsan’);
–联合主键,只要联合主键值加起来不重复就可以
mysql> create table user2(
-> id int,name varchar(20),
-> password varchar(20),
-> primary key(id,name)
-> );
mysql> insert into user2 values(1,‘zhangsan’,‘123’);
mysql> insert into user2 values(2,‘zhangsan’,‘123’);
mysql> insert into user2 values(4,‘lisi’,‘123’);
mysql> insert into user2 values(NULL,‘lisi’,‘123’);
–自增约束(管控让它自动增长)
–auto_increment
mysql> create table user3(id int primary key auto_increment,name varchar(20));
mysql> insert into user3 (name) values(‘zhangsan’);
mysql> insert into user3 (name) values(‘zhangsan’);
–如果说我们创建表的时候,忘记创建主键约束了?该怎么办?
mysql> create table user4(
-> id int,
-> name varchar(20));
–修改表结构,添加主键
mysql> alter table user4 add primary key (id);
–如何删除?
mysql> alter table user4 drop primary key;
–使用modify修改字段,添加约束
mysql> alter table user4 modify id int primary key;
–唯一约束
–约束修饰的字段的值不可以重复
mysql> create table user5(
-> id int,
-> name varchar(20));
mysql> alter table user5 add unique(name);
mysql> insert into user5 values(1,‘zhangsan’);
mysql> insert into user5 values(1,‘zhangsan’);
–name=lisi
mysql> insert into user5 values(1,‘lisi’);
mysql> create table user6(
-> id int,
-> name varchar(20),
-> unique(name));
mysql> create table user7(
-> id int,
-> name varchar(20),unique
-> );
–unique(id,name)表示两个键在一起不重复就行
mysql> create table user8(
-> id int,
-> name varchar(20),
-> unique(id,name);
mysql> insert into user8 values(1,‘zhangsan’);
mysql> insert into user8 values(2,‘zhangsan’);
mysql> insert into user8 values(1,‘lisi’);
–如何删除唯一约束?
mysql> alter table user7 drop index name;
–modify 添加
alter table user7 modify name varchar(20) unique;
–总结
–1、建表是时候就添加约束
–2、可以使用alter。。。add。。。
–3、alter。。。 modify。。。
–4、删除alter。。。drop。。。–非空约束
–修饰的字段不能为空 NULL
mysql> create table user9(
-> id int,
-> name varchar(20) not null);
mysql> insert into user9 (id) values(1);
mysql> insert into user9 values(1,‘zhangsan’);
mysql> insert into user9 (name) values(‘lisi’);
–默认约束
–就是当我们插入字段值的首,如果没有传值,就会使用默认值
mysql> create table user10(
-> id int,
-> name varchar(20),
-> age int default 10);
mysql> insert into user10(id,name) values(1,‘zhangsan’);
–传了值,就不会使用默认值
mysql> insert into user10(id,name) values(1,‘zhangsan’,19);
–外键约束
–涉及到两个表:父表,子表
–主表,副表–班级
create table classes(
id int primary key,
name varchar(20)
);
–学生表
create table studets(
id int primary key,
name varchar(20),
class_id int,
foreign key(class_id) references classes (id)
);
insert into classes values(1,‘一班’);
insert into classes values(2,‘二班’);
insert into classes values(3,‘三班’);
insert into classes values(4,‘四班’);
insert into students values(1001,‘张三’,1);
insert into students values(1002,‘张三’,2);
insert into students values(1003,‘张三’,3);
insert into students values(1004,‘张三’,4);
–1、主表classes中没有的数据值,在副表中,是不可以使用的。
–2、主表中的记录被副表引用,是不可以被删除的。