Mysql练习-索引的操作

一、练习要求

① 登录MySQL数据库
② 创建数据库index_test
③ 创建表test_table1
④ 创建表test_table2,存储引擎为MyISAM
⑤ 使用ALTER TABLE语句在表test_table2的birth字段上建立名为ComDataIdx的普通索引
⑥ 使用ALTER TABLE语句在表test_table2的id字段上添加名为UniqIdx2的唯一索引,并以降序排列。
⑦ 使用CREATE INDEX语句在firstname、middlename和lastname三个字段上建立名为MultiColIdx2的组合索引。
⑧ 使用CREATE INDEX语句在title字段上建立名为FTIdx的全文索引。
⑨ 使用ALTER TABLE语句删除表test_table1中名为UniqIdx的唯一索引
⑩ 使用DROP INDEX语句删除表test_table2中名为MultiColIdx2的组合索引

test_table1

字段名 数据类型 主键 外键 非空 唯一 自增
id int(11)
name CHAR(100)
address CHAR(100)
description CHAR(100)



test_table2

字段名 数据类型 主键 外键 非空 唯一 自增
id int(11)
firstname CHAR(50)
middlename CHAR(50)
lastname CHAR(50)
birth DATE
title CHAR(100)

二、操作记录


创建数据库index_test

mysql> CREATE database index_test;
Query OK, 1 row affected (0.00 sec)

mysql> USE index_test;
Database changed
mysql>


创建表test_table1

mysql> CREATE TABLE test_table1
    -> (
    -> id          INT NOT NULL  PRIMARY KEY AUTO_INCREMENT,
    -> name       CHAR(100) NOT NULL,
    -> address     CHAR(100) NOT NULL,
    -> description  CHAR(100) NOT NULL,
    -> UNIQUE INDEX UniqIdx(id),
    -> INDEX MultiColIdx(name(20), address(30)),
    -> INDEX ComIdx( description(30) )
    -> );
Query OK, 0 rows affected (0.33 sec)
mysql>
mysql> SHOW CREATE table test_table1 \G
*************************** 1. row ***************************
       Table: test_table1
Create Table: CREATE TABLE `test_table1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(100) NOT NULL,
  `address` char(100) NOT NULL,
  `description` char(100) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UniqIdx` (`id`),
  KEY `MultiColIdx` (`name`(20),`address`(30)),
  KEY `ComIdx` (`description`(30))
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql>


创建表test_table2,存储引擎为MyISAM

mysql> CREATE TABLE test_table2
    -> (
    -> id         INT NOT NULL  PRIMARY KEY AUTO_INCREMENT,
    -> firstname   CHAR(100) NOT NULL,
    -> middlename CHAR(100) NOT NULL,
    -> lastname   CHAR(100) NOT NULL,
    -> birth      DATE NOT NULL,
    -> title       CHAR(100) NULL
    -> ) ENGINE=MyISAM;
Query OK, 0 rows affected (0.04 sec)

mysql> SHOW CREATE table test_table1 \G
*************************** 1. row ***************************
       Table: test_table1
Create Table: CREATE TABLE `test_table1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(100) NOT NULL,
  `address` char(100) NOT NULL,
  `description` char(100) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `MultiColIdx` (`name`(20),`address`(30)),
  KEY `ComIdx` (`description`(30))
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql>


使用ALTER TABLE语句在表test_table2的birth字段上建立名为ComDataIdx的普通索引

mysql> ALTER TABLE test_table2 ADD INDEX ComDateIdx(birth);
Query OK, 0 rows affected (0.10 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>


使用ALTER TABLE语句在表test_table2的id字段上添加名为UniqIdx2的唯一索引,并以降序排列。

mysql> ALTER TABLE test_table2 ADD UNIQUE INDEX UniqIdx2 (id DESC) ;
Query OK, 0 rows affected (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>
mysql>


使用CREATE INDEX语句在firstname、middlename和lastname三个字段上建立名为MultiColIdx2的组合索引。

mysql> CREATE INDEX MultiColIdx2 ON test_table2(firstname, middlename, lastname);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>
mysql>


使用CREATE INDEX语句在title字段上建立名为FTIdx的全文索引。

mysql> CREATE FULLTEXT INDEX FTIdx ON test_table2(title);
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>


使用ALTER TABLE语句删除表test_table1中名为UniqIdx的唯一索引

mysql> ALTER TABLE test_table1 DROP INDEX UniqIdx;
Query OK, 0 rows affected (0.18 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>


使用DROP INDEX语句删除表test_table2中名为MultiColIdx2的组合索引

mysql> DROP INDEX MultiColIdx2 ON test_table2;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容