约束关键字 | 约束意思 |
---|---|
primary key | 主键约束 |
not null | 非空约束 |
unique | 唯一约束 |
foreign key | 外键约束 |
例子:sname varchar(40) not null, – 代表 sname 这个字段不能为 NULL
概述:NOT NULL ,某一列的值不能为 NULL
语法
CREATE TABLE stu(
id INT,
name VARCHAR(40) NOT NULL -- name 字段非空
);
ALTER TABLE stu MODIFY name VARCHAR(40) NOT NULL;
ALTER TABLE stu MODIFY name VARCHAR(40);
示例代码
-- 创建数据库,并指定字符集
CREATE DATABASE test CHARACTER SET utf8;
-- 使用此数据库
USE test;
-- 创建表 a 时候,id 字段添加非空约束
CREATE TABLE a(
id INT NOT NULL,
NAME VARCHAR(40)
);
-- 复制表 a ,新的表名是 b
CREATE TABLE b LIKE a;
-- 查询表结构
DESC a; -- 可以看到在 Null一列显示 NO(不可为空)
DESC b; -- 可以看到在 Null一列显示 NO
-- 删除 b 表中非空约束
ALTER TABLE b MODIFY id INT;
DESC b; -- 执行完删除后,才执行查询,显示为 YES
-- b 表中 name 添加非空约束
ALTER TABLE b MODIFY NAME VARCHAR(40) NOT NULL;
DESC b; -- 执行完删除后,执行查询,name 显示为 NO
-- 使用完删除 数据库即可
DROP DATABASE test;
概述:UNIQUE ,某一列值唯一,不能重复
语法
CREATE TABLE stu(
id INT,
phone_number VARCHAR(11) UNIQUE -- 手机号唯一
);
ALTER TABLE stu MODIFY phone_number VARCHAR(11) UNIQUE;
ALTER TABLE stu DROP INDEX phone_number;
示例代码
-- 创建数据库,并指定字符集
CREATE DATABASE test CHARACTER SET utf8;
-- 使用此数据库
USE test;
-- 创建表 a ,并添加唯一约束
CREATE TABLE a(
id INT,
phone_number VARCHAR(11) UNIQUE
);
-- 查看 a 表结构
DESC a; -- phone_number key一列为 UNI
-- 删除 a 表中的唯一约束
ALTER TABLE a DROP INDEX phone_number;
DESC a; -- phone_number key一列为 空白
-- 给 a 表 id 添加唯一约束
ALTER TABLE a MODIFY id INT UNIQUE;
DESC a; -- id key一列为 UNI
-- 删除数据库
DROP DATABASE test;
概述:PRIMARY KEY ,某一列设置为主键(非空且唯一)
语法
CREATE TABLE stu(
id int primary key, -- 给 id 添加主键约束
name VARCHAR(40)
);
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
ALTER TABLE stu DROP PRIMARY KEY;
示例代码
-- 创建数据库,并指定字符集
CREATE DATABASE test CHARACTER SET utf8;
-- 使用此数据库
USE test;
-- 创建表 a 时候,id 字段添加主键约束
CREATE TABLE a(
id INT PRIMARY KEY,
NAME VARCHAR(40)
);
-- 复制表a ,新表名为 b
CREATE TABLE b LIKE a;
-- 查询表的结构
DESC a; -- 可以看到id,key这一列显示 PRI,NULL 为 NO
DESC b; -- 可以看到id,key这一列显示 PRI,NULL 为 NO
-- 删除 b 表中的主键约束
ALTER TABLE b DROP PRIMARY KEY;
DESC b;
-- 添加 b 表中的主键约束
ALTER TABLE b MODIFY id INT PRIMARY KEY;
DESC b;
-- 使用完,删除数据库
DROP DATABASE test;
概述:如果某一列是数值类型,使用 AUTO_INCREMENT 完成值的自动增长
语法
CREATE TABLE stu(
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键,自增长
name VARCHAR(40)
);
ALTER TABLE stu MODIFY id AUTO_INCREMENT;
ALTER TABLE stu MODIFY id INT;
示例代码
-- 创建数据库,并指定字符集
CREATE DATABASE test CHARACTER SET utf8;
-- 使用此数据库
USE test;
-- 创建表 a ,并添加主键约束和自增长
CREATE TABLE a(
id INT PRIMARY KEY AUTO_INCREMENT,
phone_number VARCHAR(11)
);
-- 查看 a 表结构
DESC a; -- id Extra一列为 auto_increment
-- 删除 a 表中的自动增长
ALTER TABLE a MODIFY id INT;
DESC a; -- id Extra一列为 空白
-- 给 a 表 id 添加 自动增长
ALTER TABLE a MODIFY id INT AUTO_INCREMENT;
DESC a; -- id Extra一列为 auto_increment
-- 删除数据库
DROP DATABASE test;
概述:FOREIGN KEY ,让表和表之间产生关系,从而保证数据的正确性
语法
CREATE TABLE stu(
...
外键列,
CONSTRAINT 外键名称 FOREIGN KEY (外键列名称) REFERENCES 主表名称(主表列名称)
);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称 (主表列名称);
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
示例代码
-- 创建数据库,并指定字符集
CREATE DATABASE test CHARACTER SET utf8;
-- 使用此数据库
USE test;
-- 创建 部门 表
CREATE TABLE dept(
deptId INT PRIMARY KEY, -- 部门表号
NAME VARCHAR(40) -- 部门名字
);
-- 创建员工表
CREATE TABLE employ(
id INT PRIMARY KEY, -- 员工编号
ename VARCHAR(40), -- 员工名字
dept_id INT, -- 员工部门编号
CONSTRAINT emp_dept FOREIGN KEY (dept_id) REFERENCES dept(deptId)
);
-- 看下述步骤查看是否有外键
-- 删除 员工表外键
ALTER TABLE employ DROP FOREIGN KEY emp_dept;
-- 查看
-- 添加 员工表外键
ALTER TABLE employ ADD CONSTRAINT emp_dept FOREIGN KEY (dept_id) REFERENCES dept(deptId);
-- 查看
-- 删除数据库
DROP DATABASE test;