SQL CREATE INDEX 语句
SQL CREATE INDEX
语句用于在表中创建索引。
索引用于比其他方式更快地从数据库中检索数据。用户无法看到索引,它们只是用于加速搜索/查询。
注意: 使用索引更新表比不使用索引更新表需要更多的时间(因为索引也需要更新)。因此,只在经常进行搜索的列上创建索引。
CREATE INDEX 语法
在表上创建索引。允许重复值:
CREATE INDEX index_name
ON table_name (column1, column2, ...);
创建唯一索引的语法如下:
CREATE UNIQUE INDEX index_name
ON table_name (column1, column2, ...);
注意: 创建索引的语法在不同的数据库中有所不同。因此,请检查您的数据库中创建索引的语法。
CREATE INDEX 示例
下面的 SQL 语句在 "Persons" 表的 "LastName" 列上创建一个名为 "idx_lastname" 的索引:
CREATE INDEX idx_lastname
ON Persons (LastName);
如果要在多列的组合上创建索引,可以在括号内列出列名,用逗号分隔:
CREATE INDEX idx_pname
ON Persons (LastName, FirstName);
DROP INDEX 语句
DROP INDEX
语句用于删除表中的索引。
MS Access:
DROP INDEX index_name ON table_name;
SQL Server:
DROP INDEX table_name.index_name;
DB2/Oracle:
DROP INDEX index_name;
MySQL:
ALTER TABLE table_name
DROP INDEX index_name;
通过这些 SQL 语句,您可以在数据库中创建索引,提高数据检索的效率。如果索引不再需要,也可以使用 DROP INDEX
语句将其删除。
SQL AUTO INCREMENT字段
AUTO INCREMENT
允许在将新记录插入表时自动生成唯一编号。通常,这是我们希望每次插入新记录时自动创建的主键字段。
MySQL 语法
以下 SQL 语句在 "Persons" 表中定义了 "Personid" 列为自动递增主键字段:
CREATE TABLE Persons (
Personid int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (Personid)
);
MySQL 使用 AUTO_INCREMENT
关键字来执行自动递增功能。默认情况下,AUTO_INCREMENT
的起始值为 1,每插入一条新记录它就会递增 1。
要让 AUTO_INCREMENT
序列从另一个值开始,请使用以下 SQL 语句:
ALTER TABLE Persons AUTO_INCREMENT=100;
要将新记录插入 "Persons" 表中,我们将无需为 "Personid" 列指定值(将自动添加唯一值):
INSERT INTO Persons (FirstName, LastName)
VALUES ('Lars', 'Monsen');
上面的 SQL 语句将在 "Persons" 表中插入一条新记录。 "Personid" 列将被分配一个唯一值。 "FirstName" 列将设置为 "Lars",而 "LastName" 列将设置为 "Monsen"。
SQL Server 语法
以下 SQL 语句在 "Persons" 表中定义了 "Personid" 列为自动递增主键字段:
CREATE TABLE Persons (
Personid int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
MS SQL Server 使用 IDENTITY
关键字执行自动递增功能。在上面的示例中,IDENTITY
的起始值为 1,每插入一条新记录它就会递增 1。
提示: 要指定 "Personid" 列应从值 10 开始递增 5,请将其更改为 IDENTITY(10,5)
。
要将新记录插入 "Persons" 表中,我们将无需为 "Personid" 列指定值(将自动添加唯一值):
INSERT INTO Persons (FirstName, LastName)
VALUES ('Lars', 'Monsen');
上面的 SQL 语句将在 "Persons" 表中插入一条新记录。 "Personid" 列将被分配一个唯一值。 "FirstName" 列将设置为 "Lars",而 "LastName" 列将设置为 "Monsen"。
Access 语法
以下 SQL 语句在 "Persons" 表中定义了 "Personid" 列为自动递增主键字段:
CREATE TABLE Persons (
Personid AUTOINCREMENT PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
MS Access 使用 AUTOINCREMENT
关键字执行自动递增功能。默认情况下,AUTOINCREMENT
的起始值为 1,每插入一条新记录它就会递增 1。
提示: 要指定 "Personid" 列应从值 10 开始递增 5,请将 AUTOINCREMENT
更改为 AUTOINCREMENT(10,5)
。
要将新记录插入 "Persons" 表中,我们将无需为 "Personid" 列指定值(将自动添加唯一值):
INSERT INTO Persons (FirstName, LastName)
VALUES ('Lars', 'Monsen');
上面的 SQL 语句将在 "Persons" 表中插入一条新记录。 "Personid" 列将被分配一个唯一值。 "FirstName" 列将设置为 "Lars",而 "LastName" 列将设置为 "Monsen"。
Oracle 语法
在 Oracle 中,代码会复杂一些。您将不得不使用序列对象,此对象生成一个数字序列,来创建一个自动递增字段。
使用以下 CREATE SEQUENCE
语法:
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10;
上面的代码创建了一个名为 seq_person
的序列对象,从 1 开始递增 1。 它还将缓存最多 10 个值以提高性能。 缓存选项指定了将存储在内存中以加快访问速度的多少个序列值。
要将新记录插入 "Persons" 表中,我们必须使用 nextval
函数,此函数从 seq_person
序列检索下一个值:
INSERT INTO Persons (Personid, FirstName, LastName)
VALUES (seq_person.nextval, 'Lars', 'Monsen');
上面的 SQL 语句将在 "Persons" 表中插入一条新记录。 "Personid" 列将被分配 seq_person
序列的下一个数字。 "FirstName" 列