赞
踩
show databases;
select database();
create database [if not exists] $数据库名$ [character set utf8mb4] [collate utf8mb4_general_ci];
use $数据库名$;
drop database [if exists] $数据库名$;
show tables;
show table status;
desc $表名$
show create table $表名$
show full columns from $表名$
-- 语法格式 create table [if not exists] $表名$ ( $字段名$ $数据类型$ [约束] [comment $字段注释$], $字段名$ $数据类型$ [约束] [comment $字段注释$], ...... $字段名$ $数据类型$ [约束] [comment $字段注释$] ) engine = InnoDB character set = utf8mb4 collate = utf8mb4_general_ci comment = $表注释$; -- 示例 create table student ( id bigint unsigned not null auto_increment comment '主键id', name varchar(20) not null default '' comment '学生姓名', sex varchar(1) not null default '男' comment '学生性别:男,女', age tinyint(3) not null default 0 comment '学生年龄', score decimal(5, 2) default 0.00 comment '学生成绩', teacher_id bigint not null comment '教师主键id', gmt_create datetime not null default current_timestamp comment '数据创建时间', gmt_modified datetime not null default current_timestamp on update current_timestamp comment '数据修改时间', is_delete tinyint(1) not null default 0 comment '逻辑删除:0-未删除, 1-已删除', primary key (id) ) engine = InnoDB character set = utf8mb4 collate = utf8mb4_general_ci comment = '学生表';
alter table $表名$ add column $字段名$数据类型$ [约束] [comment $字段注释$];
alter table $表名$ modify column $字段名$ $数据类型$ [约束] [comment $字段注释$];
alter table $表名$ change $旧字段名$ $新字段名$ $数据类型$ [约束] [comment $字段注释$];
alter table $表名$ drop column $字段名$;
alter table $表名$ rename to $新表名$;
alter table $表名$ character set $字符集$;
alter table student auto_increment = $自增值$
drop table [if exists] $表名$;
truncate table $表名$
from—>where—>group by—>having—>select—>order by—>limit
select [distinct] [count(*)/count(1)/count(字段名)] [avg(字段名), max(字段名),min(字段名),sum(字段名)]$字段列表$
from $表名$ [as 别名]
[inner/left/right join 表名 [as 别名] on 条件] m
[where 条件列表]
[group by 分组字段列表]
[having 分组后条件列表]
[order by 排序字段列表 [asc/desc]]
[limit [起始索引] 数据条数]
# 插入一条数据,指定字段名
insert into $表名$ ($字段名1$, $字段名2$,...... ,$字段名n$) values ($值1$,$值2$,......,$值n$);
# 插入一条数据,表中所有字段
insert into $表名$ values ($值1$,$值2$,......,$值n$);
# 插入多条数据,指定字段名
insert into $表名$ ($字段名1$, $字段名2$,...... ,$字段名n$)
values ($值1$,$值2$,......,$值n$),
($值1$,$值2$,......,$值n$),
($值1$,$值2$,......,$值n$);
# 插入多条数据,表中所有字段名
insert into $表名$
values ($值1$,$值2$,......,$值n$),
($值1$,$值2$,......,$值n$),
($值1$,$值2$,......,$值n$);
update $表名$ set $字段1$ = $值1$, $字段2$ = $值2$,......,$字段n$ = $值n$ [where 条件];
delete from $表名$ [where 条件];
# 1代表自动提交 0代表手动提交
select @@autocommit;
# 1代表自动提交 0代表手动提交
set @@autocommit = 1;
start transaction或begin;
commit;
rollback;
数据库事务的隔离级别有4种,由低到高分别为Read Uncommited、Read Commited、Repeatable Read、Serializable。并发数据访问时可能会出现以下问题,3类数据读取问题(脏读、不可重复读、幻读)和2类数据更新问题(第1类丢失更新和第2类丢失更新)。
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 | √ | √ | √ |
读已提交 | × | √ | √ |
可重复读 | × | × | √ |
串行化 | × | × | × |
select @@transaction_isolation;
set [session | global] transaction isolation level [read uncommitted | read committed | repeatable read | serializable];
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gPeUcFlh-1665646331265)(mysql\读未提交.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xL4ObZZF-1665646331269)(mysql\读已提交.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Sqax2NrZ-1665646331273)(mysql\可重复读.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-utLzPoSV-1665646331280)(mysql\可重复读-幻读.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zMCVfYIj-1665646331283)(E:\Code\笔记\mysql\串行化.png)]
show engines;
InnoDB
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h8c5EPB6-1665646331287)(E:\Code\笔记\mysql\InnoDB结构.png)]
MyISAM
Memory
InnoDB、MyISAM、Memory对比
特点 | InnoDB | MyISAM | Memory |
---|---|---|---|
存储限制 | 64TB | 有 | 有 |
事务安全 | 支持 | 不支持 | 不支持 |
锁机制 | 行锁 | 表锁 | 表锁 |
B+Tree索引 | 支持 | 支持 | 支持 |
Hash索引 | 不支持 | 不支持 | 支持 |
全文索引 | 支持 | 支持 | 不支持 |
空间使用 | 高 | 低 | 不适用 |
内存使用 | 高 | 低 | 中等 |
批量插入速度 | 低 | 高 | 高 |
支持外键 | 支持 | 不支持 | 不支持 |
索引 | InnoDB | MyISAM | Memory |
---|---|---|---|
B+Tree | 支持 | 支持 | 支持 |
Hash | 不支持 | 不支持 | 支持 |
R-Tree | 不支持 | 支持 | 不支持 |
Full-Text | 支持 | 支持 | 不支持 |
分类 | 含义 | 特点 | 关键字 |
---|---|---|---|
主键索引 | 针对表中主键创建的索引 | 默认自动创建,只能有一个 | primary |
唯一索引 | 避免同一表中某数据列中的值重复 | 可以有多个 | unique |
常规索引 | 快速定位特定数据 | 可以有多个 | normal |
全文索引 | 全文索引查找的是文本中的关键字,而不是比较索引中的值 | 可以有多个 | fulltext |
分类 | 含义 | 特点 |
---|---|---|
聚集索引 | 将数据存储与索引放到一块,索引结构的叶子结点保留了行数据 | 必须有,而且只有一个 |
二级索引 | 将数据与索引分开存储,索引结构的叶子结点关联的是对应的主键 | 可以存在多个 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aH8JVqoO-1665646331292)(E:\Code\笔记\mysql\索引分类.png)]
create [unique | fulltext] index $index_name$ on $table_name$(column_name1,column_name2...);
show index from $table_name$;
drop index $index_name$ on $table_name$;
show global status like 'Com_______';
# 查看慢查询日志的状态
show variables like 'slow_query_log';
# 开启慢查询日志
set global slow_query_log = 1;
# 查看数据库是否支持profile操作
select @@have_profiling;
# 查看profiling状态
select @@profiling;
#开启profiling
set profiling = 1;
# 查看每一条sql耗时的基本情况
show profiles;
# 查看指定的sql各个阶段的耗时情况
show profile for query $query_id$
# 查看指定的sql的CPU使用情况
show profile cpu for query $query_id$
explain select $字段名$ from $表名$ where $条件$;
各字段含义
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lcsCHcT3-1665646331295)(E:\Code\笔记\mysql\explain.png)]
id:select查询的序列号,表示查询中执行select语句或者是操作表的顺序(id相同,执行顺序从上到下,id不同,值越大越先执行)
select_type
table:查询的表名
type:表示连接类型,性能由好到差分别是null,system,const,eq_ref,ref,range,index,all
possible_keys:显示可能应用在这张表上的索引,一个或多个
key:实际用到的索引,如果为null表示没有使用索引
key_len:表示索引中使用的字节数,该值为索引字段最大可能长度,并非实际使用长度
rows:MySQL认为必须要执行查询的次数,在InnoDB引擎的表中,是一个估计值,可能结果并不准确
filtered:查询返回结果的函数占需读取行数的百分比,filtered值越大越好
select * from $table_name$ use index($index_name$) $where语句$;
select * from $table_name$ ignore index($index_name$) $where语句$;
select * from $table_name$ force index($index_name$) $where语句$;
create index $index_name$ on $table_name$($column(n)$);
# 加全局锁
flush tables with read lock;
# 备份数据库
mysqldump -uroot -p1234 jdbc > D:/1.sql;
# 释放全局锁
unlock tables;
表级锁,每次操作锁住整张表,锁定粒度大,发生冲突的概率最高,并发度最低
分类
表锁
表共享读锁(read lock)
所有客户端只能进行读取数据, 当前客户端不能进行写操作,其他客户端写操作阻塞,待当前客户端释放锁之后进行写操作
表独占写锁(write lock)
当前客户端既能读取数据又能写入数据, 其他客户端读写操作阻塞,待当前客户端释放锁之后进行读写操作
# 加锁
lock tables $table_name$ read/write;
# 释放锁
unlock tables;
元数据锁(meta data lock,MDL)
意向锁
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。