mysql之约束
约束和策略
约束的作用:对表中的数据进行进一步的限制,保证数据的正确性,有效性和完整性,约束都是添加在列上的,对一列的数据进行限制
一.主键约束
1.主键的作用
1)保证实体的完整性;
2)加快数据库的操作速度
3)在表中添加新记录时,ACCESS会自动检查新记录的主键值,不允许该值与其他记录的主键值重复。
4) ACCESS自动按主键值的顺序显示表中的记录。如果没有定义主键,则按输入记录的顺序显示表中的记录。
2.主键的特点
1)一个表中只能有一个主键。如果在其他字段上建立主键,则原来的主键就会取消。在ACCESS中,虽然主键不是必需的,但最好为每个表都设置一个主键。
2)主键的值不能重复也不能为null(非空)
3)主键值不能被重用
提示:虽然并不总是需要主键,但是多数数据库设计者都会保证他们创建的每个表具有一个主键,以便以后的数据库的操作和管理。
3.创建主键
1)建表时添加主键
ps1: create table a( ps2:create table b(
id int primary key, id int,
name varchar(20) name varchar(20),
) primary key(id) )
3)修改表方式添加主键(修改主键前先删除主键)
alter table 表名 add [constraint 约束名] primary key(列名)
4.删除主键
alter table 表名 drop primary key
5.主键自增策略
主键如果让我们自己添加可能会重复,我们通常希望每次插入新纪录的时,数据库自动生成主键字段的值,可以在主键列上添加自增策略
1)建表时添加策略
列名 数据类型 primary key auto_increment 注意:自动增长的类型必须为int
ps:create table a(
id int primary key auto_increment, // 主键自增
name varchar(20) )
2)修改表的方式添加自增
alter table 表名 modify 主键列列名 数据类型 auto_increment
ps:将表a中的id设为自增
alter table a modify id int auto_increment
3)修改自增起始值
alter table 表名 autoincrement=1000
6.truncate 截断表
truncate会删除表中的所有数据,相当于删除表后重新创建该表
语法:truncate table 表名
1)delete和truncare对于主键自增策略的区别
delete删除表中的数据,但不重置auto_increment的值
二.非空约束
1.建表时添加非空约束
语法:字段名 字段类型 not null
ps:create table a (
id int primary key auto_increment,
name varchar(20) not null )
2.修改表时添加非空约束
alter table 表名 modify 列名 数据类型 not null
ps:名字表a中不能为空
alter table a modify name varchar(20) not null
三.唯一约束
添加了唯一约束的值不能重复,但是可以为null
1.创建唯一约束
1)建表时添加唯一约束
语法:列名 数据类型 unique
ps:create table a (
id int primary key auto_increment,
name varchar(20) not null,
email varcahr(100) unique //添加唯一约束 )
2).修改表方式添加唯一约束
alter table a add [constraint 约束名] unique 字段名
ps:将表a中的email修改为唯一约束
alter table a add unique(email)
2.删除唯一约束
alter table 表名 drop index 唯一约束名
四.缺省(默认)约束
当该列插入数据时不指定值,将会使用缺省值
1.创建缺省约束
1)建表时添加缺省约束
语法:列名 数据类型 default '缺省值'
2)修改表时添加缺省值
alter table 表名 change column 列名 列名 数据类型 default '缺省值'
2.删除缺省值
alter tbale 表名 change column 列名 列名 数据类型 default null
五.外键约束
1.创建表的时候添加外键
语法:constraint 外键约束名 foreign key(外键字段名) references 主表名(主键字段名)
ps:在创建副表/从表之前先创建主表
create table department(
id int primary key auto_increment //主键 部门id
dep_name varchar(20), //部门名称
dep_location varchar(50) //部门地址
);
create table employee(
id int primary key auto_increment, //员工id
name varchar(20), //员工姓名
age int , //年龄
salary int, //工资
add_company date, //进入公司时间
dep_id int , //属于那个部门
constraint emp_dep_id_ref_dep_id_fk FOREIGN key(dep_id) references department(id) //添加外键约束
);
2.修改表的时候添加外键
alter table 从表名 add constraint 约束名 foreign key(外键列) reference 主表(主表主键列)

浙公网安备 33010602011771号