mysql学习笔记2
约束
数据库表约束:对表中的数据进行限制,保证数据的正确性、有效性和完整性,一个表如果添加了约束,不正确的数据将无法插入到表中。约束在创建表的时候添加比较合适。
约束名 | 约束关键字 |
---|---|
主键 | primary key |
唯一 | unique |
非空 | not null |
外键 | foreign key |
检查约束 | check 注:mysql 不支持 |
主键的作用
用来唯一标识数据库中的每一条记录;
主键关键字: primary key
主键的特点:
- 非空 not null
- 唯一 unique
主键的增删改语法:
创建表时设置主键:
(俩种:一种直接跟在字段后面加上primary key 第二种 在最后一句加上primary key (id)):
create table st4 (
id int primary key auto_increment,
name varchar(20)
--primary key(id)
) auto_increment = 1000;
创建好以后修改(increment)起始值:
alter table st4 auto_increment = 2000;
-- 删除st5表的主键
alter table st5 drop primary key;
-- 和添加主键
alter table st5 add primary key(id);
注意:设置auto_increment自增后,delete 和truncate对自增是俩种影响
DELETE:删除所有的记录之后,自增长没有影响,自增长不重置,
TRUNCATE:删除以后,自增长又重新开始。自增长重置为初始,
主键数在一个表中,只能有一个。但这一个主键可以单列,也可以是多列。
自增长只能用在主键上;
唯一约束:unique
创建表的时候添加唯一约束:在字段后面直接加上unique
create table st7 (
id int,
name varchar(20) unique
)
注意:多个null并不重复,因为null没有数据
非空约束:not null
创建表学生表st8, 包含字段(id,name,gender)其中name不能为NULL
create table st8 (
id int,
name varchar(20) not null,
gender char(1)
)
默认值:default
创建一个学生表 st9,包含字段(id,name,address), 地址默认值是广州
create table st9 (
id int,
name varchar(20),
address varchar(20) default '广州'
)
-- 添加一条记录,使用默认地址
insert into st9 values (1, '李四', default);
select * from st9;
insert into st9 (id,name) values (2, '李白');
-- 添加一条记录,不使用默认地址
外键约束:
当表内数据需要借助其他表数据来表示的时候 ,应对该表内的数据进行外键约束(防止设置非法数据,在另一个表内无法查到) 但也可以不设置外键约束…依旧还可以认为他是外键
创建外键约束的语法:
新建表时增加外键:(在[ ]内的字段属于可填可不填)
[CONSTRAINT] [外键约束名称] FOREIGN KEY 已有表增加外键:
ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主 键字段名);
创建一个dep_id的外键约束,主表是department:
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)
)
-- 删除employee表的emp_depid_fk外键
alter table employee drop foreign key emp_depid_fk;
-- 在employee表情存在的情况下添加外键
alter table employee add constraint emp_depid_fk foreign key (dep_id) references department(id);
外键的级联
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) ON UPDATE CASCADE
)
结尾加上on update cascade或on delete cascade俩种情况,同时级联的关系有四种;no action,cascade,...
alter table 参照表
Add constraint 外键
Foreign key( 外键名) references 被参照表(主键)
on update cascade --级联更新
on delete cascade --级联删除