《MySQL必知必会》读书笔记4

第二十二章 使用视图

  • 视图是一张虚拟表
  • 为什么使用视图
    • 重用SQL语句
    • 简化复杂的SQL操作
    • 使用表的组成部分而不是整张表
    • 保护数据,只允许访问表的部分而不是整张表
    • 更改数据格式和表示,视图可以返回与底层表格式不同的数据
  • 视图的使用规则

    • 唯一命名
    • 视图数目没有限制
    • 创建视图需要权限
    • 视图可以嵌套,可以利用其它视图来构造视图
    • 视图可以使用 ORDER BY,但是 SELECT 中的 ORDER BY 会覆盖视图中的 ORDER BY
    • 视图不能索引,也不能有关联的触发器或默认值
    • 视图可以和表一起使用,可以联结表和视图
  • 使用视图

    • CREATE VIEW 创建视图
    • SHOW CREATE VIEW viewname; 查看所创建的视图
    • DROP 删除视图
    • 更新视图,可以先删除再创建,也可以使用 CREATE OR PEPLACE VIEW
  • 利用视图简化复杂的联结:创建临时表,增加灵活性

  • 用视图重新格式化检索出的数据:视图可以根据需要创建列名

  • 利用视图过滤不想要的数据:通过视图过滤数据后代替表使用

  • 利用视图简化计算字段

  • 视图一般用于检索,不用于更新

第二十三章 使用存储过程

  • 存储过程是一条或者多条SQL语句的集合,类似于批文件

  • 使用存储过程的理由(简单、安全、高性能)

    • 简化复杂操作
    • 防止错误
    • 简化对变动的管理
    • 提高性能
  • 创建和使用存储过程都需要权限

  • 创建存储过程

    //创建一个名为productpricing的存储过程
    CREATE PROCECURE productpricing()
    BEGIN
        SELECT Avg(prod_price) AS priceaverage
        FROM products;
    END
    
  • 执行存储过程

    CALL productpricing (
        @pricelow,
        @pricehigh,
        @priceaverage
    );
    
  • 使用存储过程

    CALL productpricing();  
    
  • 删除存储过程

    DROP PROCEDURE productpricing IF EXISTS;
    

第二十四章 使用游标

  • 游标(cursor)是一个存储在MySQL服务器上面的数据库查询,可以在检索的结果集中滚动到某一行进行操作

  • 使用游标

    • 声明游标
    • 打开游标
    • 使用游标取出需要的行并处理
    • 关闭游标

第二十五章 使用触发器

  • 触发器是在事件发生时自动执行的一条MySQL语句

    • DELETE
    • INSERT
    • UPDATE
  • 创建触发器

    • 唯一的触发器名
    • 关联的表
    • 响应的活动(DELETE、INSERT或UPDATE)
    • 何时执行(处理之前还是之后)
    • 只有表才支持触发器
    • 触发器按每个表每个事件每次地定义
    • 每个表每个事件每次只允许一个触发器
    • 每个表最多支持6个触发器(INSERT UPDATE 和 DELETE 的之前和之后)

// 创建一个名为 newproduct 的触发器,在 products 表每次 INSERT 之后输出 'Product added'
CREATE TRIGGER newproduct AFTER INSERT ON products 
FOR EACH ROW SELECT 'Product added';

  • 删除触发器
    • DELETE TRIGGER newproduct;
  • 使用触发器
    • INSERT 触发器
      • 可以引用一个名为 NEW 的虚拟表,访问被插入的行
      • 通常 BEFORE 触发器用于数据验证,AFTER 触发器用于查询数据
    • DELETE 触发器
      • 可以引用一个名为 OLD 的虚拟表,访问被删除的行
    • UPDATE 触发器
      • 可以引用一个名为 OLD 的虚拟表,访问被更新以前的值
      • 可以引用一个名为 NEW 的虚拟表,访问被更新以后的值

第二十六章 管理事务处理

  • 事务处理用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行

  • 不是所有的数据库引擎都支持事务处理

    • MyISAM 不支持
    • InnoDB 支持
  • 几个术语

    • 事务 一组SQL语句
    • 回退 撤销指定SQL语句
    • 提交 将未存储的SQL语句结果写入数据库表
    • 保留点 指事务处理中设置的临时占位符
  • 控制事务处理

    • 关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退
  • 事务开始 START TRANSACTION

  • 回退 ROLLBACK

    • ROLLBACK 只能在一个事务处理内使用,在执行一条 START TRANSACTION 命令之后
    • INSERT UPDATE DELETE 可以回退
    • SELECT CREATE DROP 不能回退
  • 提交 COMMIT

    • 为了保证 SQL 操作不是被部分处理,可以放在事务块中处理
    • 在事务处理块中,提交不会隐含的提交,需要使用 COMMIT 明确的提交
    • 只有事务块中全部语句都正确执行,才会执行 COMMIT
  • 当 ROLLBACK 和 COMMIT 执行后,事务会自动关闭

  • 使用保留点

    • 简单的 ROLLBACK 和 COMMIT 可以写入或者撤销整个事务处理,更复杂的可能要部分提交或者回退
    • 添加占位符,如果需要回退,可以回退到某个占位符(保留点)
    • 创建保留点 SAVEPOINT delete;
    • 回退到保留点 ROLLBACK TO delete;

第二十七章 全球化和本地化

  • 字符集 字母和符号的集合
  • 编码 字符集的内部表示
  • 校对 为规定的字符如何比较的指令
  • 可以给特定的表或者列定义字符集和校对,不指定的话就使用数据库默认

第二十八章 安全管理

  • 访问控制
    • 用户对需要的数据具有适当的访问权
    • root是超级管理员,应该创建一系列的账号,开放不同的权限,给相关的人员使用
  • 用户管理
    • MySQL的用户账号和信息存储在mysql表中
    • 创建用户
      • CREATE USER ben IDENTIFIED BY 'p@$$wOrd';
      • REMANE USER ben TO mark;
    • 删除用户
      • DROP USER mark;
    • 设置访问权限
      • 查看用户权限 SHOW GRANTS FOR mark;
      • 使用 GRANT 设置权限
        • 要授予的权限
        • 被授予权限的数据库或者表
        • 用户名
      • 使用 REVOKE 撤销权限
      • GRANT 和 REVOKE 可以在几个层次上控制访问权限
        • 整个服务器
        • 整个数据库
        • 特定的表
        • 特定的列
        • 特定的存储过程
      • 更改密码 SET PASSWORD FOR mark = PASSWORD('123456');
        • 不指定用户名时,修改的是当前登录用户的密码

第二十九章 数据库维护

  • 备份数据
    • mysqldump
    • mysqlhotcopy
    • BACKUO TABLE 或者 SELECT INTO OUTFILE
  • 数据库维护
    • ANALYZE TABLE 检查表键是否正常
    • CHECK TABLE
    • OPTIMIZE TABLE
  • 诊断启动问题
    • --help 显示帮助
    • --safe-mode 装载减去某些最佳配置的服务器
    • --verbose 显示全文消息
    • --version 显示版本信息后退出
  • 查看日志文件
    • 错误日志 hostname.err
    • 查询日志 hostname.log
    • 二进制日志 hostname-bin
    • 缓慢查询日志 hostname-show.log 记录执行缓慢的任何查询,优化数据库时很有用

第三十章 改善性能

  • 硬件
  • 内存分配、缓冲区大小
  • 关注执行缓慢的进程
  • 试验找出最佳的SQL语句
  • 存储过程一般比一条条执行sql要快
  • 总是使用正确的数据类型
  • 不要检索比需求还多的数据
  • 合理使用索引
  • 使用SELECT + UNION 代替一系列复杂的 OR 条件
  • 每条规则在某些条件下都会被打破
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容