创建一个mysql数据表
create table users ( -- 创建一个 users 表,包含 id name age gender四个字段
id int comment '字段唯一值',
name varchar(50) comment '用户名, varchar(50) -> 代表字段最大长度为50个字符',
age int comment '年龄',
gender char (1) comment '性别, char(1) -> 代表字段最大长度为1个字符, 1个字符代表一个字节'
) comment '测试用户表';
insert into users values (1, '张三', 18, '男'); -- 向users表中插入一条数据
insert into users values (2, '张三', 18, '男'); -- 向users表中插入一条数据
insert into users values (3, '李四', 19, '女'); -- 向users表中插入一条数据
给users数据库表添加约束 方式字段为空或id重复
create table users ( -- 创建一个附带约束的表
id int primary key comment '字段 primary key -> 主键',
name varchar(50) not null unique comment '用户名, not null -> 不可为空, unique -> 唯一值',
age int comment '年龄',
gender char (1) default '男' comment '性别, default ‘男’ -> 默认设置为 男'
) comment '测试用户表';
数据库约束有哪些 怎么使用
1. 主键约束(PRIMARY KEY)
作用
唯一标识表中的每一行数据
不允许
NULL
值一个表只能有一个主键(可以是单列或组合列)
语法
CREATE TABLE users (
id INT PRIMARY KEY, -- 主键
name VARCHAR(50)
);
组合主键
CREATE TABLE orders (
order_id INT,
product_id INT,
PRIMARY KEY (order_id, product_id) -- 联合主键
);
2. 唯一约束(UNIQUE)
作用
保证某一列或多列的值唯一(可有多个唯一约束)
与主键不同,唯一约束允许
NULL
(但多个NULL
被视为不同值)
语法
CREATE TABLE users (
email VARCHAR(100) UNIQUE
);
组合唯一
CREATE TABLE product (
category_id INT,
product_name VARCHAR(50),
UNIQUE (category_id, product_name)
);
3. 非空约束(NOT NULL)
作用
规定列必须有值,不能为
NULL
语法
CREATE TABLE users (
name VARCHAR(50) NOT NULL
);
4. 默认值约束(DEFAULT)
作用
在插入数据时,如果没有指定该列的值,则使用默认值
语法
CREATE TABLE users (
status VARCHAR(20) DEFAULT 'active'
);
5. 检查约束(CHECK)
作用
限制列的值必须满足条件(MySQL 8.0.16+ 正式支持)
语法
CREATE TABLE users (
age INT CHECK (age >= 18)
);
注意:MySQL 5.x 虽然可以写 CHECK
,但实际上会被忽略。
6. 外键约束(FOREIGN KEY)
作用
保证两张表之间的引用完整性
当子表外键引用的父表记录被删除/更新时,可以设置级联操作
语法
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
常见 ON DELETE / ON UPDATE 行为
选项 | 说明 |
---|---|
CASCADE | 跟随父表一起删除/更新 |
SET NULL | 置为 NULL |
RESTRICT | 阻止删除/更新(默认) |
NO ACTION | 类似 RESTRICT |
7. 自增约束(AUTO_INCREMENT)
作用
用于生成唯一的数字(通常配合主键)
语法
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50)
);
总结对比表
约束类型 | 是否允许 NULL | 是否唯一 | 作用范围 | 是否可组合 |
---|---|---|---|---|
PRIMARY KEY | 否 | 是 | 一张表一个 | 可组合列 |
UNIQUE | 是 | 是 | 多个可用 | 可组合列 |
NOT NULL | 否 | 否 | 单列 | 可与其他配合 |
DEFAULT | 是 | 否 | 单列 | 可与其他配合 |
CHECK | 取决于条件 | 否 | 单列/多列 | 可与其他配合 |
FOREIGN KEY | 取决于父表 | 否 | 跨表 | 可组合列 |
AUTO_INCREMENT | 否 | 是 | 单列 | 常与主键配合 |