一、主键约束 primary key
1.简介
-- 主键约束 FK
/*
1.一个列或者多个列组合,其值唯一的表示每一行方便查找。
2.唯一约束+非空。
不允许重复,不允许出现空值。
3.最多允许一个主键
4.主键约束关键词:primarykey
5.创建主键约束时,系统默认在所在列、列组合上建立对应的唯一索引。
*/
2.构造
-- 操作:添加单列主键
/*语法格式
create table 表名(
···
<字段名><数据类型> primary key
*/
-- 操作:添加联合主键
/*
1.联合主键也只能有一个
2.联合主键不能在定义时声明,需要在之后声明
3.语法
create table 表名(
···
primary key(字段1,···,字段n)
);
*/
例、单列主键与联合主键的声明
#单列主键
-- 方法1
create table emp1(
-- 使用 primary key来指定主键
eid int primary key, #
name VARCHAR(20),
deptId int,
salary double
);
-- 添加主键后 该主键会有一个钥匙标记
-- 方法2,使用constraint指定
create table emp2(
eid int,
name VARCHAR(20),
deptId int,
salary double,
-- 在之后使用primary key()来指定主键
constraint pk1 primary key(eid) #constraint pk1 可省略
);
#联合主键
-- 例,(name,Salary)构成联合主键
create table emp3(
name varchar(20),
deptId int,
Salary double,
primary key (name,deptid)
-- 给主键起名pk2的写法
#constraint pk2 primary key(name,deptId)
)
3.例子
# 单列主键
insert into emp2 (eid,name,deptId,salary)
values (1001,'李静',10,5000);
-- 1.如果eid相同,则不予通过
insert into emp2 (eid,name,deptid,salary)
values (1001,'马飞飞',10,8000);
#报错 [23000][1062] Duplicate entry '1001' for key 'emp2.PRIMARY'
-- 2.如果主键为空 不予通过
insert into emp2 (eid,name,deptid,salary)
values (NULL,'周鹏',10,8000);
#报错 [23000][1048] Column 'eid' cannot be null
#联合主键
-- 例,联合主键
insert into emp3 values('张三',10,5000);
insert into emp3 values('张三',20,5000);
#name 相同 但deptId不同,不会报错
insert into emp3 values('张三',10,5000);
insert into emp3 values('张四',10,5000);
#name不同 deptid相同,不会报错
insert into emp3 values(NULL,10,5000);
insert into emp3 values('张三',NULL,5000);
#这两种都会报错,联合主键的任何一列元素都不能为空
4.修改表结构的方式添加主键
-- 修改表结构的方式添加主键
/* 语法
create table 表名(
...
);
alter table <表名> add primary key(...);
*/
create table emp4(
eid int,
name varchar(20),
deptId int,
Salary double
);
#追加主键eid (可以追加多个列名从而添加联合主键)
alter table emp4 add primary key (eid);
5.删除主键
-- 删除主键约束
/*语法
# 单行/联合主键都可以用此方法移除
alter table <表名> drop primary key;
*/
示例 删除主键
alter table emp4 drop primary key;
二、自增长约束 auto_increment
1.简介
/*
自增长约束通常与主键约束同时使用
进行自增长约束后
该主键的值就不再进行赋值
而是按照给定的步长进行增长
主键默认为1
约束的字段只能是整数类型
#语法:
字段名 数据类型 auto_increment
*/
2.构造
-- 例,自增长约束
create table t_userl(
id int primary key auto_increment,
name varchar(20)
);
-- 自增长主键赋值为NULL,其会被自动赋值
insert into t_userl
values (NULL,'张三');
-- 只用赋值给非主键值
insert into t_userl (name)
values('张三');
3.指定自增长初始值
-- 指定自增字段初始值
-- 1.在创建表时指定
create table t_userl2(
id int primary key auto_increment,
name varchar(20)
)auto_increment = 100;
#初始值为100
-- 2.在之后指定
create table t_userl3(
id int primary key auto_increment,
name varchar(20)
);
alter table t_userl3 auto_increment = 200;
6.其他
delete之后数据增从断点开始
truncate数据自动增长从默认起始值开始
三、非空约束 not null
1.简介
/*
非空约束字段值禁止为空。
使用了非空约束的字段如果在添加数据时,没有指定值,数据库系统会报错。
-- 方法1.创建表时添加后缀 not null
2.构造
-- 方法1.创建表时添加后缀 not null
-- 例
create table t_user6(
id int,
name varchar(20) not null,
address varchar(20) not null
);
-- 方法2.之后指定
alter table t_user6 modify name varchar(20) not null;
3.实例
insert into t_user6 ()
values (1,'asd',NULL);#为NULL会报错
#[23000][1048] Column 'address' cannot be null
4.删除非空约束
-- 删除非空约束
-- alter table 表名 modify 字段 类型
alter table t_user6 modify name varchar(20);
四、唯一约束 unique
1.简介
-- 关键字 unique 与前面类似
/*
唯一约束指该关键词不能重复
NULL可以存在多个
*/
2.构造
-- 直接构造
create table t_user9(
id int,
name varchar(20),
phone_number varchar(20) unique #指定唯一约束
);
-- 之后添加
alter table t_user9 add constraint unique_pn unique (phone_number);
3.删除约束
-- 删除唯一约束
-- 格式 alter table <name> drop index <约束名>
alter table t_user9 drop index unique_pn;
五、默认约束 default
1.简介
-- # 默认约束
-- 该列自动添加默认值
/*语法
1.<字段名><数据类型>default<默认值>;
2.alter table 表名 modify 列名 类型 default 默认值;
*/
2.构造
-- 例1,直接构造
create table t_user10 (
id int,
name varchar(20),
address varchar(20) default 'beijing'
);
-- 例2,创建表后指定
create table t_user11(
id int,
name varchar(20),
address varchar(20)
);
3.删除默认约束
-- 删除默认约束
alter table t_user11 modify address varchar(20) default null;
六、零填充约束 zerofill
1.简介
-- 零填充约束(略)
/*zerofill
该字段长度小于定义的长度时在前面填充0
*/
2.构造
-- 1.添加约束
create table t_user12(
id int zerofill,
name varchar(20)
);
3.示例
insert into t_user12 (id, name)
values (123,'zhangs');
-- 0000000123,zhangs
-- 自动向前面填充n个0
4.删除约束
-- 删除约束
alter table t_user12 modify id int;