IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'emp_pay')
DROP TABLE emp_pay
IF EXISTS (SELECT name FROM sys.indexes
WHERE name = 'employeeID_ind')
DROP INDEX emp_pay.employeeID_ind
CREATE TABLE emp_pay
(
employeeID int NOT NULL,
base_pay money NOT NULL,
commission decimal(2, 2) NOT NULL
)
INSERT emp_pay VALUES (1, 500, .10)
INSERT emp_pay VALUES (2, 1000, .05)
INSERT emp_pay VALUES (6, 800, .07)
INSERT emp_pay VALUES (5, 1500, .03)
INSERT emp_pay VALUES (9, 750, .06)
无索引查找
SELECT * FROM emp_pay where employeeID=5
创建索引
CREATE UNIQUE CLUSTERED INDEX employeeID_ind
ON emp_pay (employeeID)
create unique clustered index employeeID_ind
当插入的数据在employeeID字段出现重复时会报错。假如我们在创建索引之前数据字段出现重复,那么就不能创建唯一索引。
删除索引
删除在前面创建的索引employeeID_ind
DROP INDEX employeeID_ind ON emp_pay;
格式:CREATE [unique|fulltext|spatial] INDEX 索引的名称 ON 表名(表名的哪一列的列名1,列名2…)
例:为employee表的ename列上建立一个升序普通索引ename_index。
CREATE INDEX ename_index ON employee(ename ASC);
例:在employee表的ename列上建立一个唯一性索引ename_uni_index。
CREATE UNIQUE INDEX ename_uni_index ON employee(ename);
例:在employee表的empno和ename列上建立一个复合索引empno_ename_index。
CREATE INDEX empno_ename_index ON employee(empno,ename);
可以使用show index from table_name语句查看表中已创建的索引
SHOW INDEX FROM employee;
创建表时创建索引
例:创建dept_index表时
为dname字段建立一个唯一性索引dname_index,
为loc字段的前3个字符创建一个前缀索引loc_index。
CREATE TABLE IF NOT EXISTS dept_index (
deptno INT(2),
dname VARCHAR(14),
loc VARCHAR(13),
PRIMARY KEY (deptno),
UNIQUE INDEX dname_index(dname),
INDEX loc_index(loc(3))
);
修改表时创建索引
例:在dept_index表上建立deptno和dname的复合索引。
ALTER TABLE dept_index ADD INDEX deptno_dname_index(deptno, dname);
查看dept_index表已创建的索引
Show index from dept_index;
当给表创建unique约束时,MySQL会自动创建唯一索引。
创建唯一索引时,应保证创建索引的列不包括重复的数据,并且不要有两个及以上的空值(null)。
因为创建索引时将两个空值也视为重复的数据,如果有这种数据,必须先将其删除,否则索引不能被成功创建。
也就是说唯一索引只允许有一个空值。