MySQL 索引Index

索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录

普通索引

 普通索引是最基本的索引,它没有任何限制。

创建索引

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 相同的记录,则先删除掉,再插入数据。
发布了316 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42347617/article/details/105352047