MySQL复习

MySQL

SQL分类:

  • DDL数据定义语言,用来维护存储数据的结构。代表指令:create , drop , alter
  • DML 数据操纵语言,用来对数据进行操作。代表指令:insert , delete , update , select
  • DCL 数据控制语言,主要负责权限管理和事务。代表指令:grant , revoke , commit

1、数据库操作

  • 查询所有数据库:show databases;

  • 删除数据库:drop database [IF EXISTS] db_name;在这里插入图片描述

  • 使用数据库:use db_name;

  • 创建数据库:create database if not exists db_name character set utf8mb4;

2、表的操作:

1、 创建表:create table table_name(…);
在这里插入图片描述

2、删除表:

  • drop table table_name;

3、 查询所有表:

  • show tables;

4、查看表结构:

  • desc 表名;

5、 修改表结构:

  • alter table table_name add clumom 字段名 类型;

6、 新增数据:

  • 单行全列插入数据:intsert into table_name values(…);
  • 多行指定列插入数据:intsert into table_name(字段名) values(…),(…),(…);
    在这里插入图片描述

7、 修改数据:

  • update 表名 set 字段名 = 值 where…;
    在这里插入图片描述

8、清空数据:

  • delete from 表名 where …
    在这里插入图片描述

  • 删除整张表数据(但不会删除表):delete from for_delete;

9、 查询:

  • 全列查询:select * from 表名;
  • 指定列查询:select 列名 from 表名;(正确使用)
  • 表达式查询:select math+10 from 表名;(不用,禁止使用)
  • 别名查询:uname -> username select uname as username from 表名;
  • 聚合查询(where的后面不能出现聚合函数):
    count()
    sum()
    avg()
    max()
    min()

10、 去重:distinct

  • select distinct 列名 fiom 表名;

11、 排序:order by 默认升序

  • ASC升序(从小到大)
  • DESC降序(从大到小)
    在这里插入图片描述

12、 where查询
在这里插入图片描述
在这里插入图片描述

13、 分页查询:limit
在这里插入图片描述

  • limit 3,3 -> 查询3条数据 跳过前3条 -> 第2页

14、约束类型:
在这里插入图片描述

15、 查询(进阶) :多表查询

  • 内联查询:(笛卡尔积)select a.,b. from a inner join b on a.id = b.aid;(查询的是两张表共有的数据)
    阿里巴巴规定:禁止3张表以上的连表查询
  • 外联查询:
    左联查询:left join
    外联查询:right join
  • 子查询:select * from student where classid in (select classid form student where username = ‘鹏飞’);
  • 表的约束:
    物理外键 -> 逻辑外键
    物理删除 -> 逻辑删除
  • 表的关系:
    1对1(一张表)
    1对多(两张表)
    多对多(三张表

3、索引

1、普通索引:create index 索引名 on 表名(字段)
2、主键索引:无需创建显式索引
3、唯一索引:create unique index 索引名 on 表名(字段)
4、组合索引(最左匹配原则):
5、查看索引:show index from 表名;
6、删除索引:drop index 索引名 on 表名;

索引注意事项:
1、在生产服务器不要直接执行添加索引的操作(创建索引的过程非常耗时,且数据量大创建的时间就越长)。
2、对于多读(查询)的场景适合使用索引,而对于添加删除比较多的场景,那么索引就不适用。
3、避免使用查询的时候,不触发索引的查询。 比如在列上进行赋值运算。
问:什么情况下索引不会触发?
答:1、当对一个列(已经设置索引的列),进行赋值查询的时候。
2、避免使用like查询,当使用模糊查询的时候有可能不触发索引,比如当使用like‘%XXXX%’不会触发索引,当使用like‘XXXX%’是可以触发索引。
3、当使用的是组合查询,一定要注意遵循最左匹配原则
4、尽量避免使用or查询,有可能导致索引不生效。
5、不要使用!=<>

问:如何优化MySQL的性能?
1、查询比较多的关键列上加索引
2、开启慢查询日志,找到执行比较慢SQL,针对性的进行优化。
3、能使用主键索引的时候,尽量使用主键索引。
4、分表(垂直分隔)分库(水平分隔)
5、提高数据库的硬件配置,更换一个读写性更好的磁盘,更好的一个更大的内存

问:主键索引和普通索引的区别?
1、主键索引不需要显示创建。
2、主键索引不能删除,而普通索引可以。
3、主键索引查询更快,而普通索因为有回表查询,索引性能没有主键索引高

4、事务

  • 事物特性(ACID):
    (1)隔离性:并发事务执行时,隔离问题。
    (2)原子性:要么全部成功,要么全部失败。
    (3)持久性:事务执行完成之后,结果要一直保持下来。
    (4)一致性:事务执行前后,数据要保证是准确的。
  • 并发事务存在的问题:
    (1)脏读:事务A读取到了事务B未提交的数据,然后事务B回滚了。
    (2)不可重复读:事务A使用相同的查询条件。读取到了不一样的结果,因为这个过程中事务B修改了数据。
    (3)幻读:事务A将数据修改之后,事务B又添加了一条数据,导致事务A执行结果和预期不一致。
    问:不可重复读和幻读的区别:
    不可重复读的侧重点描述的修改操作,而幻读描述的添加或删除
  • 事务的隔离级别:
    在这里插入图片描述

(1)读未提交
(2)读已提交
(3)可重复读
(4)串行化
幻读问题的解决方案:
1、MVCC
2、gap间隙锁

5、JDBC编程

  • JDBC使用步骤总结
  1. 创建数据库连接Connection
  2. 创建操作命令Statement
  3. 使用操作命令来执行SQL
  4. 处理结果集ResultSet
  5. 释放资源
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值