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、类别

  1. 列级约束:
    对列生效的约束,foreign key虽然声明某一列语法不报错,但是不生效,他是一个表级约束
    除了foreign key,其他都是列级约束
  2. 表级约束:除了非空和默认

2、两种情况

  1. 创建表时添加约束
  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、特殊

  1. 自增必须加在key上(primary key 或 unique)
  2. 一个表只能有一个字段是自增
  3. 自增字段的类型必须是数值型
  4. 自增默认自增步长是+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、外键

  1. 要求在从表中设置外键关系
  2. 外键列类型必须与主表中的关联列类型一致或者兼容,名称可以不同
  3. 主表的关联列必须是一个key(primary key 或 unique),为了保证从从表的外键只有主表的一个键值与之对应
  4. 插入时,先插主表,再插从表(主表中没有从表所关联字段会报错)
  5. 删除时先删从表,再删主表(主表中没有从表所关联字段会报错)

主表:被关联的那个表
从表:设置外键的那个表

以上是关于MySQL-约束的主要内容,如果未能解决你的问题,请参考以下文章

mysql 错误代码1217 MYSQL外键约束检查失败,删除或修改主表记录失败 怎么解决啊

部分代码片段

linux中怎么查看mysql数据库版本

NestedScrollView、LinearLayout 超出约束过度滚动

从mysql的片段中加载ListView

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段