在SQL(Structured Query Language,结构化查询语言)的世界中,表是存储数据的基础结构,类似于电子表格中的工作表或数据库中的记录集合。创建表并填充其内容是数据库设计与管理中的核心任务之一。本章将深入探讨如何在数据库中创建表以及如何通过不同的方法向表中添加内容。
在创建表之前,首先需要明确表的结构,即表中将包含哪些列(字段),每列的数据类型是什么,以及是否需要为某些列设置约束(如主键、外键、唯一性等)。表的结构设计直接影响到数据的存储效率和查询性能。
在SQL中,使用CREATE TABLE
语句来创建新表。基本语法如下:
CREATE TABLE 表名 (
列名1 数据类型 [约束],
列名2 数据类型 [约束],
...
列名N 数据类型 [约束]
);
示例:创建一个名为Students
的表,包含学生ID(主键)、姓名、年龄和入学日期。
CREATE TABLE Students (
StudentID INT PRIMARY KEY,
Name VARCHAR(100) NOT NULL,
Age INT CHECK (Age >= 0),
EnrollmentDate DATE
);
在这个例子中,StudentID
是主键,保证每个学生ID的唯一性;Name
字段不允许为空(NOT NULL
);Age
字段通过检查约束确保年龄非负;EnrollmentDate
字段存储学生的入学日期。
创建表之后,下一步是向表中插入数据。这通常通过INSERT INTO
语句完成。
基本语法:
INSERT INTO 表名 (列1, 列2, ..., 列N)
VALUES (值1, 值2, ..., 值N);
如果插入的数据与表中所有列的顺序和类型相匹配,并且没有为表定义默认值,可以省略列名列表。
示例:向Students
表中插入一条记录。
INSERT INTO Students (StudentID, Name, Age, EnrollmentDate)
VALUES (1, '张三', 20, '2020-09-01');
简化插入(当所有列均被赋值且顺序与表定义一致时):
INSERT INTO Students
VALUES (2, '李四', 21, '2020-09-05');
对于大量数据的插入,逐条使用INSERT INTO
语句效率较低。SQL提供了批量插入数据的方法,具体实现可能因数据库系统而异,但大多数数据库支持在单个INSERT INTO
语句中插入多行数据。
示例(以MySQL为例):
INSERT INTO Students (StudentID, Name, Age, EnrollmentDate)
VALUES
(3, '王五', 22, '2020-09-10'),
(4, '赵六', 20, '2020-09-15'),
(5, '孙七', 21, '2020-09-20');
在某些情况下,表中的某些列可能经常或总是使用相同的值,或者需要自动生成唯一的值。这时,可以使用默认值(DEFAULT)和自动增量(AUTO_INCREMENT,MySQL中的语法)特性。
示例:修改Students
表,为StudentID
添加自动增量属性,并为Age
设置一个默认值。
ALTER TABLE Students
MODIFY COLUMN StudentID INT AUTO_INCREMENT PRIMARY KEY,
MODIFY COLUMN Age INT DEFAULT 18 CHECK (Age >= 0);
注意:在修改已存在的表以添加自动增量属性时,需要确保该列没有设置过任何值,或者所有现有值都是唯一的(如果已经是主键的话)。此外,不同的数据库系统对自动增量的实现和支持可能有所不同。
在某些数据库系统中,如SQL Server,可以使用SELECT INTO
语句从现有的表中选择数据来创建新表,并同时填充数据。这种方法特别适用于需要基于现有数据创建新表结构或数据副本的场景。
示例:从Students
表中选择所有记录来创建一个名为StudentsBackup
的新表。
SELECT * INTO StudentsBackup
FROM Students;
注意:并非所有数据库系统都支持SELECT INTO
语句的这种用法。在某些系统中,可能需要先创建表结构,然后使用INSERT INTO ... SELECT
语句来填充数据。
本章详细介绍了如何在SQL中创建表以及向表中插入数据的方法。从理解表的结构开始,到掌握CREATE TABLE
、INSERT INTO
等基本SQL语句的使用,再到学习如何利用默认值、自动增量等特性来优化表的设计和数据插入过程。此外,还简要介绍了如何使用SELECT INTO
语句基于现有数据创建新表。掌握这些基础知识,将为后续深入学习SQL高级特性和数据库管理打下坚实的基础。