mysql必知必会03
视图
创建视图:
CREATE VIEW viewname AS select语句
查看视图:
SHOW CREATE VIEW viewname
删除视图:
DROP VIEW viewname
更新视图:
先用drop再用create
CREATE OR REPLACE VIEW
不能使用视图情况:
分组
联结
子查询
并
聚合函数
distinct
导出计算列
使用视图:
select * from viewname where ..
存储过程:为以后的使用而保存的一条或多跳mysql语句集合
使用原因:
简化复杂的操作
保证数据的完整性,防止错误
简化对变动的管理
提高性能
灵活
创建存储过程
CREATE PROCEDURE processname(
OUT p1 DECIMAL(8,2),//OUT用来从存储过程传出的一个值
IN pa DECIMAL(8,2), //IN用来从存储过程传入的一个值
INOUT ph DECIMAL(8,2), //INOUT对存储过程传入和传出
)
BEGIN
select语句;
END;
DELIMITER
CREATE PROCEDURE processname()
BEGIN
select语句;
END
DELIMITER;
# delimiter 作为新的语句结束分隔符
执行存储过程
CALL processname(@参数1,@参数2,...)
# 执行之后需要select查一下
使用存储过程
select @参数1,@参数2..;
查看存储过程
SHOW CREATE PROCEDURE processname;
查看过程状态:
SHOW PROCEDURE STATUS LIKE processname;
# like用于过滤
删除存储过程
DROP PROCEDURE processname;
游标
游标:需要在检索出来的行中前或后退一行或多行
# 只能用于存储过程和函数
使用:
必须声明定义,定义要使用的select语句
一旦声明,必须打开游标以供使用
对于填有数据的游标,根据需要去除各行
游标结束使用时必须关闭游标
创建游标:DECLARE
CREATE PROCEDURE processname()
BEGIN
DECLARE cursorname CURSOR
FOR
select语句;
END;
打开游标
OPEN cursorname;
关闭游标:
CLOSE cursorname;
使用游标数据:
FETCH cursorname INTO o;
触发器:mysql响应delete、insert、update中任意语句而自动执行的一条mysql语句
需要的信息:
唯一的触发器名
触发器关联的表
触发器应该响应的活动
触发器何时执行
创建:CREATE TRIGGER
示例:
CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT 'Product added';
# 仅支持表,视图和临时表不支持触发器
删除:DROP TRIGGER newproduct
使用:
INSERT触发器
在insert触发器中,可引用一个名为NEW的虚拟表,访问被插入的行
在BEFORE INSERT触发器中,NEW中的值也可以被更新
对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成值
示例:CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROWS SELECT NEW.order_num;
DELETE触发器
在DELETE触发器代码中,可引用一个名为OLD的虚拟表,访问被删除的行
OLD中的值全部都是只读的,不能更新
UPDATE触发器
在DELETE触发器代码中,可引用一个名为OLD的虚拟表访问以前的值,引用一个名为NEW的虚拟表访问新更新的值
在BEFORE UPDATE出发其中,NEW中的值可能被更新
OLD中的值全都是只读的,不能更新
管理事务处理
事务处理可以用来维护数据库的完整性,它保证呈批的mysql操作要么完全执行,要么完全不执行
InnoDB支持事务,MySAM不支持
术语:
事务:transaction
回退:rolllback
提交:commit
保留点:savepoint 指事务处理中设置的临时占位符,可以对它发布回退
控制事务处理
开始:START TRANSACTION
使用ROLLBACK
使用COMMIT
使用保留点:SAVEPOINT savename;
回退部分事务处理:ROLLBACK TO savename;
更改默认的提交行为:
SET autocommit=0; # 设置为不自动提交
全球化和本地化
字符集和校对顺序
字符集:字母和符号的集合
编码:某个字符集成员的内部表示
校对:规定字符如何比较的指令
使用字符集和校对顺序
查看字符集:
SHOW CHARACTER SET;
SHOW VARIABLES LIKE 'character%';
查看所支持校对的完整列表
SHOW COLLATION
SHOW VARIABLES LIKE 'colltaion%';
安全管理
访问控制:需要给用户提供他们所需的访问权且仅提供他们所需的访问权
管理用户:
查询用户:
use mysql;
select user from user;# 查询用户账号
创建用户账号:
CREATE USER ben IDENTIFIED BY 'P@$$w0rd'
# IDENTIFIED BY 'P@$$w0rd'给出一个口令 //识别
重命名:rename user ben to bforta;
删除用户账号:drop user bforta
设置访问权限 grant
查询赋予用户账号的权限
show grants for bforta
# usage on *.*:表示根本没有权限
设置访问权限需要给出的信息
要授予的权限
被授予访问权限的数据库或表
用户名
示例:grant select on database.* to user;
撤销特定的权限:
示例:revoke select on database.* to user;
控制访问权限的层次:
整个服务器:grant all和revoke all
整个数据库:on database.*
特定的表:on database.table;
特定的列
特定的存储过程
更改口令:
set password for user =password('password');