索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录
普通索引
普通索引是最基本的索引,它没有任何限制。
创建索引
CREATE INDEX indexName (indexName length) ON table_name;
说明:
如果是 CHAR、VARCHAR 类型,length 可以小于字段实际长度;
如果是 BLOB、TEXT 类型,必须指定 length。
添加索引(修改表结构)
ALTER TABLE tableName ADD INDEX indexName(columnName);
创建表的时候直接指定
CREATE TABLE tableName(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (indexName length)
);
删除索引
DROP INDEX [indexName] ON tableName;
唯一索引
它与前面的普通索引类似,不同的是:索引列的值必须唯一,但允许有空值;如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
创建索引
CREATE UNIQUE INDEX indexName (username length) ON tableName;
添加索引(修改表结构)
ALTER TABLE tableName ADD UNIQUE [indexName] (username length);
创建表的时候直接指定
CREATE TABLE tableName (
id INT NOT NULL,
username VARCHAR(16) NOT NULL,
UNIQUE [indexName] (username length)
);
显示索引信息
创建或添加索引后,你可以使用 SHOW INDEX 命令来列出表中的相关索引信息:
SHOW INDEX FROM tableName;
另一种设置数据唯一性的方法是添加一个 UNIQUE 索引,如下所示:
CREATE TABLE person_tbl (
first_name CHAR(20) NOT NULL,
last_name CHAR(20) NOT NULL,
sex CHAR(10),
UNIQUE (last_name, first_name)
);
如果我们设置了唯一索引,那么在插入重复数据时,SQL 语句将无法执行成功,并抛出错误。
INSERT IGNORE INTO 与 INSERT INTO 的区别:INSERT IGNORE 会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样就可以保证数据库中已经存在数据,达到在间隙中插入数据的目的。
示例:使用 INSERT IGNORE INTO,执行后不会向数据表中插入重复数据,也不会抛出错误:
INSERT IGNORE INTO person_tbl (last_name, first_name) VALUES (‘Jay’, ‘Thomas’);
INSERT IGNORE INTO person_tbl (last_name, first_name) VALUES (‘Jay’, ‘Thomas’);
说明:当使用 INSERT IGNORE INTO 插入数据时,在设置了记录的唯一性后,如果插入重复数据,将不抛出错误,只以警告形式返回。而使用 REPLACE INTO 时,如果数据表中存在 PRIMARY 或 UNIQUE 相同的记录,则先删除掉,再插入数据。