Mysql存储引擎
Mysql 支持的存储引擎
1.存储引擎
- MyISAM
- InnoDB
- Memory
- CSV
- Archive
MyISAM:存储限制256TB,支持索引,表级锁定,数据压缩。
InnoDB: 存储限制64TB,支持事务和索引,索颗粒为行锁。
2.锁的分类
- 共享锁(读锁):在同一时间段内,多个用户可以读取同一个资源,读取过程中数据不会发生任何变化。
- 排它锁(写锁):在任何时候只能有一个用户写入资源,当进行写锁时会阻塞其他的读锁或者写锁操作。
3.锁颗粒
- 表锁:是一种开销最小的锁策略。
- 行锁:是一种开销最大的锁策略。
4.事务
事务:用于保证数据库的完整性。如:A用户给B用户转账200元。A用户减掉200,B用户增加200.
事务的特性:
- 原子性
- 一致性
- 隔离性
- 持久性
5.存储引擎的特点
修改存储引擎:
(1.) 修改mysql配置文件:default-storage-engine=engine
(2.)通过创建数据表命令来实现:
CREATE TABLE table_name (
...
)ENGINE=engine;
(3.) 修改数据表命令
ALTER TABLE table_name ENGINE = engine_name;
6.内置函数
字符串函数、数值函数、日期时间函数、加密函数。
(1.)创建自定义函数
CREATE FUNCTION function_name
RETURNS
{STRING|INTERGER|REAL|DECIMAL}
routine_body
(2.)函数体
函数体由合法的SQL语句构成,函数体可以是简单的SELECT和INSERT,如果为复合体则使用BEGIN...END语句,复合结构可以包含声明,循环,控制语句。
CREATE FUNCTION f1() RETURNS VARCHAR(30)
RETURN DATE_FORMAT(NOW(),‘%Y年%m月%d日 %H:%i分:%s秒‘);
SELECT f1(); -- 查看方法返回
DROP f1(); -- 删除方法
示例二:
CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
RETURNS FLOAT(10,2)UNSIGNED
RETURN (num1+num2)/2;
7.Mysql执行过程
graph LR
A(SQL命令) -->B(MySQL引擎)
B --> C{语法正确}
C --> |正确| D(可识别的指令)
D --> |执行| E(执行结果)
E --> |返回| F(客户端)
8.存储过程
(1.)存储过程的优点
- 增强SQL语句的功能和灵活性
- 实现较快的执行速度
- 减少网络流量
(2.)创建存储过程
CREATE
[DEFINER = {USER|CURRENT_USER}]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic...]routine_body
pro_parameter:
[IN|OUT|INOUT]param_name_type
COMMENT:注释
CONTAINS SQL:包含sql语句,但不包含独活写数据的语句
NO SQL:不包含SQL语句
READS SQL DATA:包含读数据的语句
MODIFIES SQL DATA:包含写数据的语句
SQL SECURITY{DEFINEER|INVOKER}知名谁有权限执行
(3.)调用存储过程
call sp_name([parameter[...]])
call sp_name[()]
(4.) 示例
DELIMITER // -- 修改默认的结束符号为//,执行完后改回分号。delimiter ;
CREATE PROCEDURE removedUserById(IN id INT UNSIGNED)
BEGIN
DELETE FROM USERS WHERE ID = id;
END
//
-- 执行调用 --
call removedUserById(3)
(5.)修改、删除存储过程
ALTER PROCEDURE ...
DROP PROCEDURE [IF EXISTS] sp_name