本博客是【韩顺平讲MySQL】零基础一周学会MySQL -sql mysql教程 mysql视频 mysql入门视频的学习笔记

文章目录

  • 自增长
  • MySQL索引
  • 索引机制
  • 创建索引
  • 删除索引、查询索引
  • 创建索引的规则

自增长

一个问题:在某张表中,存在一个id列(整数),我们希望在添加记录的时候,该列从1开始,自动地增长,该如何处理呢?

字段名 整形 primary key auto_increment

添加自增长字段的方式
如果字段1是自增长的,给字段1赋值要写null,或者不给字段1赋值。

insert into xxx (字段1,字段2......) values(null,'值'......);
insert into xxx (字段2,字段3......) values('值','值'......);
insert into xxx values(null,'值1','值2'......);

#自增长
CREATE TABLE t24(id INT PRIMARY KEY AUTO_INCREMENT,email VARCHAR(32) NOT NULL DEFAULT '' ,`name` VARCHAR(32) NOT NULL DEFAULT '')
DESC t24;
#测试自增长的使用
INSERT INTO t24 (id,email,`name`) VALUES(NULL,'jack@qq.com','jack');
INSERT INTO t24 VALUES(NULL,'tom@qq.com','tom');
#如果不是自增长的话,下面这个语法是错误的
INSERT INTO t24 (email,`name`) VALUES('lhq@qq.com','lhq');
SELECT * FROM t24;


自增长使用细节:

  1. 一般来说,自增长和主键配合使用
  2. 自增长也可以单独使用,但是需要配合一个unique
  3. 自增长修饰的字段为整数类型的(虽然小数也可以但非常少这样使用)
  4. 自增长默认从1开始,你也可以通过如下命令修改
ALTER TABLE t25 AUTO_INCREMENT=100;

5.如果添加数据时,给自增长字段(列)指定的有值,则以指定的值为准。如果指定了自增长,一般来说,就按照自增长的规则来添加数据

INSERT INTO t25 VALUES(666,'lhq@qq.com','lhq');


6.如果设置了自增长,删除掉某条记录后,自增长不会自动填补,会在删除数据的id上加一

MySQL索引

说起提高数据库性能,索引是最物美价廉的东西了。不用加内存,不用改程序,不用调sql,查询速度就可能提高百倍千倍。

这里我们举例说明索引的好处【构建海量表 有8000000条数】

我们已经提前准备好了一个数据库和海量表。

#在没有创建索引时,我们查询一条记录
SELECT * FROM empWHERE empno=1234567


在没有创建索引前,emp.ibd文件大小是524,288KB

#使用索引来优化一下,体验索引有多牛
#empno_index索引名称
#ON emp (empno) 表示在emp表的empno列创建索引
CREATE INDEX empno_index ON emp (empno)

创建索引后,emp.ibd文件大小是655,360KB

得出结论,创建的索引本身也会占用磁盘空间

这里联想到“以空间换时间”的算法思想。

SELECT * FROM empWHERE empno=1234568


提升速度非常显著!


我们在ename上没有创建索引,那么查询ename时依然很慢

#创建索引后,只对创建了索引的列有效
SELECT * FROM emp WHERE ename='axJxCT';

索引机制

索引的原理

图片来自【韩顺平讲MySQL】零基础一周学会MySQL -sql mysql教程 mysql视频 mysql入门

索引的代价
1.磁盘占用会变大
2.对update delete insert语句的效率会有影响
以删除为例,删除一条数据会导致整个索引数据结构的改变,需要重新更新调整数据结构,所以对速度会有影响。

在项目中,select操作比update、delete、insert多得多。

创建索引

索引的类型

  1. 主键索引 如果某个列是主键,那它自然就是主索引 (primary key)
CREATE TABLE t1(id int primary key,#主键,同时也是索引,称为主键索引name varchar(32));
  1. 唯一索引 (unique)
CREATE TABLE t2(id int unique,#id是唯一的,同时也是索引,称为unique索引name varchar(32));
  1. 普通索引 (index)

  2. 全文索引 (fulltext) [适用于MyISAM]
     一般开发不使用Mysql自带的全文索引,而是使用全文搜索 Solr 和 ElasticSearch (ES)

#演示MySQL索引的使用
#创建索引
CREATE TABLE t26(id INT,`name` VARCHAR(32));
#查询表是否有索引
SHOW INDEXES FROM t26;
#添加唯一索引
CREATE UNIQUE INDEX id_index ON t26 (id);
#添加普通索引
create index id_index on t26(id);
#如何选择唯一索引和普通索引
#1.如果某列的值是不会重复的,则优先考虑unique索引,否则使用普通索引
#添加普通索引的另一个方法
-- alter table t26 add index id_index (id)#添加主键索引
#1.建表时指定primary key
#2.alter table t26 add primary key(id);
ALTER TABLE t26 ADD PRIMARY KEY(id);

删除索引、查询索引

#删除索引
DROP INDEX id_index ON t26;
SHOW INDEX FROM t26;
#删除主键索引
ALTER TABLE t26 DROP PRIMARY KEY;#修改索引就是先删除,再添加新的索引#查询索引
#1.
SHOW INDEX FROM t26;
#2.
SHOW INDEXES FROM t26;
#3.
SHOW KEYS FROM t26;
#4.
DESC t26;

练习:建立主键索引
要求:创建一张订单表order(id,商品名,订购人,数量)要求id号为主键,请使用两种方式来创建主键。

CREATE TABLE order1(id INT PRIMARY KEY,goods_name VARCHAR(32),order_people VARCHAR(32),nums INT);
SHOW INDEXES FROM order1;CREATE TABLE order2(id INT,goods_name VARCHAR(32),order_people VARCHAR(32),nums INT);
ALTER TABLE order2 ADD PRIMARY KEY(id);
SHOW INDEXES FROM order1;

练习:建立唯一索引
要求:创建一张特价菜谱表menu(id,菜谱名,厨师,点餐人身份证,价格)要求id号为主键,点餐人身份证是unique,请使用两种方式来创建unique

CREATE TABLE menu1(id INT PRIMARY KEY,food_name VARCHAR(32),cook_name VARCHAR(32),customer_idcard VARCHAR(32) UNIQUE,price INT);
SHOW INDEXES FROM menu1;CREATE TABLE menu2(id INT PRIMARY KEY,food_name VARCHAR(32),cook_name VARCHAR(32),customer_idcard VARCHAR(32),price INT);
CREATE UNIQUE INDEX customer_idcard_index ON menu2(customer_idcard);
SHOW INDEXES FROM menu2;

练习:创建普通索引
要求:创建一张运动员表sportman(id,名字,特长)要求id号为主键,名字为普通索引。请使用三种方式来创建索引。

CREATE TABLE sportman1(id INT PRIMARY KEY,`name` VARCHAR(32),special_skill VARCHAR(32));
CREATE INDEX name_index ON sportman1(`name`);
SHOW INDEXES FROM sportman1;CREATE TABLE sportman2(id INT PRIMARY KEY,`name` VARCHAR(32),special_skill VARCHAR(32));
ALTER TABLE sportman2 ADD INDEX name_index(`name`);
SHOW INDEXES FROM sportman2;CREATE TABLE sportman3(id INT,`name` VARCHAR(32),special_skill VARCHAR(32));
ALTER TABLE sportman3 ADD PRIMARY KEY (id);
CREATE INDEX name_index ON sportman3(`name`);
SHOW INDEXES FROM sportman3;

创建索引的规则

小结:在哪些列上适合使用索引

  1. 较频繁的作为查询条件的字段应该创建索引
    select * from emp where empno=1
  2. 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
    例如:性别
  3. 更新非常频繁的字段不适合创建索引
    select * from emp where logincount=1
  4. 不会出现在WHERE子句中的字段不该被创建索引

[MySQL] 零基础学MySQL 08相关推荐

  1. [MySQL] 零基础学MySQL 04

    本博客是[韩顺平讲MySQL]零基础一周学会MySQL -sql mysql教程 mysql视频 mysql入门视频的学习笔记 文章目录 修改表 应用实例 数据库CRUD insert基本使用 案例1 ...

  2. [MySQL] 零基础学MySQL10

    本博客是[韩顺平讲MySQL]零基础一周学会MySQL -sql mysql教程 mysql视频 mysql入门视频的学习笔记 文章目录 MySQL表类型和存储引擎 三种存储引擎表使用案例 如何选择表 ...

  3. 零基础学 MySQL

    1 一个问题 2 解决之道 2.1 解决之道-文件.数据库 2.2 MySQL 数据库的安装和配置 ==> 视频链接 2.3 使用命令行窗口连接 MYSQL 数据库 2.4 操作示意图 3 Na ...

  4. php公用一个尾部,19.2 共用显示部分 - 19.2.2 共用尾部页面 - 《零基础学PHP+MySQL (零基础学编程)》 - D云...

    19.2.2 共用尾部页面 在上面介绍了PHP论坛的共用头部,接下来介绍PHP论坛的共用尾部页面的建立.共用尾部页面是用来显示网站的版权所有,程序的代码如代码19.2所示. 代码19.2 共用尾部页面 ...

  5. MySQL零基础从入门到精通(函数篇)

    MySQL零基础从入门到精通(函数篇) 在MySQL中,为了提高代码重用性和隐藏实现细节,MySQL提供了很多函数.函数可以理解为别人封装好的模板代码. 分类 聚合函数 数学函数 字符串函数 日期函数 ...

  6. java零基础Ⅲ-- 4.Mysql基础

    java零基础Ⅲ-- 4.Mysql基础 MySQL安装配置 MySQL数据库的安装和配置 软件下载 特别说明 安装步骤 使用命令行窗口连接MYSQL数据库 Navicat 安装和使用 介绍:图形化M ...

  7. python识别魔方色块_【雕爷学编程】MicroPython动手做(08)——零基础学MaixPy之识别颜色...

    早上用百度搜了一下"颜色识别",多少有了一点大致的概念,还是老办法,动手做,多实验,往前走,还请各位老师多多指点. OpenCV(百度百科) 是一个基于BSD许可(开源)发行的跨平 ...

  8. 零基础学习MySQL

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 导语 经过一段时间的筹备和整理,万里数据库<零基础学习MySQL>课程正式在腾讯课堂上线了. 课程地址:htt ...

  9. MySQL零基础从入门到精通(进阶SQL优化篇)

    MySQL零基础从入门到精通(进阶SQL优化篇) SQL优化 insert 如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化. insert into tb_test value ...

最新文章

  1. Lync和Exchange 2013集成PART5:UCS和HD头像
  2. 335b装配程序流程图_某建设项目装配式框架结构PC构件吊装监理细则(方案)
  3. PHP学习笔记-字符串操作1
  4. docker kaniko push推送镜像至harbor报错:x509: certificate signed by unknown authority(命令中添加 --skip-tls-ver)
  5. html5手机网站照片查看器,HTMLayout仿Picasa照片查看器效果
  6. html加载出来图片乱掉,HTML基础 img alt 图片加载失败时,出现替代文本
  7. Codeforces 1291 Round #616 (Div. 2) C. Mind Control(超级详细)
  8. Spring快速开启计划任务
  9. 琢越网用户使用手册和反馈
  10. 新顶级域名、Cloud域名
  11. JAVA高性能I/O设计模式
  12. AR、VR,到底哪个才是未来的发展趋势?
  13. 第一届腾讯社招广告大赛总结
  14. 益企工程云:成长型建筑企业专属的工程项目管理软件
  15. 未来两周目标计划---C++ and Disassembly(不积跬步无以至千里,不积小流无以成江海)
  16. 老站长心语:网站由小到大的建站经历
  17. 2012 Tokyo Regional C. One-Dimensional Cellular Automaton 矩阵快速幂
  18. CentOS 7重启报错:Entering emergency mode. Exit the shell to continue...
  19. OpenSCAP安装与使用
  20. 定义视频尺寸html,使HTML5视频海报与视频本身尺寸相同

热门文章

  1. SRS搭建webrtc直播一条龙教学!!!!!!
  2. 轮胎界内的“三维全能战士”,2022年如何乘胜追击?
  3. 如何将一个Jsp网站打包发布(发布为War文件)
  4. PVPGN 暗黑破坏神2 1.11b战网配置问题汇总
  5. 《褚时健传》读书笔记
  6. Openstack之Nova组件(一)——云主机调度
  7. RNA-seq 详细教程:详解DESeq2流程(9)
  8. eclipse克隆工作空间
  9. CH340N串口模块原理图
  10. 我的世界java版合成表_《我的世界》基础攻略 JAVA版合成系统详解