主键约束
它能够唯一确定一张表中的一条记录,也就是我们通过给某个字段添加约束,就可以使得该字段不重复且不为空。
create table user(
id int primary key,
name varchar(20)
);
#下面为表添加记录
insert into user values(1,'张三');
#user表中会添加一条新的记录;
#如果再添加一条新的记录代码,如下:
insert into user values(1,'李四');
#则会报错:错误代码: 1062 Duplicate entry '3' for key 'PRIMARY'.
#因此在约定有主键时,主键是唯一的,不可重复.
insert into user values(null,'王五');
#如果添加的记录中,id为空(NULL),则也会报错:
#错误代码: 1048 Column 'user_id' cannot be null
联合主键
联合主键中,只要主键加起来不重复就可以的;并且,联合主键中,任意一个字段均不能为NULL.
create table user2(
id int ,
user_name varchar(20),
password varchar(20),
primary key(id,user_name)
);
insert into user2 values(1,'Lilei','123');
insert into user2 values(2,'Lilei','234');
insert into user2 values(1,'Maria','345');
#上述3中情况,均不会报错的;
insert into user2 values(null,'Lilei','123');
#这种情况,主键id为null,因此会报错.
自增主键
create table user3(
id int primary key auto_increment,
name varchar(20)
);
insert into user3 (name) values('Lilei');
# 此处代码并未设置id(自增主键),仅设置了name字段.
如果在创建表的时候,没有设置主键,后期可以使用代码为其添加主键
create table user4(
id int,
name varchar(20)
);
#修改表结构
#添加主键
alter table user4 add primary key (id);
#删除主键
alter table user4 drop primary key ;
#修改主键
alter table user4 modify id int primary key;
#此代码意义:追加将id设置成主键.
唯一约束
约束修饰的字段的值不可以重复
create table user5(
id int,
name varchar(20)
);
alter table user5 add unique(name);
#上述代码意义:在表格创建好后,将name字段设置成唯一约束.
或者
create table user5(
id int,
name varchar(20),
unique(name)
);
alter tabel user5 drop index name;#通过drop删除name字段的唯一约束
alter table user5 modify name varchar(20) unique;#通过modify将name添加唯一约束或者使用add
类似于联合主键的方式:
create table user5(
id int,
name varchar(20),
unique(id,name)
);
非空约束
修饰的字段不能为空(NULL)
create tabel user6(
id int,
name varchar(20) not null #name字段非空,id字段不受约束
);
默认约束
当我们插入字段值的时候,如果没有传值,就会使用默认值.
create table user7(
id int,
name varchar(20),
age int default 10
);
insert into user7 values(1,'Lilei',20);
#将id=1,name='Lilei',age=20添加进入表格中;此处对age赋值,因此不使用默认约束
insert into user7 values(2,'Maria');
#将id=2,name='Maria'添加进入表格;此处对age没有赋值,因此,使用默认约束,该行记录age=10
外键约束
涉及到两个表:父表/子表
主表/副表
1.主表中没有的数据值,在副表中,是不可以使用的
2.主表中的记录被副表引用,是不可以删除的
-- 班级
create table classes(
id int primary key,
name varchar(20)
);
-- 学生表
create table students(
id int primart key,
name varchar(20),
class_id int,
foreign key(class_id) reference classes(id)
);