MYSQL索引类型,MYSQLc储存引擎

MySQL索引创建与删除

MySQL存储引擎的配置

MySQL索引创建与删除

1.1问题

本案例要求熟悉MySQL索引的类型及操作方法,主要练习以下任务:

普通索引、唯一索引、主键索引的创建/删除

自增主键索引的创建/删除

建立员工表yg、工资表gz,数据内容如表-1、表-2所示,设置外键实现同步更新与同步删除

表-1员工表yg的数据

表-2工资表gz的数据

1.2步骤

实现此案例需要按照如下步骤进行。

步骤一:索引的创建与删除

ü 创建表的时候指定INDEX索引字段

创建库home

mysql>create database home;

Query OK,1 row affected(0.00 sec)

ü 允许有多个INDEX索引字段。比如,以下操作在home库中创建了tea4表,将其中的id、name作为索引字段

mysql>USE home;

Database changed

mysql>CREATE TABLE tea4(

->id char(6)NOT NULL,

->name varchar(6)NOT NULL,

->age int(3)NOT NULL,

->gender ENUM('boy','girl')DEFAULT'boy',

->INDEX(id),INDEX(name)

->);

ü 查看新建tea4表的字段结构,可以发现两个非空索引字段的KEY标志为MUL:

mysql>DESC tea4;

2)删除现有表的某个INDEX索引字段

ü 比如,删除tea4表中名称为named的INDEX索引字段:

mysql>drop INDEX name ON tea4;//删除name字段的索引

mysql>DESC tea4;//确认删除结果

3)在已有的某个表中设置INDEX索引字段

ü 比如,针对tea4表的age字段建立索引,名称为nianling:

mysql>CREATE INDEX nianling ON tea4(age);//针对指定字段创建索引

mysql>DESC tea4;//确认创建结果

4)查看指定表的索引信息

使用SHOW INDEX指令:

mysql>SHOW INDEX FROM tea4\G

***************************1.row***************************

......

Index_type:BTREE//使用B树算法

***************************2.row***************************

Table:tea4

Non_unique:1

Key_name:nianling//索引名称

Seq_in_index:1

Column_name:age//字段名称

........

5)创建表的时候指定UNIQUE索引字段

UNIQUE表示唯一性的意思,同一个表中可以有多个字段具有唯一性。

ü 比如,创建tea5表,将id、name字段建立设置UNIQUE索引,age字段设置INDEX索引:

mysql>CREATE TABLE tea5(

->id char(6),

->name varchar(4)NOT NULL,

->age int(3)NOT NULL,

->UNIQUE(id),UNIQUE(name),INDEX(age)

->);

ü 查看新建tea5表的字段结构,可发现UNIQUE字段的KEY标志为UNI;另外,由于字段name必须满足“NOT NULL”的非空约束,所以将其设置为UNIQUE后会自动变成了PRIMARY KEY主键字段

mysql>DESC tea5;//确认设置结果

6)删除UNIQUE索引、在已有的表中设置UNIQUE索引字段

ü 先删除tea5表name字段的唯一索引(与删除INDEX索引的方法相同):

mysql>DROP INDEX name ON tea5;//清除UNIQUE索引

mysql>DESC tea5;//确认删除结果

ü 重新为tea5表的name字段建立UNIQUE索引,并确认结果:

mysql>CREATE UNIQUE INDEX name ON tea5(name);//建立UNIQUE索引

mysql>DESC tea5;//确认设置结果

7)建表时设置PRIMARY KEY主键索引

主键索引实际上在前面已经接触过了,建表的时候可以直接指定。如果表内一开始没有主键字段,则新设置的非空UNIQUE字段相当于具有PRIMARY KEY主键约束。

每个表中的主键字段只能有一个。

建表的时候,可以直接在某个字段的“约束条件”部分指定PRIMARY KEY;也可以在最后指定PRIMARY KEY(某个字段名)。比如:

mysql>CREATE TABLE biao01(

->id int(4)PRIMARY KEY,//直接在字段定义时约束

->name varchar(8)

->);

Query OK,0 rows affected(0.19 sec)

或者:

mysql>CREATE TABLE biao02(

->id int(4),

->name varchar(8),

->PRIMARY KEY(id)//所有字段定义完,最后指定

->);

Query OK,0 rows affected(0.17 sec)

在建表的时候,如果主键字段为int类型,还可以为其设置AUTO_INCREMENT自增属性,这样当添加新的表记录时,此字段的值会自动从1开始逐个增加,无需手动指定。比如,新建一个tea6表,将id列作为自增的主键字段:

mysql>CREATE TABLE tea6(

->id int(4)AUTO_INCREMENT,

->name varchar(4)NOT NULL,

->age int(2)NOT NULL,

->PRIMARY KEY(id)

->);

Query OK,0 rows affected(0.29 sec)

8)删除现有表的PRIMARY KEY主键索引

如果要移除某个表的PRIMARY KEY约束,需要通过ALTER TABLE指令修改。比如,以下操作将清除biao01表的主键索引。

清除前(主键为id):

mysql>DESC biao01;

清除操作:

mysql>ALTER TABLE biao01 DROP PRIMARY KEY;

Query OK,0 rows affected(0.49 sec)

Records:0 Duplicates:0 Warnings:0

清除后(无主键):

mysql>DESC biao01;

当尝试删除tea6表的主键时,会出现异常:

mysql>ALTER TABLE tea6 DROP PRIMARY KEY;

ERROR 1075(42000):Incorrect table definition;there can be only one auto column and it must be defined as a key

这是因为tea6表的主键字段id具有AUTO_INCREMNET自增属性,提示这种字段必须作为主键存在,因此若要清除此主键必须先清除自增属性——修改id列的字段定义:

mysql>ALTER TABLE tea6 MODIFY id int(4)NOT NULL;

Query OK,0 rows affected(0.75 sec)

Records:0 Duplicates:0 Warnings:0

然后再清除主键属性就OK了:

mysql>ALTER TABLE tea6 DROP PRIMARY KEY;//清除主键

mysql>desc tea6;//确认清除结果

9)为现有表添加PRIMARY KEY主键索引

重新为tea6表指定主键字段,仍然使用id列:

mysql>ALTER TABLE tea6 ADD PRIMARY KEY(id);//设置主键字段

mysql>DESC tea6;//确认设置结果

步骤二:创建数据库并设置外键实现同步更新与同步删除

根据实验任务要求,两个表格的字段结构如表-1、表-2所示。

1)创建yg表,用来记录员工工号、姓名

其中yg_id列作为主键,并设置自增属性

mysql>CREATE TABLE yg(

->yg_id int(4)AUTO_INCREMENT,

->name char(16)NOT NULL,

->PRIMARY KEY(yg_id)

->);

2)创建gz表,用来记录员工的工资信息

其中gz_id需要参考员工工号,即gz表的gz_id字段设为外键,将yg表的yg_id字段作为参考键:

mysql>CREATE TABLE gz(

->gz_id int(4)NOT NULL,

->name char(16)NOT NULL,

->gz float(7,2)NOT NULL DEFAULT 0,

->INDEX(name),

->FOREIGN KEY(gz_id)REFERENCES yg(yg_id)

->ON UPDATE CASCADE ON DELETE CASCADE

->);

3)为yg表添加2条员工信息记录

因yg_id有AUTO_INCREMENT属性,会自动填充,所以只要为name列赋值就可以了。

插入表记录可使用INSERT指令,这里先执行下列操作,具体在下一章学习:

mysql>INSERT INTO yg(name)VALUES('Jerry'),('Tom');

Query OK,2 rows affected(0.16 sec)

Records:2 Duplicates:0 Warnings:0

确认yg表的数据记录:

mysql>SELECT*FROM yg;

2 rows in set(0.00 sec)

4)为gz表添加2条工资信息记录

同上,数据参考图-2,插入相应的工资记录(gz_id字段未指定默认值,也未设置自增属性,所以需要手动赋值):

mysql>INSERT INTO gz(gz_id,name,gz)

->VALUES(1,'Jerry',12000),(2,'Tom',8000)

->;

Query OK,2 rows affected(0.06 sec)

Records:2 Duplicates:0 Warnings:0

确认gz表的数据记录:

mysql>SELECT*FROM gz;

5)验证表记录的UPDATE更新联动

将yg表中Jerry用户的yg_id修改为1234:

mysql>update yg SET yg_id=1234 WHERE name='Jerry';

确认修改结果:

mysql>SELECT*FROM yg;

同时也会发现,gz表中Jerry用户的gz_id也跟着变了:

mysql>SELECT*FROM gz;

6)验证表记录的DELETE删除联动

删除yg表中用户Jerry的记录:

mysql>DELETE FROM yg WHERE name='Jerry';

Query OK,1 row affected(0.05 sec)

确认删除结果:

mysql>SELECT*FROM yg;

查看gz表中的变化(Jerry的记录也没了):

mysql>SELECT*FROM gz;

7)删除指定表的外键约束

先通过SHOW指令获取表格的外键约束名称:

mysql>SHOW CREATE TABLE gz\G

其中gz_ibfk_1即删除外键约束时要用到的名称。

删除操作:

mysql>ALTER TABLE gz DROP FOREIGN KEY gz_ibfk_1;

Query OK,0 rows affected(0.01 sec)

Records:0 Duplicates:0 Warnings:0

确认删除结果:

mysql>SHOW CREATE TABLE gz\G


2 MySQL存储引擎的配置

2.1问题

本案例要求MySQL数据存储引擎的使用,完成以下任务操作:

可用的存储引擎类型

查看默认存储类型

更改表的存储引擎

2.2步骤

实现此案例需要按照如下步骤进行。

步骤一:查看存储引擎信息

登入MySQL服务器,查看当前支持哪些存储引擎。

使用mysql命令连接,以root用户登入:

[root@dbsvr1~]#mysql-u root–p

Enter password:

mysql>

执行SHOW ENGINES\G指令可列表查看,MySQL 5.6可用的存储引擎有9种(除最后的FEDERATED以外,其他8种都支持),其中默认采用的存储引擎为InnoDB:

mysql>SHOW ENGINES\G

***************************1.row***************************

Engine:InnoDB

Support:DEFAULT//此存储引擎为默认

.... ....

***************************9.row***************************

Engine:FEDERATED

Support:NO//此引擎不被支持

>>>>>

或者直接查看系统变量default_storage_engine的值,也可确认默认采用的存储引擎是InnoDB:

mysql>SHOW VARIABLES LIKE'default_storage_engine';

+------------------------+--------+

|Variable_name|Value|

+------------------------+--------+

|default_storage_engine|InnoDB|

+------------------------+--------+

1 row in set(0.00 sec)

步骤二:修改默认存储引擎

在mysql>环境中,可以直接通过SET指令更改默认的存储引擎(只在本次连接会话过程中有效,退出重进即失效)。比如临时修改为MyISAM,可执行下列操作:

mysql>SET default_storage_engine=MyISAM;//改用MyISAM引擎

mysql>SHOW VARIABLES LIKE'default_storage_engine';//确认结果

若希望直接修改MySQL服务程序所采用的默认存储引擎,应将相关设置写入配置文件/etc/my.cnf,并重启服务后生效。比如:

[root@dbsvr1~]#vim /etc/my.cnf

[mysqld]

....

default_storage_engine=MEMORY //改用MEMORY引擎

[root@dbsvr1~]#systemctl restart mysqld.service//重启服务

重新登入mysql>确认修改结果:

[root@dbsvr1~]#mysq l-u root -p

Enter password:

Welcome to the MySQL monitor.Commands end with;or\g.

mysql>SHOW VARIABLES LIKE'default_storage_engine';

+------------------------+--------+

|Variable_name|Value|

+------------------------+--------+

|default_storage_engine|MEMORY|//默认引擎已修改

+------------------------+--------+

mysql>exit

为了避免后续实验障碍,测试完后记得恢复原状——移除默认引擎设置,或者将其修改为InnoDB即可:

[root@dbsvr1~]#vim /etc/my.cnf

[mysqld]

....

default_storage_engine=InnoDB

[root@dbsvr1~]#systemctl restart mysqld.service

确认恢复结果(选项-e可调用指定的SQL操作后返回Shell命令行):

[root@dbsvr1~]#mysql -u root -p -e "SHOW VARIABLES LIKE'default_storage_engine';"

Enter password:

+------------------------+--------+

|Variable_name|Value|

+------------------------+--------+

|default_storage_engine|InnoDB|

+------------------------+--------+

MYSQL索引类型。MYSQLc储存引擎的更多相关文章

  1. MySQL索引类型,优化,使用数据结构

    工欲善其事必先利其器 半藏说道:“若你在路途中遇到上帝,上帝也会被割伤.” 一.mysql 索引分类(默认使用B树结构)在数据库表中,对字段建立索引可以大大提高查询速度.通过善用这些索引,可以令 My ...

  2. mysql索引类型和索引方法

    索引类型 mysql索引类型normal,unique,full text的区别是什么? normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号 ...

  3. mysql索引类型(按存储结构划分)

    关于mysql索引类型,网上有很多相关的介绍,给人的感觉很乱.鄙人在翻阅相关书籍后,特意梳理了一下.哪里有不对的地方,欢迎指正! 1. B-Tree索引 它使用B-Tree数据结构来存储数据,实际上很 ...

  4. mysql索引类型 normal, unique, full text

    问题1:mysql索引类型normal,unique,full text的区别是什么? normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号用 ...

  5. mysql索引总结(1)-mysql 索引类型以及创建

    mysql索引总结(1)-mysql 索引类型以及创建 mysql索引总结(2)-MySQL聚簇索引和非聚簇索引 mysql索引总结(3)-MySQL聚簇索引和非聚簇索引 mysql索引总结(4)-M ...

  6. [转]MySQL索引类型

    此为转载文章,仅做记录使用,方便日后查看,原文链接:https://www.cnblogs.com/luyucheng/p/6289714.html MySQL索引类型   一.简介 MySQL目前主 ...

  7. MySQL索引类型及优化

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...

  8. 如何回答——请简述MySQL索引类型

    想必大家在被问到这个问题的时候,在网上总是能搜到不同的回答,却又各不相同.其实这些答案大部分都是正确的,只不过在阐述MySQL索引类型的时候从不同方面入手而已.这里归纳如下,具体的机制可以参考其他博文 ...

  9. php面试专题---Mysql索引类型、介绍及优点

    php面试专题---Mysql索引类型.介绍及优点 一.总结 一句话总结: 精品视频讲解里面的资料来源也是通过各种资料,比如博客.书等,只不过是基于讲解者的知识体系有整理的过程 1.B-Tree索引三 ...

随机推荐

  1. 一致性hash算法之php实现

    源码地址:https://github.com/killallspree/myFrame/blob/master/framework/components/Flexihash.php

  2. Java 基础(四):数组

    数组,一种应用非常广泛的数据结构,简单地来说就是一组类型相同且无序的元素的存储在固定长度且有序的内存空间. 创建一个数组 在Java中,我们可以通过[]去声明一个指定类型的数组 int[] a; // ...

  3. 因为我说:volatile 是轻量级的 synchronized,面试官让我回去等通知!

    因为我说:volatile 是轻量级的 synchronized,面试官让我回去等通知! volatile 是并发编程的重要组成部分,也是面试常被问到的问题之一.不要向小强那样,因为一句:volati ...

  4. ret.data[0]._highlight = true iview table表格高亮

    ret.data[0]._highlight = true iview table表格高亮

  5. LeetCode42题,单调栈、构造法、two pointers,这道Hard题的解法这么多?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题的第23篇文章. 今天来看一道很有意思的题,它的难度是Hard,并且有许多种解法. 首先我们来看题面,说是我们有若 ...

  6. Journal of Proteome Research | 人类牙槽骨蛋白的蛋白质组学和n端分析:改进的蛋白质提取方法和LysargiNase消化策略增加了蛋白质组的覆盖率和缺失蛋白的识别 | (解读人:卜繁宇)

    文献名:Proteomic and N-Terminomic TAILS Analyses of Human Alveolar Bone Proteins: Improved Protein Extr ...

  7. AAAI 2020 | 反向R?削弱显著特征为细粒度分类带来提升

    论文提出了类似于dropout作用的diversification block,通过抑制特征图的高响应区域来反向提高模型的特征提取能力,在损失函数方面,提出专注于top-k类别的gradient-bo ...

  8. vue 3

    目录 复习 Vue项目需要自建服务器:node npm:包管理器 - 为node拓展功能的 vue cli环境:脚手架 - 命令行快速创建项目 创建Vue项目 启动项目 项目目录 组件 在根组件中渲染 ...

  9. JavaWeb----Cookie&Session

    ##  会话技术 1.会话:一次会话中包含多次请求和响应. *  第一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止. 2.功能:再一次会话的范围内的多次请求间,共享数据 3. ...

  10. 升级 nop 4.1 Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.

    Incorrect syntax near 'OFFSET'.  Invalid usage of the option NEXT in the FETCH statement. nop.web 项目 ...