MySQL入门:约束
约束
约束是给表中的数据添加的强制执行的校验规则,被增、删、改的数据必须符合约束条件,查询到的数据才是合理的。
关系型数据库中有5个完整性约束:
- 非空约束
- 唯一性约束
- 主键约束
- 外键约束
- 检查约束
非空约束:NOT NULL
值不能为空,列级约束,约束条件写在列的后面,仅对某列有效
非空约束
唯一性约束:UNIQUE
值不能重复,(可以有多个NULL
,NULL
不是值),列级约束、表级约束。
写在列的后面,可以给某一列添加唯一性约束。
也可以写在表的后面,给多列一起做唯一性约束。
说明:id
,name
组合唯一性约束
给组合的约束键起名:
主键约束:PRIMARY KEY
值非空且唯一,能够唯一标识该条记录,是列级约束或表级约束。一张表中只能有一个主键。
主键约束
表级约束写法:
表级约束写法
外键约束:FOREIGN KEY
值是另一张表的主键,若有值一定是主键的值。主键表称为主表,使用主键做外键的表成为从表。首先定义主表,然后定义从表。使用外键表必须是innodb
引擎。
定义主表:
定义从表:
从表
检查约束:CHECK
MySQL不支持检查约束
自增长
AUTO_INCREMENT
,一般用于主键,需要列为数值类型。
默认值
DEAFULT '默认值'
,设置字段默认值。
索引
一张表对应3个文件:
- frm结构文件
- myd数据文件
- myi索引文件
删除对应文件关系:
删除命令 | 对应文件 |
---|---|
DROP |
删除frm,myd,myi |
TRUNCATE |
删除myi,myd删除了日志信息 |
DELETE |
删除myd在myi文件中保留着索引记录 |
修改约束
ALTER
语句修改约束
添加新列并设置主键:ALTER TABLE 表名 ADD 列名 INT PRIMARY KEY;
删除主键:ALTER TABLE 表名 DROP PRIMARY KEY;
已有列添加主键:ALTER TABLE 表名 ADD PRIMARY KEY(列名);
添加外键:ALTER TABLE 从表名 ADD CONSTRAINT 从表外键名 FOREIGN KEY(从表外键列名) REFERENCES 主表名(主表主键列名);
删除外键:ALTER TABLE 从表名 DROP FOREIGN KEY 外键名 ;
唯一性约束的添加和删除
添加:ALTER TABLE ADD CONSTRAINT 定义的约束名 UNIQUE (列名);
删除:DROP INDEX 定义的约束名 ON 表名
修改:ALTER TABLE 表名 MODIFY 列名 列类型;
默认值的添加和删除
添加:ALTER TABLE 表名 ALTER COLUMN 列名 SET DEFAULT 默认值;
删除:ALTER TABLE 表名 ALTER COLUMN 列名 DROP DEFAULT;