表的创建
在SQL中,可以使用CREATE TABLE
语句来创建一个新的数据库表。基本语法如下:
CREATE TABLE 表名 (
列名1 数据类型 [列级约束],
列名2 数据类型 [列级约束],
…
列名n 数据类型 [列级约束],
[表级约束]
);
例如,创建一个名为students
的学生信息表,包含id
、name
和age
三个字段:
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)
-- 表级约束,外键、唯一、检查等约束
);