【SQL】16 SQL CREATE INDEX 語句、 撤銷索引、撤銷表以及撤銷資料庫、ALTER TABLE 語句、AUTO INCREMENT 欄位

HelloZEX發表於2018-07-26

SQL CREATE INDEX 語句

CREATE INDEX 語句用於在表中建立索引。

在不讀取整個表的情況下,索引使資料庫應用程式可以更快地查詢資料。


索引

您可以在表中建立索引,以便更加快速高效地查詢資料。

使用者無法看到索引,它們只能被用來加速搜尋/查詢。

註釋:更新一個包含索引的表需要比更新一個沒有索引的表花費更多的時間,這是由於索引本身也需要更新。因此,理想的做法是僅僅在常常被搜尋的列(以及表)上面建立索引。

SQL CREATE INDEX 語法

在表上建立一個簡單的索引。允許使用重複的值:

CREATE INDEX index_name
ON table_name (column_name)

SQL CREATE UNIQUE INDEX 語法

在表上建立一個唯一的索引。不允許使用重複的值:唯一的索引意味著兩個行不能擁有相同的索引值。Creates a unique index on a table. Duplicate values are not allowed:

CREATE UNIQUE INDEX index_name
ON table_name (column_name)

註釋:用於建立索引的語法在不同的資料庫中不一樣。因此,檢查您的資料庫中建立索引的語法。


CREATE INDEX 例項

下面的 SQL 語句在 "Persons" 表的 "LastName" 列上建立一個名為 "PIndex" 的索引:

CREATE INDEX PIndex
ON Persons (LastName)

如果您希望索引不止一個列,您可以在括號中列出這些列的名稱,用逗號隔開:

CREATE INDEX PIndex
ON Persons (LastName, FirstName)



SQL 撤銷索引、撤銷表以及撤銷資料庫

通過使用 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 語法:

ALTER TABLE table_name DROP INDEX index_name

DROP TABLE 語句

DROP TABLE 語句用於刪除表。

DROP TABLE table_name

DROP DATABASE 語句

DROP DATABASE 語句用於刪除資料庫。

DROP DATABASE database_name

TRUNCATE TABLE 語句

如果我們僅僅需要刪除表內的資料,但並不刪除表本身,那麼我們該如何做呢?

請使用 TRUNCATE TABLE 語句:

TRUNCATE TABLE table_name



SQL ALTER TABLE 語句

ALTER TABLE 語句

ALTER TABLE 語句用於在已有的表中新增、刪除或修改列。

SQL ALTER TABLE 語法

如需在表中新增列,請使用下面的語法:

ALTER TABLE table_name
ADD column_name datatype

如需刪除表中的列,請使用下面的語法(請注意,某些資料庫系統不允許這種在資料庫表中刪除列的方式):

ALTER TABLE table_name
DROP COLUMN column_name

要改變表中列的資料型別,請使用下面的語法:

SQL Server / MS Access:

ALTER TABLE table_name
ALTER COLUMN column_name datatype

My SQL / Oracle:

ALTER TABLE table_name
MODIFY COLUMN column_name datatype

Oracle 10G 之後版本:

ALTER TABLE table_name
MODIFY column_name datatype;

SQL ALTER TABLE 例項

請看 "Persons" 表:

P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

現在,我們想在 "Persons" 表中新增一個名為 "DateOfBirth" 的列。

我們使用下面的 SQL 語句:

ALTER TABLE Persons
ADD DateOfBirth date

請注意,新列 "DateOfBirth" 的型別是 date,可以存放日期。資料型別規定列中可以存放的資料的型別。如需瞭解 MS Access、MySQL 和 SQL Server 中可用的資料型別,請訪問我們完整的 資料型別參考手冊

現在,"Persons" 表將如下所示:

P_Id LastName FirstName Address City DateOfBirth
1 Hansen Ola Timoteivn 10 Sandnes  
2 Svendson Tove Borgvn 23 Sandnes  
3 Pettersen Kari Storgt 20 Stavanger  

改變資料型別例項

現在,我們想要改變 "Persons" 表中 "DateOfBirth" 列的資料型別。

我們使用下面的 SQL 語句:

ALTER TABLE Persons
ALTER COLUMN DateOfBirth year

請注意,現在 "DateOfBirth" 列的型別是 year,可以存放 2 位或 4 位格式的年份。

DROP COLUMN 例項

接下來,我們想要刪除 "Person" 表中的 "DateOfBirth" 列。

我們使用下面的 SQL 語句:

ALTER TABLE Persons
DROP COLUMN DateOfBirth

現在,"Persons" 表將如下所示:

P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20

Stavanger



SQL AUTO INCREMENT 欄位

Auto-increment 會在新記錄插入表中時生成一個唯一的數字。

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 語法:

ALTER TABLE Persons AUTO_INCREMENT=100

要在 "Persons" 表中插入新記錄,我們不必為 "ID" 列規定值(會自動新增一個唯一的值):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

上面的 SQL 語句會在 "Persons" 表中插入一條新記錄。"ID" 列會被賦予一個唯一的值。"FirstName" 列會被設定為 "Lars","LastName" 列會被設定為 "Monsen"。

用於 SQL Server 的語法

下面的 SQL 語句把 "Persons" 表中的 "ID" 列定義為 auto-increment 主鍵欄位:

CREATE TABLE Persons
(
ID int IDENTITY(1,1) PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

MS SQL Server 使用 IDENTITY 關鍵字來執行 auto-increment 任務。

在上面的例項中,IDENTITY 的開始值是 1,每條新記錄遞增 1。

提示:要規定 "ID" 列以 10 起始且遞增 5,請把 identity 改為 IDENTITY(10,5)。

要在 "Persons" 表中插入新記錄,我們不必為 "ID" 列規定值(會自動新增一個唯一的值):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

上面的 SQL 語句會在 "Persons" 表中插入一條新記錄。"ID" 列會被賦予一個唯一的值。"FirstName" 列會被設定為 "Lars","LastName" 列會被設定為 "Monsen"。

用於 Access 的語法

下面的 SQL 語句把 "Persons" 表中的 "ID" 列定義為 auto-increment 主鍵欄位:

CREATE TABLE Persons
(
ID Integer PRIMARY KEY AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

MS Access 使用 AUTOINCREMENT 關鍵字來執行 auto-increment 任務。

預設地,AUTOINCREMENT 的開始值是 1,每條新記錄遞增 1。

提示:要規定 "ID" 列以 10 起始且遞增 5,請把 autoincrement 改為 AUTOINCREMENT(10,5)。

要在 "Persons" 表中插入新記錄,我們不必為 "ID" 列規定值(會自動新增一個唯一的值):

INSERT INTO Persons (FirstName,LastName)
VALUES ('Lars','Monsen')

上面的 SQL 語句會在 "Persons" 表中插入一條新記錄。"ID" 列會被賦予一個唯一的值。"FirstName" 列會被設定為 "Lars","LastName" 列會被設定為 "Monsen"。

語法 for Oracle

在 Oracle 中,程式碼稍微複雜一點。

您必須通過 sequence 物件(該物件生成數字序列)建立 auto-increment 欄位。

請使用下面的 CREATE SEQUENCE 語法:

CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

上面的程式碼建立一個名為 seq_person 的 sequence 物件,它以 1 起始且以 1 遞增。該物件快取 10 個值以提高效能。cache 選項規定了為了提高訪問速度要儲存多少個序列值。

要在 "Persons" 表中插入新記錄,我們必須使用 nextval 函式(該函式從 seq_person 序列中取回下一個值):

INSERT INTO Persons (ID,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')

上面的 SQL 語句會在 "Persons" 表中插入一條新記錄。"ID" 列會被賦值為來自 seq_person 序列的下一個數字。"FirstName"列 會被設定為 "Lars","LastName" 列會被設定為 "Monsen"。



 

相關文章