MySQL中输入语句的执行过程:
如果我们可以将上面的过程简化,吧语法分析或者编译等步骤简化,则可以将整个流程简化。
存储过程:
- 是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理;
- 增强SQL语句的功能和灵活性;
- 实现较快的执行速度;
- 减少网络流量
-
//创建存储过程 CREATE [DEFINER = {user | CURRENT_USER}] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body proc_parameter: [IN | OUT | INOUT ] param_name type //IN,表示该参数的值必须在调用存储过程时指定 //OUT,表示该参数的值可以被存储过程改变,并且可以返回 //INOUT,表示该参数的调用时指定,并且可以被改变和返回
//调用存储过程 CALL sp_name([parameter[,...]]) CALL sp_name[()]
-
//For example: CREATE PROCEDURE sp1() SELECT VERSION(); CALL sp1();
//For example: DELIMITER // CREATE PROCEDURE removeUserById(IN p_id INT UNSIGNED) BEGIN DELETE FROM test WHERE id = p_id; END // DELIMITER ; CALL removeUserById(3);
- 用@修饰的变量叫做用户变量,跟当前用户的客户端是绑定的。
- 存储过程较常用,一般独立的来执行,而函数可以作为其他SQL语句的组成部分来出现;
- 注意事项:
- 创建存储过程或者自定义函数时需要通过delimiter语句修改定界符;
- 如果函数体或过程提有多个语句,需要包含在BEGIN...END语句块中;
- 存储过程需要使用call来调用。
存储引擎:
MySQL可以将数据以不同技术存储在文件(内存)中,这种技术就成为存储引擎;
每一种存储引擎使用不同的存储机制、索引技巧、锁定水平,最终提供广泛且不同的功能。
MySQL主要包括五种存储引擎:MyISAM, InnoDB, Memory, CSV, Archive;
- 并发控制:当多个连接对记录进行修改时保证数据的一致性和完整性;
- 共享锁(读锁):在同一个时间段内,多个用户可以读取同一个资源,读取过程中数据不会发生任何变化。
- 排它锁(写锁):在任何时候只能有一个用户写入资源,当进行写锁时会阻塞其他的读锁或者写锁操作。
- 锁颗粒:
- 表锁,是一种开销最小的锁策略;
- 行锁,是一种开销最大的锁策略。
- 事务
- 事务用于保证数据库的完整性
- 事物的特性(ACID):原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)
- 索引
- 是对数据表中一列或多列的值进行排序的一种结构。