对表中的数据进行限制,保证数据的正确性、有效性和完整性。一个表如果添加了约束,不正确的数据将无
法插入到表中。约束在创建表的时候添加比较合适。
create table st5 (
id int primary key, -- id 为主键
name varchar(20),
age int
)
alter table st5 drop primary key;
alter table st5 add primary key(id);
主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值
create table st5 (
id int primary key auto-increment, -- 给id 创建自动增长
name varchar(20),
age int
)
-- 插入数据 之后查询数据 发现id是自动增长的
insert into st5 (name,age) values ('小乔',18);
insert into st5 (name,age) values ('大乔',20);
-- 指定起始值为 1000
create table st4 (
id int primary key auto_increment,
name varchar(20)
) auto_increment = 1000;
alter table st4 auto_increment = 2000;
alter table st4 modify id int;
alter table st4 modify id int auto_increment;
2.2.1 唯一约束语法格式:字段名 字段类型 UNIQUE
-- 创建学生表 st7, 包含字段(id, name),name 这一列设置唯一约束,不能出现同名的学生
create table st7 (
id int,
name varchar(20) unique
)
注意:唯一约束可以有null值,但是只能有唯一一条记录为null
删除唯一约束:alter table st7 drop index name;
在表创建完之后创建唯一约束:alter table st7 modify name varchar(20) unique;
-- 创建表学生表 st8, 包含字段(id,name,gender)其中 name 不能为 NULL
create table st8 (
id int,
name varchar(20) not null,
gender char(1)
)
-- 删除st8 name的非空约束:alter table st8 modify name varchar(20);
-- 创建一个学生表 st9,包含字段(id,name,address), 地址默认值是广州
create table st9 (
id int,
name varchar(20),
address varchar(20) default '广州'
)
-- 添加一条记录,使用默认地址
insert into st9 values (1, '李四', default);
-- 添加一条记录,不使用默认地址
insert into st9 values (3, '李四光', '深圳');
疑问:如果一个字段设置了非空与唯一约束,该字段与主键的区别?
主键数在一个表中,只能有一个。不能出现多个主键。主键可以单列,也可以是多列。
自增长只能用在主键上
1)什么是外键:在从表中与主表主键对应的那一列,如:员工表中的 dep_id
2)主表: 一方,用来约束别人的表,从表: 多方,被别人约束的表
1)新建表时增加外键:
[CONSTRAINT] [外键约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名****)
create table employee(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int, -- 外键对应主表的主键
-- 创建外键约束
constraint emp_depid_fk foreign key (dep_id) references department(id)
)
2)已有表增加外键:
ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主表字段名);
3)删除外键的语法:
ALTER TABLE 从表drop foreign key 外键名称;
-- 删除 employee 表的 emp_depid_fk 外键
alter table employee drop foreign key emp_depid_fk;
在修改和删除主表的主键时,同时更新或删除副表的外键值,称为级联操作
ON UPDATE CASCADE:级联更新,只能是创建表的时候创建级联关系。更新主表中的主键,从表中的外键
列也自动同步更新
ON DELETE CASCADE :级联删除