本博客是【韩顺平讲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. 显卡不够时,如何训练大型网络
  2. ListView性能[译]
  3. ttlink无线打印服务器固件,TTLINK TT-180U1打印机服务器 TCP/IP添加打印机的教程
  4. 分布式、云原生技术之后,分布式云或成数字化转型新利器
  5. raid ahci模式哪个好_比群晖好用?威联通TR-004磁盘阵列外接盒使用详解
  6. debug assertion failed是什么意思?_如何使用 pdb 来性感 debug 你的 Python 代码?
  7. android百度地图地址解析失败怎么办,【百度地图API】当地址解析失败时,如何调用search方法查找地址...
  8. (转)200亿美元比特币找不到主人,这个邪恶职业一夜爆火
  9. Android编译构建,教程11:使用Android Studio编译构建behaviac
  10. 资源---2020考研---英语网站---资料3(考研英语,英语学习。宣言:自从用了这个英语网站,七大姑八大姨开始担心他家孩子比不过我了~~~~~~~~~FT中文网)
  11. Linux之sed流编辑器
  12. 关机时Ubuntu-Unattended upgrade in progress during shutdown
  13. 软件测试的类型有哪些?
  14. PHP - 什么是 PHP? 为什么用 PHP? 有谁在用 PHP?
  15. win10下的linux占用大小,详解Win10系统上使用Linux之前要知道的几件事
  16. Django学习笔记(五)
  17. 观点丨Fortinet谈ChatGPT火爆引发的网络安全行业剧变
  18. EJB3与EJB2架构对比
  19. 高大上的 NLE 非线性编辑是怎么一回事?
  20. Verilog D锁存器

热门文章

  1. 杰理之FM模块接口设计【篇】
  2. 【云原生】K8S--负载均衡详细介绍;什么是K8S的负载均衡?
  3. 计算机配置的内存的容量为4g,安装内存4g2g可用的原因和处理
  4. 拨号上网、热点分享问题
  5. 能ping通不能上网,可以用手机拨号上网
  6. 【小白装系统】——U盘法简介
  7. 2.创建一个商店的数据,记录客户及购物情况,有以下三个表组成
  8. 【论文笔记】FaceNet--Google的人脸识别
  9. Verizon 48.3亿美元收购雅虎互联网资产
  10. 对拉格朗日乘数法的理解