MySQL-约束
Posted 滑稽404#
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL-约束相关的知识,希望对你有一定的参考价值。
文章目录
看了点关于mysql的面经,发现自己基础薄弱,回来补一下基础,顺便学习一下索引优化和数据库并发
复习来源尚硅谷
一、常见约束
1、格式
create table 表名(
字段名 字段类型 约束1 约束2..
);
create table student(
id int parimary key,
name varchar(5) not null,
sex enum('男','女') default '男' not null,
exam_id int unique comment '准考证号'
);
2、六大约束
-
not null :非空。字段不能为空
-
default ‘val’:默认。如果没插入的话,该字段默认为val值
-
unique:唯一。字段值唯一,不能重复
-
check:检查。检查字段是否在范围内(Mysql中无效,但是语法不报错)
sex char(2) check(sex in ('男','女')):检查sex是否是男和女,不是男女性别插入不了
- primary key:主键。字段为主键,能够唯一标识该行属性的元素,主键可能是一个字段,也有可能是多个字段组成的联合主键
- foreign key:外键。字段为外键(一般关联另一张表的存在主键)
foreign key(Regionkey) references Region(key)
当前表的Regionkey 关联 Region表的Regionkey:
如果插入的Regionkey没有Region表对应key的就会插入失败,如:
插入一个‘qwe’,但是Region的key没有一个'qwe'的值就报错
二、 约束类别
1、类别
- 列级约束:
对列生效的约束,foreign key虽然声明某一列语法不报错,但是不生效,他是一个表级约束
除了foreign key,其他都是列级约束 - 表级约束:除了非空和默认
2、两种情况
- 创建表时添加约束
- 修改表时添加约束
# 创建表时
create table 表名(
字段名1 字段类型 列级约束,
字段名2 字段类型 列级约束,
表级约束
);
# 修改表时
create score(
sno int comment '学生id',
cno char(10) comment '课程号',
grade double comment '成绩',
primary key(sno,cno),-- 成绩表由学生和课程共同确认主键
foreign key(sno) references student(id), -- sno关联学生表的id
foreign key(cno) references course(id)-- cno关联课程表的id
);
三、修改表添加约束(alter)
# 列级约束
ALTER TABLE news MODIFY COLUMN id INT PRIMARY KEY;
# 表级约束
ALTER TABLE news ADD COLUMN PRIMARY KEY(id);
ALTER TABLE news ADD COLUMN FOREIGN KEY(department_id) REFERENCES department(id);
四、标识列(自增列)
auto_increment:自增
1、特殊
- 自增必须加在key上(primary key 或 unique)
- 一个表只能有一个字段是自增
- 自增字段的类型必须是数值型
- 自增默认自增步长是+1,可以通过 set auto_increment_increment =3 来设置步长
2、创建表时
create employee(
id int primary key auto_increment,
name varchar(5)
);
3、修改表时
alter table employee modify column id int primary key auto_increment
五、面试考点
1、主键和唯一的区别
唯一字段只能有一个空值,不能重复
2、外键
- 要求在从表中设置外键关系
- 外键列类型必须与主表中的关联列类型一致或者兼容,名称可以不同
- 主表的关联列必须是一个key(primary key 或 unique),为了保证从从表的外键只有主表的一个键值与之对应
- 插入时,先插主表,再插从表(主表中没有从表所关联字段会报错)
- 删除时先删从表,再删主表(主表中没有从表所关联字段会报错)
主表:被关联的那个表
从表:设置外键的那个表
以上是关于MySQL-约束的主要内容,如果未能解决你的问题,请参考以下文章
mysql 错误代码1217 MYSQL外键约束检查失败,删除或修改主表记录失败 怎么解决啊
NestedScrollView、LinearLayout 超出约束过度滚动
连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段