SQL进阶之约束、索引
1. 创建实验资源
开始实验之前,您需要先创建实验相关资源。
- 在实验室页面,单击创建资源。
- (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、用户信息等)。
说明:资源创建过程需要3~5分钟。
2. 连接数据库并查看数据库
本步骤指导您如何连接ECS实例上的MySQL数据库,并查看实验所使用的数据库。
- 执行如下命令,登录数据库。
mysql -uroot -p
- 输入root用户登录密码,密码为Test123!。
- 返回结果如下,表示登录成功。
- 执行如下SQL语句,查看所有的数据库。
show databases;
返回结果如下,您可查看到MySQL数据库中有五个数据库,其中Test数据库是实验室提前创建好的,后续实验所有操作都在Test数据库中执行。
- 执行如下SQL语句,选择数据库Test。
use Test;
3. 什么是SQL约束?
SQL约束用于规定表中的数据规则。如果存在违反约束的数据行为,行为会被约束终止。约束可以在创建表时规定(通过CREATE TABLE语句),或者在表创建之后规定(通过ALTER TABLE语句)。
说明:本章节主要讲解什么是SQL约束和有哪些约束,不需要您进行实践操作,在下面的章节,我们会详细讲解每一种约束,并带您实践体验SQL的各种约束。
- SQL的CREATE TABLE+CONSTRAINT语法。
CREATE TABLE table_name ( column_name1 data_type(size) constraint_name, column_name2 data_type(size) constraint_name, column_name3 data_type(size) constraint_name, .... );
- 在SQL中,我们有如下约束:
- NOT NULL:指示某列不能存储NULL值。
- UNIQUE:保证某列的每行必须有唯一的值。
- PRIMARY KEY:NOT NULL和UNIQUE的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
- FOREIGN KEY:保证一个表中的数据匹配另一个表中的值的参照完整性。
- CHECK:保证列中的值符合指定的条件。
- DEFAULT:规定没有给列赋值时的默认值。
4. NOT NULL约束
在默认的情况下,表的列接受NULL值。NOT NULL约束强制列不接受NULL值。NOT NULL约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
- NOT NULL约束的示例:
执行如下SQL语句,在创建表Persons时强制ID列、LastName列和FirstName列不接受NULL值。
CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255) NOT NULL, Age int );
- 添加NOT NULL约束的示例。
执行如下SQL语句,在一个已创建的Persons表的Age字段中添加NOT NULL约束。
ALTER TABLE Persons MODIFY Age int NOT NULL;
- 删除NOT NULL约束的示例。
执行如下SQL语句,在一个已创建的Persons表的Age字段中删除NOT NULL约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
ALTER TABLE Persons MODIFY Age int NULL; DROP TABLE Persons;
5. UNIQUE约束
UNIQUE约束唯一标识数据库表中的每条记录。UNIQUE和PRIMARY KEY约束均为列或列集合提供了唯一性的保证。PRIMARY KEY约束拥有自动定义的UNIQUE约束。请注意,每个表可以有多个UNIQUE约束,但是每个表只能有一个PRIMARY KEY约束。
- UNIQUE和PRIMARY KEY的区别:
- UNIQUE(唯一约束)和PRIMARY KEY(主键)非常相似,但是UNIQUE允许字段中出现一次NULL值,而PRIMARY KEY不允许出现 NULL 值,因为可以认为:
PRIMARY KEY = UNIQUE + NOT NULL
- 一张表可以包含多个UNIQUE字段,但是只能有一个主键。
- CREATE TABLE时的UNIQUE约束示例:
- 在Mysql环境中:
执行如下SQL语句,创建Persons表时在P_Id列上创建UNIQUE约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), UNIQUE (P_Id) ); DROP TABLE Persons;
- 在SQL Server/Oracle/MS Access环境中:
说明:本实验资源环境安装Mysql,在SQL Server/Oracle/MS Access环境中的UNIQUE约束示例只需阅读学习。
CREATE TABLE Persons ( P_Id int NOT NULL UNIQUE, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) );
- 如需命名UNIQUE约束,并定义多个列的UNIQUE约束,请使用下面的SQL语法。
执行如下SQL语句,创建表Persons时在P_Id列和LastName列上创建UNIQUE约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName) ); DROP TABLE Persons;
- ALTER TABLE时的UNIQUE约束的示例:
- 当表已被创建时,在Persons表的P_Id列创建UNIQUE约束。
执行如下SQL语句,先创建Persons表,然后在Persons表的P_Id列创建UNIQUE约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) ); ALTER TABLE Persons ADD UNIQUE (P_Id); DROP TABLE Persons;
- 当表已被创建时,如需命名UNIQUE约束,并定义多个列的UNIQUE约束,请使用下面的SQL语法。
执行如下SQL语句,先创建Persons表,然后在Persons表的P_Id列和LastName列创建UNIQUE约束。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) ); ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName);
- 撤销UNIQUE约束的示例:
- 在Mysql环境中:
执行如下SQL语句,撤销UNIQUE约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
ALTER TABLE Persons DROP INDEX uc_PersonID; DROP TABLE Persons;
- 在SQL Server/Oracle/MS Access环境中:
说明:本实验资源环境安装Mysql,在SQL Server/Oracle/MS Access环境中的撤销UNIQUE约束示例只需阅读学习。
ALTER TABLE Persons DROP CONSTRAINT uc_PersonID;
6. PRIMARY KEY约束
PRIMARY KEY约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含NULL值。每个表都应该有一个主键,并且每个表只能有一个主键。
- CREATE TABLE时的PRIMARY KEY约束的示例:
- 在Mysql环境中:
执行如下SQL语句,在Persons表创建时在P_Id列上创建PRIMARY KEY约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (P_Id) ); DROP TABLE Persons;
- 在SQL Server/Oracle/MS Access环境中:
本实验资源环境安装Mysql,在SQL Server/Oracle/MS Access环境中的PRIMARY KEY约束示例只需阅读学习。
CREATE TABLE Persons ( P_Id int NOT NULL PRIMARY KEY, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) );
- 如需命名PRIMARY KEY约束,并定义多个列的PRIMARY KEY约束,请使用下面的SQL语法。
执行如下SQL语句,创建表Persons时在P_Id列和LastName列上创建PRIMARY KEY约束。
说明:在下方的示例中,只有一个主键PRIMARY KEY(pk_PersonID)。然而,pk_PersonID的值是由两个列(P_Id和LastName)组成的。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName) ); DROP TABLE Persons;
- ALTER TABLE时的SQL PRIMARY KEY约束的示例:
- 当表已被创建时,在表Persons的LastName列创建PRIMARY KEY约束。
执行如下SQL语句,先创建Persons表,然后在表Persons的P_Id列创建PRIMARY KEY约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) ); ALTER TABLE Persons ADD PRIMARY KEY (P_Id); DROP TABLE Persons;
- 当表已被创建时,如需命名PRIMARY KEY约束,并定义多个列的PRIMARY KEY约束,请使用下面的SQL语法。
执行如下SQL语句,先创建Persons表,然后在表Persons的P_Id列和LastName列创建PRIMARY KEY约束。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) ); ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName);
- 撤销PRIMARY KEY约束的示例:
- 在Mysql环境中:
执行如下SQL语句,撤销PRIMARY KEY约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
ALTER TABLE Persons DROP PRIMARY KEY; DROP TABLE Persons;
- 在SQL Server/Oracle/MS Access环境中:
说明:本实验资源环境安装Mysql,在SQL Server/Oracle/MS Access环境中的撤销PRIMARY KEY约束示例只需阅读学习。
ALTER TABLE Persons DROP CONSTRAINT pk_PersonID;
7. FOREIGN KEY约束
一个表中的FOREIGN KEY指向另一个表中的UNIQUE KEY(唯一约束的键)。
- FOREIGN KEY约束的原理:
假如我们有如下图两张表,Orders表中的P_Id列指向Persons表中的P_Id列。Persons表中的P_Id列是Persons表中的PRIMARY KEY。Orders表中的P_Id列是Orders表中的FOREIGN KEY。FOREIGN KEY约束用于预防破坏表之间连接的行为。FOREIGN KEY约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
Persons表
Orders表
- CREATE TABLE时的FOREIGN KEY约束的示例:
- 在Mysql环境中:
执行如下SQL语句,先创建Persons表,然后在表Persons的P_Id列和LastName列创建PRIMARY KEY约束。然后创建Orders表时在P_Id列上创建FOREIGN KEY约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (P_Id) ); CREATE TABLE Orders ( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int, PRIMARY KEY (O_Id), FOREIGN KEY (P_Id) REFERENCES Persons(P_Id) ); DROP TABLE Orders;
- 在SQL Server/Oracle/MS Access环境中:
说明:本实验资源环境安装Mysql,在SQL Server/Oracle/MS Access环境中的FOREIGN KEY约束示例只需阅读学习。
CREATE TABLE Orders ( O_Id int NOT NULL PRIMARY KEY, OrderNo int NOT NULL, P_Id int FOREIGN KEY REFERENCES Persons(P_Id) );
- 如需命名FOREIGN KEY约束,并定义多个列的FOREIGN KEY约束,请使用下面的SQL语法。
执行如下SQL语句,创建表Orders时在P_Id列上创建FOREIGN KEY约束。
CREATE TABLE Orders ( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int, PRIMARY KEY (O_Id), CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id) REFERENCES Persons(P_Id) ); DROP TABLE Orders;
- ALTER TABLE 时的FOREIGN KEY约束的示例:
- 当Orders表已被创建时,如需在P_Id列创建FOREIGN KEY约束,请使用下面的 SQL。
执行如下SQL语句,先创建Orders表,然后在表Orders的P_Id列创建FOREIGN KEY约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
CREATE TABLE Orders ( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int, PRIMARY KEY (O_Id) ); ALTER TABLE Orders ADD FOREIGN KEY (P_Id) REFERENCES Persons(P_Id); DROP TABLE Orders;
- 如需命名FOREIGN KEY约束,并定义多个列的FOREIGN KEY约束,请使用下面的SQL语法。
执行如下SQL语句,先创建Orders表,然后在表Orders的P_Id列创建FOREIGN KEY约束。
CREATE TABLE Orders ( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int, PRIMARY KEY (O_Id) ); ALTER TABLE Orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id) REFERENCES Persons(P_Id);
- 撤销FOREIGN KEY约束的示例:
- 在Mysql环境中:
执行如下SQL语句,撤销FOREIGN KEY约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders; DROP TABLE Orders; DROP TABLE Persons;
- 在SQL Server/Oracle/MS Access环境中:
说明:本实验资源环境安装Mysql,在SQL Server/Oracle/MS Access环境中的撤销FOREIGN KEY约束示例只需阅读学习。
ALTER TABLE Orders DROP CONSTRAINT fk_PerOrders;
8. CHECK约束
CHECK约束用于限制列中的值的范围。如果对单个列定义CHECK约束,那么该列只允许特定的值。如果对一个表定义CHECK约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。
- CREATE TABLE时的CHECK约束:
- 在Mysql环境中:
执行如下SQL语句,在Persons表创建时在P_Id列上创建CHECK约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CHECK (P_Id>0) ); DROP TABLE Persons;
- 在SQL Server/Oracle/MS Access环境中:
说明:本实验资源环境安装Mysql,在SQL Server/Oracle/MS Access环境中的CHECK约束示例只需阅读学习。
CREATE TABLE Persons ( P_Id int NOT NULL CHECK (P_Id>0), LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) );
- 如需命名CHECK约束,并定义多个列的CHECK约束,请使用下面的SQL语法。
执行如下SQL语句,创建表Persons时在P_Id列和City列上创建CHECK约束。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes') ); DROP TABLE Persons;
- ALTER TABLE时的SQL CHECK约束:
- 当表已被创建时,在表Persons的在P_Id列创建CHECK约束,请使用下面的SQL。
执行如下SQL语句,先创建Persons表,然后在表Persons的P_Id列创建CHECK约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) ); ALTER TABLE Persons ADD CHECK (P_Id>0); DROP TABLE Persons;
- 如需命名CHECK约束,并定义多个列的CHECK约束,请使用下面的SQL语法。
执行如下SQL语句,先创建Persons表,然后在表Persons的P_Id列和City列创建CHECK约束。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) ); ALTER TABLE Persons ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes');
- 撤销CHECK约束:
- 在Mysql环境中:
执行如下SQL语句,撤销CHECK约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
ALTER TABLE Persons DROP CHECK chk_Person; DROP TABLE Persons;
- 在SQL Server/Oracle/MS Access环境中:
说明:本实验资源环境安装Mysql,在SQL Server/Oracle/MS Access环境中的撤销CHECK约束示例只需阅读学习。
ALTER TABLE Persons DROP CONSTRAINT chk_Person;
9. DEFAULT约束
DEFAULT约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。
- CREATE TABLE时的DEFAULT约束的示例:
- 执行如下SQL语句,在Persons表创建时在City列上创建DEFAULT约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) DEFAULT 'Sandnes' ); DROP TABLE Persons;
- 通过使用类似NOW()这样的函数,DEFAULT约束也可以用于插入系统值。
执行如下SQL语句,在Orders表创建时在OrderDate列上创建DEFAULT约束并使用GETDATE()函数插入系统值。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
CREATE TABLE Orders ( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int, OrderDate TIMESTAMP DEFAULT NOW() ); DROP TABLE Orders;
- ALTER TABLE时的DEFAULT约束的示例:
- 在Mysql环境中:
执行如下SQL语句,先创建Persons表,然后在表Persons的City列创建DEFAULT约束。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) ); ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES';
- 在SQL Server/MS Access环境中:
说明:本实验资源环境安装Mysql,在SQL Server/MS Access环境中的ALTER TABLE时的DEFAULT约束示例只需阅读学习。
ALTER TABLE Persons ALTER COLUMN City SET DEFAULT 'SANDNES';
- 在Oracle环境中:
说明:本实验资源环境安装Mysql,在SQL Server/MS Access环境中的ALTER TABLE时的DEFAULT约束示例只需阅读学习。
ALTER TABLE Persons MODIFY City DEFAULT 'SANDNES';
- 撤销DEFAULT约束的示例。
- 在Mysql环境中:
执行如下SQL语句,撤销DEFAULT约束。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
ALTER TABLE Persons ALTER City DROP DEFAULT; DROP TABLE Persons;
- 在SQL Server/Oracle/MS Access环境中:
说明:本实验资源环境安装Mysql,在SQL Server/MS Access环境中的撤销DEFAULT约束示例只需阅读学习。
ALTER TABLE Persons ALTER COLUMN City DROP DEFAULT;
10. CREATE INDEX语句
CREATE INDEX 语句用于在表中创建索引。在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
您可以在表中创建索引,以便更加快速高效地查询数据。用户无法看到索引,它们只能被用来加速搜索/查询。
说明:
- 更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅在常被搜索的列(以及表)上面创建索引。
- 用于创建索引的语法在不同的数据库中不一样。因此,检查您的数据库中创建索引的语法。
- CREATE INDEX的语法:
在表上创建一个简单的索引,允许使用重复的值。
CREATE INDEX index_name ON table_name (column_name);
- CREATE UNIQUE INDEX的语法:
在表上创建一个唯一的索引,不允许使用重复的值。唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name ON table_name (column_name);
- CREATE INDEX的示例:
执行如下语句,先创建Persons表,然后在Persons表的LastName列上创建一个名为PIndex的索引。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) ); CREATE INDEX PIndex ON Persons (LastName); DROP TABLE Persons;
- 如果您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开。
执行如下语句,先创建Persons表,然后在Persons表的LastName列上创建一个名为PIndex的索引。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) ); CREATE INDEX PIndex ON Persons (LastName, FirstName); DROP TABLE Persons;
11. 撤销索引、撤销表以及撤销数据库
通过使用DROP语句,可以轻松地删除索引、表和数据库。
说明:本章节主要讲解撤销索引、撤销表以及撤销数据库的语法,不需要您进行实践操作。
- DROP INDEX语句:
DROP INDEX语句用于删除表中的索引。
- 用于MS Access的DROP INDEX语法。
DROP INDEX index_name ON table_name;
- 用于MS SQL Server的DROP INDEX语法。
DROP INDEX table_name.index_name;
- 用于DB2/Oracle的DROP INDEX语法。
DROP INDEX index_name;
- 用于MySQL的DROP INDEX语法。
DROP INDEX index_name;
- DROP TABLE语句:
DROP TABLE语句用于删除表。
DROP DATABASE database_name;
- DROP DATABASE语句:
DROP DATABASE语句用于删除数据库。
DROP DATABASE database_name;
- TRUNCATE TABLE 语句:
TRUNCATE TABLE语句用于仅需要删除表内的数据,但并不删除表本身。
TRUNCATE TABLE table_name;
12. ALTER TABLE语句
- ALTER TABLE语句用于在已有的表中添加、删除或修改列。
- ALTER TABLE语法:
- 在表中添加列。
ALTER TABLE table_name ADD column_name datatype;
- 删除表中的列。
注意:某些数据库系统不允许这种在数据库表中删除列的方式。
ALTER TABLE table_name DROP COLUMN column_name;
- 改变表中列的数据类型。
- 在MySQL/Oracle环境中:
ALTER TABLE table_name MODIFY COLUMN column_name datatype;
- SQL Server/MS Access环境中:
ALTER TABLE table_name ALTER COLUMN column_name datatype;
- ALTER TABLE示例:
- ALTER TABLE添加列的示例。
执行如下SQL语句,先创建Persons表,插入三条数据,然后在Persons表添加一个名为 DateOfBirth的列。DateOfBirth列的类型是date,可以存放日期。我们现在查看Persons表,可以看到新增的DateOfBirth列。
CREATE TABLE Persons ( PersonID int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) ); INSERT INTO Persons VALUES ('1', 'Hansen', 'Ola','Timoteivn 10','Sandnes'), ('2', 'Svendson', 'Tove','Borgvn 23','Sandnes'), ('3', 'Pettersen', 'Kari','Storgt 20','Stavanger'); ALTER TABLE Persons ADD DateOfBirth date; SELECT * FROM Persons;
- ALTER TABLE改变数据类型的示例。
执行如下SQL语句,改变Persons表中DateOfBirth列的数据类型为year。现在DateOfBirth列的类型是year,可以存放2位或4位格式的年份。
ALTER TABLE Persons MODIFY COLUMN DateOfBirth year;
- ALTER TABLE删除列的示例。
执行如下SQL语句,删除Person表中的DateOfBirth列,然后查看Person表,可以看到DateOfBirth列已被删除。在体验完成之后,请您执行删表语句,再进行下一步的体验学习。
ALTER TABLE Persons DROP COLUMN DateOfBirth; SELECT * FROM Persons; DROP TABLE Persons;
13. AUTO INCREMENT字段
Auto-increment会在新记录插入表中时生成一个唯一的数字。
- 在MySQL中的语法:
- 执行如下SQL语句,创建Persons表并把ID列定义为Auto-increment主键字段。
CREATE TABLE Persons ( ID int NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (ID) );
- MySQL使用AUTO_INCREMENT关键字来执行Auto-increment任务。默认地,AUTO_INCREMENT的开始值是1,每条新记录递增1。要让AUTO_INCREMENT序列以其他的值起始,请使用下面的SQL语法。
执行如下SQL语句,让Persons表的AUTO_INCREMENT序列以100为起始值。
ALTER TABLE Persons AUTO_INCREMENT=100;
- 要在Persons表中插入新记录,我们不必为ID列规定值(会自动添加一个唯一的值)。
执行如下SQL语句,在Persons表中插入一条记录。然后查看Person表。
INSERT INTO Persons (FirstName,LastName) VALUES ('Lars','Monsen'); SELECT * FROM Persons;
实验链接:https://developer.aliyun.com/adc/scenario/6499111331e849d69b4f10711ba77210