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');

posted @ 2018-11-12 14:28  井梅0709  阅读(123)  评论(0编辑  收藏  举报