存储过程:

执行存储过程:CALL 过程名(@参数列表);

创建存储过程:

DELIMITER //

CREATE PROCEDURE 过程名(

  参数属性(IN/OUT/INOUT) 参数名 数据类型,

)

BEGIN

  SELECT 子句;等

  IN和INOUT类型的变量可以在语句中被直接使用

  OUT和INOUT类型的变量需要通过INTO关键字返回

  返回之后可以通过SELECT @变量名来访问结果。

END//

DELIMITER ;

通过临时修改终止符来保证子句终止符不会终止整个存储过程构造语句。(一般限于命令行工具)

删除存储过程:DROP PROCEDURE 过程名;

SHOW CREATE PROCEDURE 过程名;显示构造信息

前置-- 意为注释

DECLARE 局部变量名 数据类型 (DEFAULT可选默认值);

IF BOOLEAN型变量 THEN

  子句;

END IF;

%——————————————————————————————————————————————%

游标用于在检索出来的行中做对某些行的操作

定义游标:

CREATE PROCEDURE 过程名()

BEGIN

  DECLARE 游标名 CURSOR

  FOR

  SELECT 子句;

END;

打开游标:OPEN 游标名;

关闭游标:CLOSE 游标名;

使用游标访问数据:FETCH 游标名 INTO 变量名;

循环检索:

DECLARE CONTINUE HANDLER FOR 条件(如SQLSTATE '02000',意为未找到数据,这样可以遍历整个表) SET done=1;

REPEAT

  FETCH子句;

UNTIL done END REPEAT;

DECLARE的次序:局部变量->游标->句柄

通过在存储过程中使用游标和循环,可以对数据逐项进行操作,并存在一个新表中。

%——————————————————————————————————————————————————————%

触发器:在表发生更改时自动执行,只对DELETE,INSERT,UPDATE生效。

创建触发器:

CREATE TRIGGER 触发器名 执行时间(BEFORE/AFTER) 触发操作(DELETE/INSERT/UPDATE) ON 触发器关联表名(不支持视图和临时表)

(FOR EACH ROW可选) 触发器操作子句;

单一触发器对应单一子句(可以是BEGIN-END之间的多条)和单一事件,一个表最多2*3=6种事件,能定义6个触发器。

删除触发器:DROP TRIGGER 触发器名;

  • INSERT触发器
  • 在INSERT触发器内可以通过一个名为NEW的虚拟表访问被插入的行
  • 在BEFORE INSERT中也可以更新NEW中的值
  • 对AUTO_INCREMENT列,BEFORE时为0,AFTER为新的自动生成值
  • DELETE触发器
  • 通过OLD访问被删除的行
  • 不能更新OLD
  • BEFORE OLD更为保险
  • UPDATE
  • 同时具有NEW和OLD两虚拟表
  • 访问权限与以上两者保持一致

重要应用是创建审计跟踪至另一个表,类似于log

%——————————————————————%

管理事务处理

保证某项事务(一组SQL语句)被成批执行,未完成的事务将可能被回退。

事务开始:START TRANSACTION;

回退:ROLLBACK;回退至事务开始处

提交:COMMIT;直到事务正确的执行至COMMIT,其所做的所有更改才一次性生效

保留点:创建:SAVEPOINT 保留点名;

之后可以通过ROLLBACK TO来调整回退位置

一般的MySQL语句是默认自动提交的,如果要关闭这一选项,SET autocommit=0;

%——————————————————————————————————————%

使用字符集和校对顺序

SHOW CHARACTER SET;查看所有可用字符集

SHOW COLLATION; 显示所有可用校对及其对应 字符集,每个字符集可能不止一种校对

SHOW VARIABLES LIKE ‘character%’;查看所用字符集

SHOW VARIABLES LIKE ‘collation%’;查看所用校对

在CREATE TABLE时可以通过CHARACTER SET关键字和COLLATE关键字指定字符集和校对,根据位置(表定义末/列定义末)确定生效范围

为了ORDER效果,也可以在SELECT语句中使用

%————————————————————————————————————————%

安全管理:对不同的用户进行访问控制

用户信息存储在数据库mysql中

查看账号列表:SELECT user FROM user;

创建账号:CREATE USER 用户名 IDENTIFIED BY 密码;

用户重命名:RENAME USER 旧名 TO 新名;

删除用户账号:DROP USER 用户名;

查看用户权限:SHOW GRANTS FOR 用户名;

给予用户权限:GRANT 权限名 ON 库名.表名 TO 用户名;

取消用户权限:REVOKE 权限名 ON 库名.表名 TO 用户名;

更改密码:SET PASSWORD FOR 用户名 = Password(新密码);省略FOR用户名即更改自己密码

%————————————————————————————————————————%

数据库维护

  • 备份
  • 维护:ANALYZE TABLE 表名;CHECK  TABLE 表名;(支持多种针对选项)REPAIR TABLE,OPTIMIZE TABLE等
  • 启动问题:命令行启动,执行mysqld
  • 查看日志:错误日志,查询日志,二进制日志(更新语句),缓慢查询日志,都在data目录内

至此,学习MySQL(通过《MySQL必知必会》)就暂告一段落了。了解有余而实践不足也是学习过程中的一大问题,希望当需要使用时能够更快上手,有时间也可以 去刷一刷SQL的题目,锻炼一下语法。