MySQL学习笔记

本文总阅读量
本文最后更新于2 分钟前,文中所描述的信息可能已发生改变。

NULL值的处理

  • 使用函数COALESCE(arg1,arg2,agr3,...)。其接收多个参数,返回其中不为 null 的值,全为 null则返回 null。
  • 使用IFNULL(arg1,arg2)函数,如果 arg1 为null 则返回 arg2 否则返回 arg1
  • 比较 null 值使用IS NULLIS NOT NULL<=>,其他比较符合比较 null 值都返回 null。

MySQL事务

事务必须满足:原子性、一致性、隔离性、持久性。MySQL中默认事务是自动提交的,使用SET AUTOCOMMIT=0;可以禁止当前会话事务自动提交,设置为1即开启自动提交;BEGIN;START TRANSACTION;可以显式的开启一个事务;SAVEPOINT savepoint_name;用于设置一个事务保存点;ROLLBACK TO SAVEPOINT savepoint_name;回滚到指定的保存点,类似快照一样。

ALTER语句

  • ALTER TABLE mytable ADD PRIMARY KEY (id);添加主键约束。
  • ALTER TABLE mytabel MODIFY id INT(4) AUTO_INCREMENT;添加自增约束。
  • ALTER TABLE mytable ADD COLUMN id INT(4) PRIMARY KEY AUTO_INCREMENT;添加一个不存在的列且设置主键与自增约束。
  • ALTER TABLE mytable DROP PRIMARY KEY;删除不含自增约束的主键约束。
  • ALTER TABLE mytable MODIFY id,DROP PRIMARY KEY;同时删除主键约束与自增约束。

可以使用DESC mytable;来查看表结构看是否修改成功。

索引

用于加快查找速度。

  • CREATE INDEX index_name ON mytable (id);给表mytable的id字段创建一个索引。CREATE UNIQUE INDEX可以创建唯一索引。
  • DROP INDEX index_name ON mytable;ALTER TABLE mytable DROP INDEX index_name;删除表 mytable 中索引名为 index_name 的索引。
  • SHOW INDEX FROM mytable;查看索引信息。

存储过程(MySql)

sql
DELIMITER $$
CREATE PROCEDURE name --存储过程名
(IN in_param INT,OUT out_param INT,INOUT inout_param INT) -- 参数列表 
BEGIN
    SELECT in_param;
    SET out_param=6;
    DECLARE temp INT; -- 定义存储过程中的变量,局部的在内部,使用关键字DECLARE
    SET temp = 8;
    SELECT temp;
END &&
DELIMITER ;

CALL name(12,@p); -- 调用存储过程,定义了一个用户变量p,全局的在外面定义,@定义用户变量
SHOW CREATE PROCEDURE name; -- 显示存储过程的定义,默认是当前数据库的
SHOW PROCEDURE STATUS; -- 显示系统中全部的存储过程
DROP PROCEDURE dbname.name; -- 删除dbname这个数据库中的存储过程name

复制表

sql
-- 法一 复制表的结构
CREATE TABLE new_tb SELECT * FROM old_tb WHERE 1=2;
CREATE TABLE new_tb LIKE old_tb;
SHOW CREATE TABLE tb_name; -- 显示创建表的完整语句,复制结果手动执行建表语句
-- 法二 复制表结构及其数据
CREATE TABLE new_tb SELECT * FROM old_tb;

DDL、DML、DQL、DCL

  • DDL(数据定义语言)
  • DML(数据操纵语言)
  • DQL(数据查询语言)
  • DCL(数据控制语言):比较少用,比如授权GRANT与取消授权REVOKE

TRUNCATE与DELETE

TRUNCATE和DROP一样属于DDL、用于删除表的数据而不改变表的结构。

  • truncate会重置水位线,高水位线会影响全表扫描,因为MySQL全表扫描时会扫描水位线以下的数据。而使用delete删除数据时水位线并不会下降,导致删除了数据查询效率反而没有提升。
  • truncate不会触发一些触发器。
  • 使用truncate删除的数据不能回滚,也可以说不需要支持回滚,删除效率高。

SQL优化

  • 使用慢查询来定位慢SQL
  • 使用 Explain 分析来查看SQL语句的执行过程,使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道 MySQL 是如何处理你的 SQL 语句的;通过查询出来的 type 字段可以知道 MySQL 是通过何种方式找到所需行的从而可以分析查询的性能。通过 key_len 字段可以知道索引被使用的情况,索引被使用的越多该值越大查询性能越好
DNS
Redis学习笔记
Valaxy v0.18.5 驱动 | 主题 - Yun v0.18.5
本站总访问量
本站访客数 人次
本站已运行0 天0 小时0 分0 秒后缀