关于mysql的笔记
- 触发器,存储过程
- mysql用户,权限
- 存储引擎
- 缓存,索引
官网链接
- https://dev.mysql.com/ mysql
- https://mariadb.com/ mariadb
触发器 TRIGGER
- 触发形式:事件
- 创建权限:root用户
- 查看:show triggers
- 删除: drop trigger trigger_name
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW
trigger_body
# CREATE TRIGGER 触发器名称 事件前后 触发条件ON 触发表(不是被触发的表) FOR EACH ROW 触发事件
存储过程 PROCEDURE
- 提前编译完成后的方法,提高运行速度和降低网络传输大小
CREATE PROCEDURE sp_name ( [IN|OUT|INOUT])
begin
中间代码
end
- 查看存储过程列表 SHOW PROCEDURE STATUS;
- 查看存储过程的定义 SHOW CREATE PROCEDURE sp_name;
- 调用 CALL sp_name(更具定义决定是否带参数)
- 删除存储过程 DROP PROCEDURE sp_name
- 简单描述一下,毕竟存储过程详细到类似一种基础的语言了
- 贴一个详细存储过程讲解的https://blog.csdn.net/abzhaozuowenab21/article/details/12836529
用户管理
- mysql 元数据库
- 系统授权表 db, host, user,columns_priv, tables_priv, procs_priv, proxies_priv
- 默认账号,root本机,匿名用户
- 创建用户:
create user 'jus'@"192.168.47.%" identified by password("123456 ")
- 重命名: a 改为 b,删除用户
rename user a to b
drop user 'user'@'host'
- 忘记管理员密码的解决办法:
1. vim /etc/my.cnf
[mysqld]
skip-grant-tables # +
skip-networking # +
2. systemctl restart [mysqld |mariadb.server]
3. mysql ; /umysql;update user set password=password("123456") where [ user = "root" | host="::1" ]
4. exit
5. vim /etc/my.cnf
[mysqld]
skip-grant-tables # -
skip-networking # -
6. systemctl restart [mysqld |mariadb.server]
7. mysql -uroot -p123456
权限管理 DCL
- 官方版本提示制定权限与创建用户一起做的操作后面已经不再推荐使用
- 创建+授权 简单最高权限范例
grant all privileges on *.* to justin@192.168.47.%[identified by password("123456")] [ with grant option] ;
flush privileges; # 刷新配置文件或者重启mysql
- all 所有权限
- . 所有库所有表
- justin@ 192.168.47.% 用户@主机
- identified by password("123456") 创建并指定这个密码
- [grant option] 是否能够拥有授权其他用户的权限
- https://dev.mysql.com/doc/refman/8.0/en/grant.html 贴个mysql8.0官方文档很清晰
- 取消授权
REVOKE DELETE ON *.* FROM justin@'192.168.47.%';
-
https://dev.mysql.com/doc/refman/5.7/en/revoke.html 贴官方文档取消授权部分
-
***mysql的权限生效在两种情况下才会生效: 重启服务 restart,重载配置文件 flush privileges
存储引擎
- MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的 存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力,此种技术称为存储擎,
- 诸多存储引擎中的重要存储引擎 MYISAM INNODB 简述,可去前面给的官网进行详细查看
存储引擎: myisam innodb
事务 X y
锁 表级 行级
阻塞 读、写: 整表阻塞 读锁: 阻塞写 ,写锁:阻塞读写
高并发 X Y
文件 数据,定义,索引 数据+索引,定义(5.5前需要声明单独存储)
优势 读取速度 崩溃恢复
···
管理存储引擎
- 查看支持的存储引擎:
show enginesG
- 查看当前使用的存储引擎
show variables like '%storage_engine%';
- 修改默认存储引擎:
vim /etc/my.cnf
default_storage_engine= InnoDB
- 查看表使用的存储引擎
show table status [from db_name | like ' tb_name ' ];
- 设置表的存储引擎
[CREATE TABLE tb_name(... ) ENGINE=InnoDB; | ALTER TABLE tb_name ENGINE=InnoDB; ]
database mysql
- 是mysql的核心数据库,类似于Sql Server中的master库,主要负责存储数据库的用户、权限设置、关
键字等mysql自己需要使用的控制和管理信息 - performance_schema数据库,主要用于收集数据库服务器性能参数
- information_schema数据库, 虚拟数据库,访问数据库元数据的方式,即数据的数据。比如数据库名或表名,列类型,访问权限(更
加细化的访问方式)
服务器配置和状态
- 服务器选项、系统变量和状态变量引用
<!--mysql -->
<a herf="https://dev.mysql.com/doc/refman/5.7/en/server-option-variable-reference.html"> mysql<a/>
<!--mariadb -->
<a herf="https://mariadb.com/kb/en/library/full-list-of-mariadb-options-system-and-status-variables/"> mariadb<a/>
- 外部环境下查看选项:
选项列表:
[root@mysql ~] mysqld --help --verbose
本机默认配置:
[root@mysql ~] mysqld --print-defaults
- 服务器选项可在配置文件中设置:
[root@mysql ~] vim /etc/my.cnf
[mysqd]
skip_name_resolve=1
- 系统变量
- 查看
/*全局:*/
MariaDB [(none)]> SHOW GLOBAL VARIABLESG
/*会话*/
MariaDB [(none)]> SHOW SESSION VARIABLESG
/*具体变量*/
MariaDB [(none)]>SELECT @@VARIABLES;
- 修改变量值
/*方法1*/
MariaDB [(none)]> SET [GLOBAL|SESSION] system_var_name=value;
/*方法2*/
MariaDB [(none)]> SET @@[GLOBAL|SESSION] . system_var_name=value;
- 服务器状态变量
/*查看系统状态值*/
MariaDB [(none)]> SHOW [GLOBAL|SESSION] STATUS;
查询缓存
- 缓存SELECT操作或预处理查询的结果集和SQL语句,当有新的SELECT语句或预处理查询语句请求,
先去查询缓存,判断是否存在可用的记录集,判断标准:与缓存的SQL语句,是否完全一样,区分大小
写,基本利用的哈希值做比对
https://mariadb.com/kb/en/library/server-system-variables/#query_cache_type
https://dev.mysql.com/doc/refman/5.7/en/query-cache-configuration.html
索引 很重要
- 是排序的快速查找的特殊数据结构,定义作为查找条件的字段上,又称为键key,索引通过存储
引擎实现 - 索引可以降低服务需要扫描的数据量,减少了IO次数索引可以帮助服务器避免排序和使用临时表 索引可以帮助将随机I/O转为顺序I/O
- https://www.cnblogs.com/sujing/p/11110292.html 关于索引讲解较容易理解,