標籤:sql
SQL 進階(5)SQL CREATE INDEX 語句 CREATE INDEX 語句用於在表中建立索引。
在不讀取整個表的情況下,索引使資料庫應用程式可以更快地尋找資料。
索引 您可以在表中建立索引,以便更加快速高效地查詢資料。
使用者無法看到索引,它們只能被用來加速搜尋/查詢。
注釋:更新一個包含索引的表需要比更新一個沒有索引的表更多的時間,這是由於索引本身也需要更新。因此,理想的做法是僅僅在常常被搜尋的列(以及表)上面建立索引。
SQL CREATE INDEX 文法 在表上建立一個簡單的索引。允許使用重複的值:
CREATE INDEX index_nameON table_name (column_name)
注釋:"column_name" 規定需要索引的列。
SQL CREATE UNIQUE INDEX 文法 在表上建立一個唯一的索引。唯一的索引意味著兩個行不能擁有相同的索引值。
CREATE UNIQUE INDEX index_nameON table_name (column_name)
CREATE INDEX 執行個體 本例會建立一個簡單的索引,名為 "PersonIndex",在 Person 表的 LastName 列:
CREATE INDEX PersonIndexON Person (LastName)
如果您希望以降序索引某個列中的值,您可以在列名稱之後添加保留字 DESC:
CREATE INDEX PersonIndexON Person (LastName DESC)
假如您希望索引不止一個列,您可以在括弧中列出這些列的名稱,用逗號隔開:
CREATE INDEX PersonIndexON Person (LastName, FirstName)
SQL 撤銷索引、表以及資料庫 通過使用 DROP 語句,可以輕鬆地刪除索引、表和資料庫。
SQL DROP INDEX 語句 我們可以使用 DROP INDEX 命令刪除表格中的索引。
用於 Microsoft SQLJet (以及 Microsoft Access) 的文法:
DROP INDEX index_name ON table_name
用於 MS SQL Server 的文法:
DROP INDEX table_name.index_name
用於 IBM DB2 和 Oracle 文法:
DROP INDEX index_name
用於 MySQL 的文法:
ALTER TABLE table_name DROP INDEX index_name
SQL DROP TABLE 語句 DROP TABLE 語句用於刪除表(表的結構、屬性以及索引也會被刪除):
DROP TABLE 表名稱
SQL DROP DATABASE 語句 DROP DATABASE 語句用於刪除資料庫:
DROP DATABASE 資料庫名稱
SQL TRUNCATE TABLE 語句 如果我們僅僅需要除去表內的資料,但並不刪除表本身,那麼我們該如何做呢?
請使用 TRUNCATE TABLE 命令(僅僅刪除表格中的資料):
TRUNCATE TABLE 表名稱
SQL ALTER TABLE 語句ALTER TABLE 語句 ALTER TABLE 語句用於在已有的表中添加、修改或刪除列。
SQL ALTER TABLE 文法 如需在表中添加列,請使用下列文法:
ALTER TABLE table_nameADD column_name datatype
要刪除表中的列,請使用下列文法:
ALTER TABLE table_name DROP COLUMN column_name
注釋:某些資料庫系統不允許這種在資料庫表中刪除列的方式 (DROP COLUMN column_name)。
要改變表中列的資料類型,請使用下列文法:
ALTER TABLE table_nameALTER COLUMN column_name datatype
原始的表 (用在例子中的):
Persons 表:
| Id |
LastName |
FirstName |
Address |
City |
| 1 |
Adams |
John |
Oxford Street |
London |
| 2 |
Bush |
George |
Fifth Avenue |
New York |
| 3 |
Carter |
Thomas |
Changan Street |
Beijing |
SQL ALTER TABLE 執行個體 現在,我們希望在表 "Persons" 中添加一個名為 "Birthday" 的新列。
我們使用下列 SQL 陳述式:
ALTER TABLE PersonsADD Birthday date
請注意,新列 "Birthday" 的類型是 date,可以存放日期。資料類型規定列中可以存放的資料的類型。
新的 "Persons" 表類似這樣:
| Id |
LastName |
FirstName |
Address |
City |
Birthday |
| 1 |
Adams |
John |
Oxford Street |
London |
|
| 2 |
Bush |
George |
Fifth Avenue |
New York |
|
| 3 |
Carter |
Thomas |
Changan Street |
Beijing |
|
改變資料類型執行個體 現在我們希望改變 "Persons" 表中 "Birthday" 列的資料類型。
我們使用下列 SQL 陳述式:
ALTER TABLE PersonsALTER COLUMN Birthday year
請注意,"Birthday" 列的資料類型是 year,可以存放 2 位或 4 位格式的年份。
DROP COLUMN 執行個體 接下來,我們刪除 "Person" 表中的 "Birthday" 列:
ALTER TABLE PersonDROP COLUMN Birthday
Persons 表會成為這樣:
| Id |
LastName |
FirstName |
Address |
City |
| 1 |
Adams |
John |
Oxford Street |
London |
| 2 |
Bush |
George |
Fifth Avenue |
New York |
| 3 |
Carter |
Thomas |
Changan Street |
Beijing |
SQL AUTO INCREMENT 欄位 Auto-increment 會在新紀錄插入表中時產生一個唯一的數字。
AUTO INCREMENT 欄位 我們通常希望在每次插入新紀錄時,自動地建立主鍵欄位的值。
我們可以在表中建立一個 auto-increment 欄位。
用於 MySQL 的文法 下列 SQL 陳述式把 "Persons" 表中的 "P_Id" 列定義為 auto-increment 主鍵:
CREATE TABLE Persons(P_Id int NOT NULL AUTO_INCREMENT,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255),PRIMARY KEY (P_Id))
MySQL 使用 AUTO_INCREMENT 關鍵字來執行 auto-increment 任務。
預設地,AUTO_INCREMENT 的開始值是 1,每條新紀錄遞增 1。
要讓 AUTO_INCREMENT 序列以其他的值起始,請使用下列 SQL 文法:
ALTER TABLE Persons AUTO_INCREMENT=100
要在 "Persons" 表中插入新紀錄,我們不必為 "P_Id" 列規定值(會自動添加一個唯一的值):
INSERT INTO Persons (FirstName,LastName)VALUES ('Bill','Gates') 上面的 SQL 陳述式會在 "Persons" 表中插入一條新紀錄。"P_Id" 會被賦予一個唯一的值。"FirstName" 會被設定為 "Bill","LastName" 列會被設定為 "Gates"。
用於 SQL Server 的文法 下列 SQL 陳述式把 "Persons" 表中的 "P_Id" 列定義為 auto-increment 主鍵:
CREATE TABLE Persons(P_Id int PRIMARY KEY IDENTITY,LastName varchar(255) NOT NULL,FirstName varchar(255),Address varchar(255),City varchar(255))
MS SQL 使用 IDENTITY 關鍵字來執行 auto-increment 任務。
預設地,IDENTITY 的開始值是 1,每條新紀錄遞增 1。
要規定 "P_Id" 列以 20 起始且遞增 10,請把 identity 改為 IDENTITY(20,10)
要在 "Persons" 表中插入新紀錄,我們不必為 "P_Id" 列規定值(會自動添加一個唯一的值):
INSERT INTO Persons (FirstName,LastName)VALUES ('Bill','Gates') 上面的 SQL 陳述式會在 "Persons" 表中插入一條新紀錄。"P_Id" 會被賦予一個唯一的值。"FirstName" 會被設定為 "Bill","LastName" 列會被設定為 "Gates"。
用於 Access 的文法 下列 SQL 陳述式把 "Persons" 表中的 "P_Id" 列定義為 auto-increment 主鍵:
CREATE TABLE Persons(P_Id int 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。
要規定 "P_Id" 列以 20 起始且遞增 10,請把 autoincrement 改為 AUTOINCREMENT(20,10)
要在 "Persons" 表中插入新紀錄,我們不必為 "P_Id" 列規定值(會自動添加一個唯一的值):
INSERT INTO Persons (FirstName,LastName)VALUES ('Bill','Gates') 上面的 SQL 陳述式會在 "Persons" 表中插入一條新紀錄。"P_Id" 會被賦予一個唯一的值。"FirstName" 會被設定為 "Bill","LastName" 列會被設定為 "Gates"。
用於 Oracle 的文法 在 Oracle 中,代碼稍微複雜一點。
您必須通過 sequence 對建立 auto-increment 欄位(該對象產生數字序列)。
請使用下面的 CREATE SEQUENCE 文法:
CREATE SEQUENCE seq_personMINVALUE 1START WITH 1INCREMENT BY 1CACHE 10
上面的代碼建立名為 seq_person 的序列對象,它以 1 起始且以 1 遞增。該對象緩衝 10 個值以提高效能。CACHE 選項規定了為了提高訪問速度要儲存多少個序列值。
要在 "Persons" 表中插入新紀錄,我們必須使用 nextval 函數(該函數從 seq_person 序列中取回下一個值):
INSERT INTO Persons (P_Id,FirstName,LastName)VALUES (seq_person.nextval,'Lars','Monsen')
上面的 SQL 陳述式會在 "Persons" 表中插入一條新紀錄。"P_Id" 的賦值是來自 seq_person 序列的下一個數字。"FirstName" 會被設定為 "Bill","LastName" 列會被設定為 "Gates"。
SQL 進階(5)