在SQL中,表是最常用的对象之一,其可以存储数据,也可以作为其他对象的基础。本文将介绍如何在SQL中创建表。
1. 创建表的基本格式
在SQL中,创建表的基本格式如下所示:
CREATE TABLE table_name (
column_name1 data_type1 column_constraint1,
column_name2 data_type2 column_constraint2,
column_name3 data_type3 column_constraint3,
...
Table_constraint
);
其中,CREATE TABLE是创建表的关键字;table_name是要创建的表的名称;括号内的部分是表的列定义,每个列都由列名称、数据类型和列约束组成;最后的Table_constraint
是可选的表级约束。
1.1 列定义
列定义是创建表的核心部分,定义了表的结构和字段限制。每列都有一个名称、一个数据类型和一些可选的列级约束。
1.2 列级约束
列级约束是可以应用于单个列的限制,包括NOT NULL、PRIMARY KEY、UNIQUE、CHECK和DEFAULT等。
1.3 表级约束
表级约束是可以应用于表的限制,而不是单个列。常用的表级约束有PRIMARY KEY、UNIQUE和FOREIGN KEY等。
2. 创建表示例
下面是一个简单的创建表的示例:
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(50) NOT NULL,
emp_salary INT,
emp_dept VARCHAR(50),
hire_date DATE,
);
以上SQL语句创建了一个名为employees
的表。该表包括了五个列,其中emp_id
是主键,emp_name
是非空列。
3. 数据类型
在SQL中,数据类型用于指定表中列所包含数据的类型。以下是一些常见的SQL数据类型:
CHAR: 固定长度字符串
VARCHAR: 可变长度字符串
INT: 整数
BIGINT: 大整数
DECIMAL: 定点数
FLOAT: 浮点数
DOUBLE: 高精度浮点数
DATE: 日期
TIME: 时间
DATETIME: 日期时间
3.1 字符串类型
在SQL中,字符串类型包括CHAR和VARCHAR两种。它们都用于表示文本数据,但它们的处理方式略有不同。
CHAR是一种固定长度的字符串类型,它的长度必须在创建列时指定。如果CHAR中包含较少字符,那么它的右侧将被填充空格,而较多的字符则会被截断。
与CHAR不同,VARCHAR是一种可变长度的字符串类型,其长度可以在创建列时指定,但该长度仅表示该列所能容纳的最大字符数,不需要使用整个长度。如果VARCHAR中包含较少的字符,那么它将只占用实际字符数的空间,没有填充。如果包含了较多的字符,那么VARCHAR将会被截断。
3.2 数字类型
数字类型用于存储数字数据。在SQL中,最常用的数字类型是INT和DECIMAL。
INT用于存储整数。它可以被指定为有符号或无符号。默认情况下,INT是有符号的,并且长度为4个字节。
DECIMAL是一种定点数类型,它用于存储精确小数。DECIMAL的长度由精度和标度组成。精度定义了总数字位数,而标度定义了小数点右侧的数字位数。
3.3 日期和时间类型
日期和时间类型用于存储日期和时间的值。在SQL中,最常用的日期和时间类型是DATE、TIME和DATETIME。
DATE用于存储日期,格式为YYYY-MM-DD。TIME用于存储时间,格式为HH:MM:SS。DATETIME用于存储日期时间,格式为YYYY-MM-DD HH:MM:SS。
4. 约束
在SQL中,约束用于强制表的规则。常见的约束包括PRIMARY KEY、FOREIGN KEY、CHECK和UNIQUE等。
4.1 PRIMARY KEY
PRIMARY KEY是一种唯一性约束。在表中,PRIMARY KEY用于标识唯一的记录。每个表只能有一个PRIMARY KEY。
4.2 FOREIGN KEY
FOREIGN KEY是一种引用完整性约束。它用于在两个表之间建立关系。FOREIGN KEY有两个目的:确保参照表中存在对应的值,以及保证参照表中的值必须和引用表中的值匹配。
4.3 CHECK
CHECK约束用于强制列中的值必须满足一定的逻辑条件。例如,可以使用CHECK约束确保一个货物的价格必须大于0。
4.4 UNIQUE
UNIQUE约束用于确保列中的每个值都是唯一的。与PRIMARY KEY不同,UNIQUE约束不保证该列是表中的唯一标识。
5. 示例
在下面的示例中,我们将创建两个表:一个是学生表(students),另一个是课程表(courses)。学生表包含学生ID、姓名和年龄等信息。课程表包含课程ID、课程名称和学分。
5.1 创建学生表
CREATE TABLE students(
student_id INT PRIMARY KEY,
student_name VARCHAR(50) NOT NULL,
age INT,
gender CHAR(1),
address VARCHAR(200),
create_time DATE DEFAULT CURRENT_DATE
);
以上SQL语句创建了一个名为students
的表。该表包括了六个列,其中student_id
是主键,student_name
是非空列,create_time
列设置了默认值为当前日期。
5.2 创建课程表
CREATE TABLE courses(
course_id INT PRIMARY KEY,
course_name VARCHAR(50) NOT NULL,
credit INT,
create_time DATE DEFAULT CURRENT_DATE
);
以上SQL语句创建了一个名为courses
的表。该表包括了四个列,其中course_id
是主键,course_name
是非空列,create_time
列设置了默认值为当前日期。
5.3 创建成绩表并建立关系
成绩表(score)将学生表和课程表关联起来,它包含了学生ID、课程ID和成绩等信息。我们将使用FOREIGN KEY约束建立这两个表之间的关系。
CREATE TABLE score(
student_id INT,
course_id INT,
score INTEGER,
PRIMARY KEY(student_id, course_id),
FOREIGN KEY(student_id) REFERENCES students(student_id),
FOREIGN KEY(course_id) REFERENCES courses(course_id)
);
以上SQL语句创建了一个名为score
的表。该表包括了三个列,其中student_id
和course_id
两列联合构成主键,两个FOREIGN KEY约束分别用于与学生表和课程表建立关系。
6. 总结
在SQL中,创建表是最常用的命令之一。创建表需要指定表名、列名和列约束等信息。表的列约束包括NOT NULL、PRIMARY KEY、UNIQUE、CHECK和DEFAULT等。对表进行约束可以帮助你确保数据的完整性,防止不必要的异常问题。