CREATE TABLE warehouse (
w_id SMALLINT,
w_name VARCHAR(10),
w_street_1 VARCHAR(20),
w_street_2 VARCHAR(20),
w_city VARCHAR(20),
w_state CHAR(2),
w_zip CHAR(9),
w_tax DECIMAL(4,2),
w_ytd DECIMAL(12,2)
);
常见的索引有B树索引、哈希(Hash)索引、位图索引
等。
创建索引使用的是CREATE INDEX
语句,它需要制定索引的名称以及要创建索引的基本表和基本表上的候选列。
CREATE INDEX <索引名> ON <基本表名> (<列名1>, <列名2>, ...);
例2-41: 为warehouse
基本表创建一个基于w_id
列的索引,默认是B树索引
。具体语句如下:
CREATE INDEX warehouse_index ON warehouse (w_id);
可以通过UNIQUE
关键字来指定创建的索引是否具有唯一性。
例2-42: 为new_orders
基本表创建一个基于全部列的索引。具体语句如下:
CREATE TABLE new_orders
(
no_o_id INTEGER NOT NULL,
no_d_id SMALLINT NOT NULL,
no_w_id SMALLINT NOT NULL
);
CREATE UNIQUE INDEX new_orders_index ON new_orders(no_o_id, no_d_id, no_w_id);
UNIQUE关键字指定的唯一性和主键的唯一性有一些不同。主键中的所有列不能有NULL值,而UNIQUE关键字创建的唯一索引可以允许有NULL值,由于NULL值在SQL中代表的是不确定的值,无法做等值比较,所以UNIQUE索引的唯一性表现在可以具有NULL值,而且可以有多组NULL值。
例2-43: 即使new_orders基本表上有UNIQUE索引,也可以插入多组NULL值。具体语句如下:
CREATE UNIQUE INDEX new_orders_index ON new_orders(no_o_id, no_d_id, no_w_id);
INSERT INTO new_orders VALUES(NULL, NULL, NULL);
INSERT INTO new_orders VALUES(NULL, NULL, NULL);