**
小白终是踏上了这条不归路----小文的mysql学习笔记(1)
小白终是踏上了这条不归路----小文的mysql学习笔记(2)----条件查询
小白终是踏上了这条不归路----小文的mysql学习笔记(3)----排序询查
小白终是踏上了这条不归路----小文的mysql学习笔记(4)----常见的基本函数
小白终是踏上了这条不归路----小文的mysql学习笔记(5)----分组查询
…
…
小白终是踏上了这条不归路----小文的mysql学习笔记(目录)
**
含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
语法:
直接在字段名和类型后面追加约束类型即可。
只支持: 默认(DEFAULT)、非空(NOT NULL)、主键(PRIMARY KEY)、唯一(UNIQUE)
六大约束:
(1)NOT NULL:非空,用于保证该字段的值不能为空
比如姓名、学号等
(2)DEFAULT: 默认,用于保证该字段有默认值
比如性别
(3)PRIMARY KEY:主键,用于保证该字段的值具有唯一-性,并且非空
比如学号、员工编号等
(4)UNIQUE:唯- - -,用于保证该字段的值具有唯一-性,可以为空
比如座位号
(5)CHECK:检查约束【mysq1 中不支持】(意思就是在mysql中你输入check它不会报错,但是也不会执行!)
(6)FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值.
在从表添加外键约束,用于引用主表中某列的值
比如学生表的专业编号,员工表的部门编号,员工表的工种编号
只有在两种情况下可以添加约束: 1.创建表时
2.修改表时
约束的添加分类:
列级约束: 六大约束语法上都支持不会报错,但外键约束没有效果.
表级约束: 除了非空(NOT NULL)、默认(DEFAULT),其他的都支持.
一般情况下:我们像主键(PRIMARY KEY)和唯一键(UNIQUE)这种就用列级分类
像外键 就用表级分类。
主键(prmary key)和唯一键(unique)都可以保证唯一性,但是唯一键可以为null而主键不可以;一个表可以有多个唯一键但只能有一个主键,他们都被允许组合,但不推荐
组合主键当中是可以部分重复,但是不允许全部重复。
外键的特点: 1、要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
3、主表的关联列必须是一个key (一般是主键或唯一)
4、插入数据时,先插入主表,再插入从表.
删除数据时,先删除从表,再删除主表
下面我们分别来实操一下:
一、创建表时添加约束
1、添加列级约束
我们先创建一个students库
然后我们再分别插入一张stuinfo表和一张major表然后给他们设置约束条件
这里补充一个知识:show index from 表
这个命令有助于诊断性能低下的查询,尤其是查询是否使用了可用的索引。
2、添加表级约束
语法:
在各个字段的最下面添加 【constraint 约束名】约束类型(字段名)
注:【】内内容可省略不写
那么我们举一个栗子:我们先把上一个stuinfo表删掉,重新用表级连接建立
这样出来的效果和上面是一样的,当然 constraint 约束名 可以省略,像这样:
他们效果是一样的
二、修改表时添加约束
语法:
添加列级约束:
alter table 表名 modify column 字段名 字段类型 约束条件;
添加表级约束:
alter table 表名 add 【cons’t’raint 约束名】 约束类型(字段名) 【外键的引用】
那么下面我们分别举一个栗子吧
我们同样先把上面的stuinfo表删掉,然后再重新建一个没有任何约束的stuinfo表,然后再将约束条件添加进去。
1、给添加主键(两种方式)
以列级约束添加:
以表级约束添加:
2、给stuname添加非空约束
3、给seat添加唯一键
以列级约束添加:
以表级约束添加:
4、给age添加默认约束
5、给majorid添加外键
三、修改表时删除约束
语法: alter table 表名 drop 约束条件 列名(也可能是你取了别名的约束名);
alter table 表名 modify column 列名 数据类型 null;
alter table 表名 modify column 列名 数据类型 ;
1、删除主键
2、删除唯一键
3、删除外键(因为上面我们插入外键的时候取了一个别名fk所以这里删的时候写fk)
4删除非空约束
5、删除默认约束
**