MySQL之创建索引

MySQL之创建索引

1.五种索引分类

*主键索引:
关键字:PRIMARY
针对于表中主键创建的索引
名为primary的唯一非空索引,不允许有空值。数据允许重复,不允许为 NULL,一个表只能有一个主键

*唯一索引:
关键字:UNIQUR
避免同一个表中某数据列中的值重复;

索引列中的值必须是唯一的,允许为 NULL 值,一个表允许多个列创建唯一索引;
唯一索引和主键索引的区别是:唯一约束的列可以为null且可以存在多个null值。
唯一索引的用途:唯一标识数据库表中的每条记录,主要是用来防止数据重复插入。

*普通索引:
无关键字
快速定位特定数据
基本的索引类型,没有唯一性的限制,允许为 NULL 值;

*全文索引:
关键字:FULLTEXT
全文索引查找的是文本中的关键词,而不是比
较索引中的值
只有在MyISAM引擎上才能使用,只能在CHAR、VARCHAR和TEXT类型字段上使用全文索引。

*组合索引:
在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时需遵循最左前缀原则。

2.创建表后创建索引命令(create)

index_name是索引名; index_col_name是表中字段名;
后面有三个点“…”代表一个索引是可以关联多个字段的,如果一个索引只关联一个字段,这种索引称之为单列索引;如果一个索引关联了多个字段,这种索引称之为联合索引(也叫组合索引)
注:-索引名字一般以"idx_表明_字段名"这样的规范来写,比如idx_user_name
如果 UNIQUE 与FULLTEXT都没写的话,代表创建的是普通索引

CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name ( index_col_name,... ) ;

3.创建表后创建索引命令(alter)

3.1单列主键索引

ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ); --注:索引名字是PRIMARY
ALTER TABLE student ADD PRIMARY KEY indexname( name ) ;--注:索引名字仍然是PRIMARY

3.2单列唯一索引

ALTER TABLE `table_name` ADD UNIQUE ( `column` ) ;-- 注:默认索引名字与列名一样
ALTER TABLE `table_name` ADD UNIQUE indexname ( `column` ) ;-- 索引名字是indexname

3.3组合唯一索引

ALTER TABLE student ADD UNIQUE ttt ( id,name,age ) ;--注:三个索引名字都是ttt

3.4单列普通索引

ALTER TABLE `table_name` ADD INDEX  ( `column` ) --注:这是创建普通索引,默认名字与列名一样
ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) ----注:这是创建普通索引,名字是index_name

3.5组合普通索引

ALTER TABLE table_name ADD INDEX (column1, column2, column3)--注:三个索引的名字都默认索引名字是column1
ALTER TABLE table_name ADD INDEX index_name(column1, column2, column3)--注:三个索引的名字都是index_name

3.6单列全文索引

mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 

4.创建表时创建索引命令(create)

4.1单列主键索引(不起名)

注意:以上这种方式默认索引名字是PRIMARY

create table tb_user(
id int primary key auto_increment comment '主键'
);

4.2组合普通索引(起名字)

组合索引的名字是name

CREATE TABLE user_index2 (
	id INT auto_increment PRIMARY KEY,
	first_name VARCHAR (16),
	last_name VARCHAR (16),
	id_card VARCHAR (18),
	KEY name (first_name, last_name)
);

在这里插入图片描述

4.3单列全文索引(不起名)

索引的名字是information

CREATE TABLE user_index2 (
	id INT auto_increment PRIMARY KEY,
	first_name VARCHAR (16),
	last_name VARCHAR (16),
	id_card VARCHAR (18),
	information text,
	FULLTEXT KEY (information)
);

在这里插入图片描述

4.4单列唯一索引(不起名)

索引名字是id_card

CREATE TABLE user_index2 (
	id INT auto_increment PRIMARY KEY,
	first_name VARCHAR (16),
	last_name VARCHAR (16),
	id_card VARCHAR (18),
	information text,
	UNIQUE KEY (id_card)
);

在这里插入图片描述

5.删除索引命令

DROP INDEX index_name ON table_name ;

6.演示(create)

6.1创建表时建单列主键索引

创建如下表

create table tb_user(
id int primary key auto_increment comment '主键',
name varchar(50) not null comment '用户名',
phone varchar(11) not null comment '手机号',
email varchar(100) comment '邮箱',
profession varchar(11) comment '专业',
age tinyint unsigned comment '年龄',
gender char(1) comment '性别 , 1: 男, 2: 女',
status char(1) comment '状态',
createtime datetime comment '创建时间'
) comment '系统用户表';
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('吕布', '17799990000', 'lvbu666@163.com', '软件工程', 23, '1',
'6', '2001-02-02 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('曹操', '17799990001', 'caocao666@qq.com', '通讯工程', 33,
'1', '0', '2001-03-05 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('赵云', '17799990002', '17799990@139.com', '英语', 34, '1',
'2', '2002-03-02 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('孙悟空', '17799990003', '17799990@sina.com', '工程造价', 54,
'1', '0', '2001-07-02 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('花木兰', '17799990004', '19980729@sina.com', '软件工程', 23,
'2', '1', '2001-04-22 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('大乔', '17799990005', 'daqiao666@sina.com', '舞蹈', 22, '2',
'0', '2001-02-07 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('露娜', '17799990006', 'luna_love@sina.com', '应用数学', 24,
'2', '0', '2001-02-08 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('程咬金', '17799990007', 'chengyaojin@163.com', '化工', 38,
'1', '5', '2001-05-23 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('项羽', '17799990008', 'xiaoyu666@qq.com', '金属材料', 43,
'1', '0', '2001-09-18 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('白起', '17799990009', 'baiqi666@sina.com', '机械工程及其自动
化', 27, '1', '2', '2001-08-16 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('韩信', '17799990010', 'hanxin520@163.com', '无机非金属材料工
程', 27, '1', '0', '2001-06-12 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('荆轲', '17799990011', 'jingke123@163.com', '会计', 29, '1',
'0', '2001-05-11 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('兰陵王', '17799990012', 'lanlinwang666@126.com', '工程造价',
44, '1', '1', '2001-04-09 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('狂铁', '17799990013', 'kuangtie@sina.com', '应用数学', 43,
'1', '2', '2001-04-10 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('貂蝉', '17799990014', '84958948374@qq.com', '软件工程', 40,
'2', '3', '2001-02-12 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('妲己', '17799990015', '2783238293@qq.com', '软件工程', 31,
'2', '0', '2001-01-30 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('芈月', '17799990016', 'xiaomin2001@sina.com', '工业经济', 35,
'2', '0', '2000-05-03 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('嬴政', '17799990017', '8839434342@qq.com', '化工', 38, '1',
'1', '2001-08-08 00:00:00');
INSERT INTO tb_user (name, phone, email, profession, age, gender, status,
createtime) VALUES ('狄仁杰', '17799990018', 'jujiamlm8166@163.com', '国际贸易',
30, '1', '0', '2007-03-12 00:00:00');

在这里插入图片描述
在这里插入图片描述

6.2创建表后建单列普通索引

1.name字段为姓名字段,该字段的值可能会重复,为该字段创建索引

CREATE INDEX idx_user_name ON tb_user(name); --创建的是一般索引

在这里插入图片描述

6.3创建表后建单列唯一索引

2.phone手机号字段的值,是非空,且唯一的,为该字段创建唯一索引。

CREATE UNIQUE INDEX idx_user_phone ON tb_user(phone);

在这里插入图片描述

6.4创建表后建组合普通索引

3.为profession、age、status创建联合索引。
联合索引里这三个字段profession,age,status是有讲究的

CREATE INDEX idx_user_pro_age_sta ON tb_user(profession,age,status);

在这里插入图片描述

6.5创建表后建单列普通索引

4.为email建立合适的索引来提升查询效率

CREATE INDEX idx_email ON tb_user(email);

在这里插入图片描述

6.6删除组合索引

在这里插入图片描述

7.演示(alter创建主键索引)

7.1创建表后建索引

ALTER TABLE table_name ADD PRIMARY KEY ( column)

image-20220228131536552

image-20220228131549147

7.2创建表后建索引(起名字)

ALTER TABLE student ADD PRIMARY KEY indexname( name )

image-20220228131953722

8.演示(alter创建唯一索引)

与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值;
一个表的主键只能有一个,而唯一索引可以建多个;

8.1创建表后建索引

ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 

image-20220228132216978

image-20220228132238867

8.2创建表后建索引(起名字)

ALTER TABLE `table_name` ADD UNIQUE indexname ( `column` ) 

image-20220228132412000

8.3创建表后建组合索引(起名字)

ALTER TABLE student ADD UNIQUE ttt ( id,name,age ) ;

image-20220228140811906

image-20220228140835108

image-20220228140851653

image-20220228140915109

9.演示(alter创建普通索引)

这是最基本的索引,它没有任何限制

9.1创建表后建索引

ALTER TABLE `table_name` ADD INDEX  ( `column` ) 

image-20220228133209261

image-20220228133219567

9.2创建表后建索引(起名字)

ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 

image-20220228112542093

image-20220228112604227

image-20220228112639391

image-20220228112654157

9.3创建表后建组合索引

组合索引又叫联合索引
当创建(col1,col2,col3)联合索引时,相当于创建了(col)单列索引,(clo1,clo2)联合索引以及(col1,col2,col3)联合索引想要索引生效,只能使用col1和col1,col2和col1,col2,col3三种组合;当然,col1,col3组合也可以,但实际上只用到了col1的索引,col3并没有用到

ALTER TABLE table_name ADD INDEX (column1, column2, column3)

image-20220228135231690

image-20220228135247085

9.4创建表后建组合索引(起名字)

image-20220228135942940

image-20220228140005768

image-20220228140021420

  • 11
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MYSQL中,创建索引可以通过使用CREATE INDEX语句来完成。例如,要为名为"tb_user"的表中的"name"字段创建一个一般索引,可以使用以下语句:CREATE INDEX idx_user_name ON tb_user(name); [1] 如果想要删除索引,可以使用DROP INDEX语句,其中"index_name"是要删除的索引的名称,"table_name"是索引所在的表的名称。例如,要删除名为"index_name"的索引,可以使用以下语句:DROP INDEX index_name ON table_name; [2] 此外,还可以在创建表时直接建立单列主键索引。这可以通过在CREATE TABLE语句中为列指定PRIMARY KEY关键字来实现。例如:CREATE TABLE table_name (column_name data_type PRIMARY KEY); [2] 如果在创建表后需要为已存在的表添加索引,并指定索引名称,可以使用ALTER TABLE语句。例如,要在名为"table_name"的表中的"column"列上创建一个唯一索引,并命名为"indexname",可以使用以下语句:ALTER TABLE table_name ADD UNIQUE indexname(column); [3<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [MySQL创建索引](https://blog.csdn.net/weixin_52690231/article/details/123866879)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GoGo在努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值