数据约束
1、 常见的约束类型
约束说明
PRIMARY KEY主键,保证数据的唯一性,并且是非空default默认值,保证这个字段也有默认值的存在not null非空约束,保证了当前的字段不允许存在空值unique唯一值约束,但是可以为空check检查,但是不支持FOREIGN KEY外键,限制两个表的关系,约束该字段的值必须来自与之关联的主表的值
2、 创建约束的时间
1、创建表的时候
2、修改表的时候
3、必须在插入数据之前
3、约束的分类
分类说明
字段约束语法上都支持,但是外键约束是没有效果的表级约束除了非空、默认,其他都支持
4、 字段约束的实例
CREATE TABLE users(
id INT PRIMARY KEY AUTO_INCREMENT, #主键
username VARCHAR(20) NOT NULL, #非空
gender CHAR CHECK(gender='男' OR gender='女'),#检查
phone VARCHAR(11) UNIQUE, #唯一值
age INT DEFAULT 18, #默认值
address INT REFERENCES address(id) #外键
)
CREATE TABLE address(
id INT PRIMARY KEY AUTO_INCREMENT,
city VARCHAR(50)
)
SHOW TABLES;
注意点:
1、check这个约束正常写,不报错,但是mysql是不支持的
2、外键写在字段约束中,不生效
5、表级约束
表级约束
CREATE TABLE userss(
id INT , #主键
username VARCHAR(20) , #非空
gender CHAR ,#检查
phone VARCHAR(11), #唯一值
age INT , #默认值
addressid INT,
CONSTRAINT uid PRIMARY KEY(id),#约束的是主键
CONSTRAINT uqkey UNIQUE(phone),#约束的是唯一值
CONSTRAINT ck CHECK(gender='男' OR gender='女'),#约束的是检查
CONSTRAINT fkk FOREIGN KEY(addressid) REFERENCES address(id) #约束的是外键
)
SELECT * FROM userss;
CREATE TABLE usersss(
id INT , #主键
username VARCHAR(20) , #非空
gender CHAR ,#检查
phone VARCHAR(11), #唯一值
age INT , #默认值
addressid INT,
PRIMARY KEY(id),#约束的是主键
UNIQUE(phone),#约束的是唯一值
CHECK(gender='男' OR gender='女'),#约束的是检查
FOREIGN KEY(addressid) REFERENCES address(id) #约束的是外键
)
6、通用格式
# 通用格式
CREATE TABLE userssss(
id INT PRIMARY KEY AUTO_INCREMENT, #主键
username VARCHAR(20) NOT NULL, #非空
gender CHAR CHECK(gender='男' OR gender='女'),#检查
phone VARCHAR(11) UNIQUE, #唯一值
age INT DEFAULT 18, #默认值
addressid INT, #外键
FOREIGN KEY(addressid) REFERENCES address(id)
)
7、修改约束
约束类型语法
字段约束alter table 表名 modify 字段名 字段类型 新约束表级约束ALTER TABLE 表名 ADD CONSTRAINT 新约束名 约束类型注意点(外键的添加)ALTER TABLE 表名 ADD CONSTRAINT FOREIGN KEY(需要添加外键的字段名) REFERENCES 产生关联的表(字段);
8、外键的重要事项
1、添加外键的时候,使用的是表级约束,字段约束可以写,但是不生效
2、如果字段额外增加外键的时候,ALTER TABLE 表名 ADD CONSTRAINT FOREIGN KEY
(需要添加外键的字段名
) REFERENCES 产生关联的表
(字段
);
9、删除约束
# 删除约束
删除主键
ALTER TABLE userss DROP PRIMARY KEY;
删除唯一值
ALTER TABLE userss DROP INDEX uqkey
删除外键
ALTER TABLE userss DROP FOREIGN KEY fkk
注意点:
1、在删除约束之前,必须查看一下约束名
SHOW INDEX FROM userssss;
2、在1的基础上删除