2022-01-10 day67 MySQL 增删改 索引

今天的内容:

1.建库 建表

2.介绍 增删改

3.索引 Btree+

第1章 建表语句

1.建表语句

SQL语句:

2.引擎

InnoDB 默认新的引擎

MyISAM  mysql系统库用的是他

3.主键

PRIMARY KEY

每个表都必须包含一个主键列

主键特性:

唯一 不能重复

非空

自增

3.字符集

默认 latin1

常用 UTF8

推荐 utf8mb4 emoji

4.字段类型

数字类型:

整数:

tinyint  1字节  =  8位 = 00000000 - 11111111  = 2^8个  = 0  - 255    , -127-128   

int      4字节  =  32位                      = 2^32个 = 0  - 2^32-1  ,-2^31-2^31-1 ,10位数

bigint    8字节                                          0  - 2^64-1  ,-2^63-2^63-1 ,20位数

浮点数:

decimal(m,n)

字符串类型:

char(N)    :

N字符个数,最大不超过255

定长的字符串类型。

例如: char(10) ,最多存10个字符,只要10个字符以内,都10个字符长度的存储空间。剩余用空格填充。

varchar(M) :

M字符个数,最大不超过65535

变长的字符串类型。会额外占用1-2字节存储字符长度。255字符之内,额外1字节,255以上,额外2字节

例如: varchar(10),最多存10个字符,按需分配存储空间。

abc 3            =4

asdasdadasd 1000  =1002

5.建表语句

CREATE TABLE `school`.`linux`(

`id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '学号',

`name` CHAR(10) NOT NULL COMMENT '姓名',

`age` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年龄',

`ssex` ENUM('F','M','Y') NOT NULL DEFAULT 'Y' COMMENT '性别',

`address` VARCHAR(20) NOT NULL COMMENT '地址',

PRIMARY KEY (`id`) ) ENGINE=INNODB CHARSET=utf8mb4;

第2章 插入语句

第一种写法:

INSERT INTO `school`.`linux` (`id`, `name`, `age`, `ssex`, `address`)

VALUES ('1', '张亚', '29', 'M', '深圳南山区');

第二种写法:

INSERT INTO `school`.`linux`

VALUES ('1', '张亚', '29', 'M', '深圳南山区');

第三种写法:

INSERT INTO `school`.`linux` (`name`, `age`, `ssex`, `address`)

VALUES ('张亚', '29', 'M', '深圳南山区');

第3章 修改语句

1.修改表名-不要用

RENAME TABLE `school`.`linux` TO `school`.`linux7`;

2.修改列名-不要用

改列名:

ALTER TABLE `school`.`linux`

CHANGE `ssex` `sex`

ENUM('F','M','Y')

CHARSET utf8mb4

COLLATE utf8mb4_general_ci

DEFAULT 'Y'

NOT NULL

COMMENT '性别';

3.修改表数据-不要用

注意!!!修改表数据一定要加上限定条件!!!注意

UPDATE `school`.`linux7` SET `name` = '张亚男' WHERE `id` = '29';

4.增加字段

ALTER TABLE `school`.`linux7` ADD COLUMN `status`

ENUM('1','0') NOT NULL COMMENT '删除状态'

AFTER `address`;

第4章 删除语句-不要用

1.删数据

注意!!!删除表数据一定要加上限定条件!!!注意

DELETE FROM `school`.`linux7` WHERE `id` = '29';

2.伪删除

第一步: 增加一个状态字段

ALTER TABLE `school`.`linux7` ADD COLUMN `status`

ENUM('1','0') NOT NULL COMMENT '删除状态,0删除,1存在'

AFTER `address`;

第二步: 改造业务的查询语句

SELECT * FROM linux7 WHERE STATUS = '1';

第三步: 改造业务的删除逻辑-将删除替换为更新

UPDATE `school`.`linux7` SET `status` = '1' WHERE `id` = '1';

3.删字段-不要会

ALTER TABLE `school`.`linux7` DROP COLUMN `status`;

4.删表-不要会

DROP TABLE `school`.`linux7`;

5.删库-没教过

DROP DATABASE `school`;

第5章 索引

1.什么叫索引

假如表是一本书,索引就是这本书的目录

数据库索引的目的就是为了更快的找到我们要的数据

2.平衡树

BTREE

B+TREE

B++TREE

3.前提

1)如果表中设置了主键(例如ID列),自动根据ID列生成索引树。

2)如果没有设置主键,自动选择第一个唯一键的列作为聚簇索引

3)自动生成隐藏的聚簇索引。

4.构建过程

1)叶子节点: 存储数据行时就是有序的,直接将数据行的page作为叶子节点(相邻的叶子结点,有双向指针)

2)枝节点: 提取叶子节点ID的范围+指针,构建枝节点(相邻枝节点,有双向指针)

3)根节点: 提取枝节点的ID的范围+指针,构建根节点

5.查询语句

查询的语句条件为id列这样是最快的,因为这样直接就可以根据索引很快查到数据存储的位置

第6章 辅助索引

1.条件

需要人为创建辅助索引,将经常作为查询条件的列创建辅助索引,起到加速查询的效果。

2.功能

按照辅助索引列,作为查询条件时。

1.查找辅助索引树,得到ID值

2.拿着ID值回表(聚簇索引)查询

3.辅助索引生成过程

1.叶子节点:提取主键(ID)+辅助索引列,按照辅助索引列进行从小到大排序后,生成叶子节点。(相邻的叶子结点,有双向指针)

2.枝节点  :提取叶子节点辅助索引列的范围+指针,构建枝节点(相邻枝节点,有双向指针)

3.根节点  :提取枝节点的辅助索引列的范围+指针,构建根节点

第7章 索引应用

1.压测

mysql -uroot -padmin < t100w.sql

mysqlslap \

--defaults-file=/etc/my.cnf \

--concurrency=100 \

--iterations=1 \

--create-schema='test' \

--query="select * from test.t100w where k2='780P'" \

engine=innodb \

--number-of-queries=2000 \

-uroot -p123 \

-verbose -S /tmp/mysql_3306.sock

mysqlslap \

--defaults-file=/etc/my.cnf \

--concurrency=100 \

--iterations=1 \

--create-schema='test' \

--query="select * from test.t100w where id='780P'" \

engine=innodb \

--number-of-queries=200 \

-uroot -padmin \

-verbose -S /tmp/mysql_3306.sock

2.查看索引

desc t100w; 

show index from t100w;

3.创建辅助索引

select * from test.t100w where k2='780P'

alter table t100w add index idx_k2(k2);

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

推荐阅读更多精彩内容