SQL 约束

SQL 约束学习笔记

约束是用于限制表中数据的规则,确保数据的完整性和一致性。SQL 提供了多种约束类型,包括主键约束、非空约束、唯一约束和检查约束。

1. 约束的类型

(1)主键约束(Primary Key)

  • 定义:主键约束用于唯一标识表中的每一行,具有非空和唯一性。
  • 语法
    1
    2
    3
    4
    CREATE TABLE 表名 (
    列名 数据类型 PRIMARY KEY,
    ...
    );

(2)非空约束(Not Null)

  • 定义:非空约束用于确保列中的值不能为空。
  • 语法
    1
    2
    3
    4
    CREATE TABLE 表名 (
    列名 数据类型 NOT NULL,
    ...
    );

(3)唯一约束(Unique)

  • 定义:唯一约束用于确保列中的值不能重复。
  • 语法
    1
    2
    3
    4
    CREATE TABLE 表名 (
    列名 数据类型 UNIQUE,
    ...
    );

(4)检查约束(Check)

  • 定义:检查约束用于确保列中的值满足指定条件。
  • 语法
    1
    2
    3
    4
    CREATE TABLE 表名 (
    列名 数据类型 CHECK (条件),
    ...
    );

2. 约束的创建

(1)第一种写法:在列定义时直接添加约束

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE TAB_USER (
-- 编号(主键约束)
ID VARCHAR2(3) PRIMARY KEY,
-- 姓名(非空约束)
NAME VARCHAR2(10) NOT NULL,
-- 工资(唯一约束)
SAL NUMBER(5, 3) UNIQUE,
-- 年龄(检查约束)
AGE NUMBER(3) CHECK (AGE >= 1 AND AGE <= 150),
-- 性别(默认值)
GENDER VARCHAR2(3) DEFAULT '男'
);

(2)第二种写法:在表定义后添加约束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE TAB_USER (
-- 编号
ID VARCHAR2(3),
-- 姓名(非空约束)
NAME VARCHAR2(10) NOT NULL,
-- 工资
SAL NUMBER(5, 3),
-- 年龄
AGE NUMBER(3),
-- 性别(默认值)
GENDER VARCHAR2(3) DEFAULT '男',
-- 主键约束
CONSTRAINT TAB_USER_ID_PK PRIMARY KEY (ID),
-- 唯一约束
CONSTRAINT TAB_USER_SAL_UK UNIQUE (SAL),
-- 检查约束
CONSTRAINT TAB_USER_AGE_CK CHECK (AGE BETWEEN 1 AND 150)
);

3. 约束的删除

语法:

1
ALTER TABLE 表名 DROP CONSTRAINT 约束名;

示例:

1
2
-- 删除 SAL 列的唯一约束
ALTER TABLE TAB_USER DROP CONSTRAINT TAB_USER_SAL_UK;

4. 插入数据

示例:

1
2
3
4
5
6
-- 插入数据
INSERT INTO TAB_USER (ID, NAME, SAL, AGE) VALUES (1, '张三', 100.50, 25);
INSERT INTO TAB_USER (ID, NAME, SAL, AGE) VALUES (2, '李四', 200.75, 30);

-- 查询数据
SELECT * FROM TAB_USER;

5. 综合示例

(1)创建表并添加约束

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE TAB_USER (
-- 编号(主键约束)
ID VARCHAR2(3) PRIMARY KEY,
-- 姓名(非空约束)
NAME VARCHAR2(10) NOT NULL,
-- 工资(唯一约束)
SAL NUMBER(5, 3) UNIQUE,
-- 年龄(检查约束)
AGE NUMBER(3) CHECK (AGE BETWEEN 1 AND 150),
-- 性别(默认值)
GENDER VARCHAR2(3) DEFAULT '男'
);

(2)插入数据

1
2
3
4
5
6
-- 插入数据
INSERT INTO TAB_USER (ID, NAME, SAL, AGE) VALUES (1, '张三', 100.50, 25);
INSERT INTO TAB_USER (ID, NAME, SAL, AGE) VALUES (2, '李四', 200.75, 30);

-- 查询数据
SELECT * FROM TAB_USER;

(3)删除约束

1
2
-- 删除 SAL 列的唯一约束
ALTER TABLE TAB_USER DROP CONSTRAINT TAB_USER_SAL_UK;

6. 总结

  1. 主键约束:用于唯一标识表中的每一行。
  2. 非空约束:用于确保列中的值不能为空。
  3. 唯一约束:用于确保列中的值不能重复。
  4. 检查约束:用于确保列中的值满足指定条件。

SQL 约束
https://blog.pangcy.cn/2018/09/25/数据库相关/Oracle/SQL 语法/SQL 约束/
作者
子洋
发布于
2018年9月25日
许可协议