上一章中,我们学习了关系模型的基本概念,了解了关系数据库中数据存储的形式。从本章开始,我们就正式进入SQL语法的教程,开始创建属于我们的二维表~

SQL是用来操作数据库的语言,所以和编程语言类似,由各种语句组成,只不过SQL只是用来操作数据库的而已。特定数据库的SQL语法会略有不同,我们则先学习通用的SQL语法。在之后的教程中,SQL语句中的关键词我会大写以示突出,每个SQL语句都会以封号(;)作为结尾,已下便是一个查询语句的例子:

SELECT * FROM Students;

这个语句的功能是查询Students表中所有的数据,大家可以尝试在云端SQL编辑器Tryit Editor上运行SQL语句,边看教程,边动手实践。在本章中,我们就来学习如何用SQL创建表格,对数据进行基本操作(插入,删除,修改),以及创建约束。

表格 (创建, 修改, 删除)

创建表

CREATE TABLE语句是用来创建一张新表格的,基本语法如下:

CREATE TABLE table_name (
    column1 datatype1,
    column2 datatype2,
    column3 datatype3,
   ....
);

其中 table_name 就是新表格的名字,而column1, column2, … 是字段的名字, datatype1, datatype2, datatype3, …指定了字段的数据类型。来看一个Students表的例子:

CREATE TABLE Students (
    StudentID int, 
    Name varchar(255),
    City varchar(255),
    PRIMARY KEY(StudentID)
);

此语句创建一张叫做Students的表格,用来存学生的信息,其中包括了StudentID字段,数据类型是integer(整数),还有其他字段比如Name, City,它们的数据类型都是长度为255的varchar(可变字符串),最后的PRIMARY KEY(StudentID)代表将StudentID设为主键,主键不能为空,而且数值必须是唯一的。

特定数据库支持的数据类型不同,以下是常用的SQL数据类型:

数据类型描述
VARCHAR(n) 或 CHARACTER VARYING(n)可变长度的字符/字符串,最大长度为n
BINARY(n)固定长度为n的二进制串
BOOLEAN存储TRUE或FALSE值
INTEGER(p)整数值(没有小数点),精度为p
INTEGER整数值(没有小数点),精度为10
DECIMAL(p, s)精确数值,精度为p,小数点后位数为s。例如:DICIMAL(5,2)小数点前有3位数,小数点后有2位数
FLOAT(p)近似数值,尾数精度为p
FLOAT近似数值,尾数精度为16
DATE存储年、月、日的值
TIMESTAMP存储年、月、日、小时、分、秒的值

修改表

如果我们想添加、删除、或者修改表中的特定字段,可以使用ALTER TABLE语句。添加字段语句如下:

ALTER TABLE table_name 
ADD column_name datatype;

如果我们想给Students表添加一个类型为int的Age字段,可以使用以下语句:

ALTER TABLE Students
ADD age int;

如果想要删除字段,使用ALTER TABLE table_name DROP COLUMN column_name;语句即可,以下语句就将Students中的Age字段删除了:

ALTER TABLE Students 
DROP COLUMN Age;

修改字段设定的语句是:ALTER TABLE table_name MODIFY COLUMN column_name data_type; 以下语句将Students中Name的数据类型改为varchar(200):

ALTER TABLE Students 
MODIFY COLUMN Name varchar(200);

删除表

如果要删除表格,使用DROP TABLE语句即可:DROP TABLE table_name;

DROP TABLE Students;

此语句就删除了Students表。

操作记录 (增加, 删除, 修改, 替换)

关系数据库的基本操作是增删差改,既CRUD:Create, Retrieve, Update, Delete。其中查询较为复杂,我们会在之后的章节进行学习,在这一章,我们先来学习增、删、改,其对应的SQL语句分别是:

  • INSERT: 插入新纪录
  • UPDATE: 更新已有记录
  • DELETE:删除已有记录

如果想要查询表的内容,可以使用 SELECT * FROM table_name 查看表中的所有数据。

插入记录

INSERT INTO 语句用于在表中插入新记录,插入的方法有两张,第一种语法如下:

INSERT INTO table_name(column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

第二种方法不需要指定column,只需要插入数据,但是要保证数据的顺序和数量和字段是对应的:

INSERT INTO table_name VALUES (value1, value2, value3, ...);

如果我们要插入一个新学生的记录:ID是1,名叫Enoch,地址是Los Angeles,那么我们可以使用以下语句:

INSERT INTO Students(StudentID, Name, City) VALUES (1, 'Enoch', 'Los Angeles');

修改记录

UPDATE 语句可以用来修改表中的记录,语法如下:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

其中WHERE限定了你要更新的记录,关于condtion的内容会在之后学习查询时详细探讨,现在简单理解就好。如果不使用WHERE子句,那么所有的记录都会被更新。以下语句将StudentID为1的学生改名为‘Daniel’:

UPDATE Students
SET Name = 'Daniel' 
WHERE StudentID = 1;

删除记录

如果要删除已有的记录,我们可以使用DELETE语句:

DELETE FROM table WHERE condition;

其中WHERE限定了我们要删除的记录的条件,如果没有WHERE子句,所有的记录都会被删除。以下的语句将所有住在’Los Angeles’的学生记录删除:

DELETE FROM Students WHERE City = 'Los Angeles';

替换

替换的意思就是:如果我们希望插入一条新纪录,但是如果此记录已经存在,就先删除原记录,再插入新纪录。此时,我们就能使用REPLACE语句,这样就不需要通过查询,再决定是否先删除再插入了:

REPLACE INTO Students(StudentID, name, city) VALUES (1, 'Enoch', 'New York City');

此语句的作用就是查询id为1的学生记录是否存在,如果不存在,就创建一个新的记录,否则,已有记录会被删除,然后新纪录再被插入。

约束 (Constraints)

SQL约束用于规定表中的数据规则。如果存在违反约束的数据行为,行为会被约束终止。约束可以在创建表时规定(通过CREATE TABLE语句),或者在创建表之后规定(通过ALTER TABLE语句)。

创建约束 CREATE TABLE

创建表时规定约束的语句如下:

CREATE TABLE table_name (
    column1 data_type1(size) constraint1,
    column2 data_type2(size) constraint2,
    column3 data_type3(size) constraint3,
    ...
);

其中 column 为字段名字,data_type 为数据类型,constraint 为约束类型,在SQL中,我们有以下约束:

  • NOT NULL: 字段不能存储空值。
  • UNIQUE: 保证字段的每行都是唯一的值。
  • PRIMARY KEY: 主键,NOT NULL和UNIQUE的结合,确保某列(或多列)有唯一标识,用于找到特定记录。
  • FOREIGN KEY:保证表中的数据匹配到(指向)另一个表中的主键。
  • CHECK: 保证字段的值符合指定条件。
  • DEFAULT: 规定没赋值时的默认值。

我们来看一个例子:

CREATE TABLE Employees (
  EmployeeID int Primary Key,
  Name varchar(255) NOT NULL,
  Apartment varchar(255) DEFAULT 'A',
  Age int CHECK (Age > 18)
);

此语句创建一个Employees表,其中EmployeeID是主键,意味着EmployeeID不能为空,而且必须是唯一的;Name是长度为255的可变字符串,不能为空;Apartment的默认值是‘A’,意味着如果一个员工没有被分配到特定的Apartment,就会默认被分配到A部门;Age字段需要检验是否大于18,如果不大于18,那么就无法创建。

创建约束 ALTER TABLE

另一种添加约束的方法便是使用ALTER TABLE语句:

ALTER TABLE Students 
MODIFY Age int NOT NULL;

此语句设定了一个新的约束:Students的Age字段不能为空。

以下语句添加了一个外键约束:

ALTER TABLE Students
ADD CONSTRAINT fk_class_id
FOREIGN KEY (classID)
REFERENCES Classes(id);

上面的语句将Students中的classID字段设置为外键,让这个外键指向Classes表的id主键,fk_class_id是这个约束的名字。

如果要删除Students中classID的外键约束,我们可以使用以下的语句:

ALTER TABLE Students
DROP FOREIGN KEY fk_class_id;

以上就是用SQL创建表格,操作数据和添加约束的基本内容了,从下一章开始我们就开始学习最常用的SQL语句:查询语句。