回忆是一座桥
却是通往寂寞的牢

SQL语法 - 表的创建与约束

表的创建

在SQL中,可以使用CREATE TABLE语句来创建一个新的数据库表。基本语法如下:

CREATE TABLE 表名 (
    列名1 数据类型 [列级约束],
    列名2 数据类型 [列级约束],
    …
    列名n 数据类型 [列级约束],
    [表级约束]
);

例如,创建一个名为students的学生信息表,包含idnameage三个字段:

CREATE TABLE students (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT
);

还可以使用CREATE TABLE .. AS SELECT..语句从现有的表中提取数据来创建新的表:

CREATE TABLE students AS 
SELECT
    id,
    name,
    age
FROM
    school
;

此外,在部分数据库实现中可能还会对CREATE语句进行扩展,比如MySQL支持以下语句:

-- MySQL
CREATE TABLE IF NOT EXISTS students (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT
);

该语句增加了一个判断,仅当表不存在时才会进行创建表的操作,若表已存在则不会执行该创建表的语句。

类似的,在SQL Server中则不存在以上扩展语法,想达到以上效果,则必须使用IF控制语句来判断表是否存在,比如:

-- SQL Server
IF NOT EXISTS (
    SELECT * 
    FROM sys.tables t 
    JOIN sys.schemas s on (t.schema_id = s.schema_id) 
    WHERE s.name = 'myschema' and t.name = 'students')
CREATE TABLE students (
    id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT
);

表的约束

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

  • 非空约束(not null):约束的字段不能为null
  • 唯一约束(unique):约束的字段不能重复
  • 主键约束(primary key):约束的字段既不能为null,也不能重复(简称 PK)
  • 外键约束(foreign key):外键约束用于建立两个表之间的关联关系,确保引用完整性
  • 检查约束(check):约束的字段必须满足指定条件,部分SQL方言可能不支持

约束可以分为列级约束和表级约束,创建表时,在字段定义后面添加的约束为列级约束,在与字段同级别的位置处定义的约束为表级约束,而表级约束还可以自定义约束的名称,方便后续的更改或删除等操作。

列级约束

列级约束是对一个特定列的约束,支持所有的约束类型。

CREATE TABLE classes (
    id INT PRIMARY KEY,         -- 列级约束,主键约束
    name VARCHAR(50) NOT NULL,  -- 列级约束,非空约束
);

表级约束

表级约束通常用于对多个列一起进行的约束,仅支持主键、外键、唯一、检查等约束类型。

CREATE TABLE students (
    schoolId INT,
    id INT,
    name VARCHAR(50) NOT NULL,  -- 列级约束,非空约束
    age INT,
    classId INT,
    PRIMARY KEY (schoolId,id),  -- 表级约束,主键约束
    CONSTRAINT students_FK FOREIGN KEY (classId) REFERENCES classes (id),
    CONSTRAINT students_UK UNIQUE (name),
    CONSTRAINT students_CK CHECK (age>18)
    -- 表级约束,外键、唯一、检查等约束
);
未经允许不得转载:夕枫 » SQL语法 - 表的创建与约束
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论