-- 1.作用和定义.分类
-- 实体完整性(不能存在两条完全相同无法区分的记录)
-- 域完整性(作用范围)
-- 引用完整性(外表引用字段 当前表无法删除)
-- 用户自定义完整性(用户名唯一)
-- 定义:表级的强制规定 创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后通过 ALTER TABLE 语句规定 约束。
-- 分类:单列约束/多列约束 和 列级约束/表级约束
-- 列级约束: 列的后面 语法都支持,但外键没有效果 不可以起约束名
-- 表级约束: 所有列的下面 默认和非空不支持,其他支持 可以起约束名(主键没有效果)
-- !!!!
information_schema数据库名(系统库) #table_constraints表名称(专门存储各个表的约束)
-- SELECT * FROM information_schema.table_constraints WHERE table_name = 'employees';
-- 2.主要关键字 注意 全部要在字段名后添加数据类型
-- NOT NULL 非空约束,规定某个字段不能为空
-- 1)创建时
-- USE MyFamily; -- 切换数据库
-- CREATE TABLE student(
-- id int not nul,
-- );
-- 2)建表后
-- ALTER TABLE emp MODIFY sex VARCHAR(30) NOT NULL;
-- 3)删除
-- alter table 表名称 modify 字段名 数据类型 (NULL);#去掉not null,相当于修改某个非注解字段,该字段允 许为空
-- UNIQUE 唯一约束,规定某个字段在整个表中是唯一的 PRIMARY KEY 主键(非空且唯一)约束
-- 1)注意:唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。??
-- 唯一性约束允许列值为空。
-- 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。
-- MySQL会给唯一约束的列上默认创建一个唯一索引。
-- 多个列组合的值唯一/复合唯一约束:字段列表中写的是多个字段名,多个字段名用逗号分隔,表示那么是复合唯一,即多 个字段的组合是唯一的
-- 可以有多个null值
-- 唯一约束只能通过删除唯一索引的方式删除
-- 唯一索引 有自定义 uk_name_pwd
-- 没有定义 创建唯一约束时未指定名称,如果是单列,就默认和列名相同;
-- 如果是组合列,那么默认和() 中排在第一个的列名相同
-- show index from 表名称; 查看表的索引 /
-- 2)建表前 几种写法 表级写法 多个列组合的值唯一写法
-- CREATE TABLE t_course(
-- cid INT UNIQUE,
-- tel char(11) unique,
-- cardid char(18) unique key
-- CONSTRAINT cardid UNIQUE(cardid)
-- -- 使用表级约束语法 表示用户名和密码组合不能重复 多个列组合的值唯一??复合唯一约束
-- CONSTRAINT uk_name_pwd UNIQUE(tel,cid)
-- );
-- 3)建表后 多个列组合的值唯一 ,隔开
-- alter table 表名称 add unique key(字段列表);
-- alter table 表名称 modify 字段名 字段类型 unique;
-- 4)删除
-- ALTER TABLE USER
-- DROP INDEX uk_name_pwd;
-- PRIMARY KEY 主键(非空且唯一)约束
-- 1)一个表最多只能有一个主键约束,不要修改主键字段的值!删除主键约束!
-- MySQL的主键名总是PRIMARY ,就算自己命名了主键约束名也没用
-- 复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复
-- 2)建表前 列级写法 表级写法 复合主键
-- CREATE TABLE emp4(
-- id INT PRIMARY KEY AUTO_INCREMENT ,
-- NAME VARCHAR(20)
-- );
-- CREATE TABLE emp5(
-- id INT NOT NULL AUTO_INCREMENT,
-- NAME VARCHAR(20),
-- pwd VARCHAR(15),
-- CONSTRAINT emp5_id_pk PRIMARY KEY(id)
-- );
-- 3)建表后 多个列组合的值唯一 ,隔开 最好不改
-- ALTER TABLE 表名称 ADD PRIMARY KEY(字段列表); #字段列表可以是一个字段,也可以是多个字段,如果是多 个字段的话,是复合主键
-- 4)删除 可以忽略
-- alter table 表名称 drop primary key;
-- 4)AUTO_INCREMENT 自增列
-- 41.) 一个表最多只能有一个自增长列
-- 自增长列约束的列必须是键列(主键列,唯一键列)
-- 最好别自己插入数据设置 自增列 如有则 5.0版本(存在内存删除重启恢复按表继续自增) 和8.0版本(存在磁盘删除重启按上一次记述自增) 不同
-- 4.2)建表前
-- create table employee(
-- eid int primary key auto_increment,
-- )
-- 4.3)建表后
-- alter table employee modify eid int auto_increment;
-- 4.4)删除
-- alter table 表名称 modify 字段名 数据类型; #去掉auto_increment相当于删除
-- FOREIGN KEY 外键约束
-- CHECK 检查约束
-- DEFAULT 默认值约束
网友评论