2.使用

-- 创建存储过程
DELIMITER // -- DELIMITER // 和DELIMITER;用于划分一块范围来声明存储过程
CREATE PROCEDURE GetAllProducts()-- CRAET PROCEDURE 创建一个存储过程
   BEGIN-- 存储过程的主体的开始
   DECLARE id INT(20) DEFAULT 1003;-- DECLARE variable datatype(size) DEFAULT value,声明局部变量;它只能在BEGIN和END之间生效
    SET id = 1001;-- 变量赋值
   SELECT * FROM products WHERE vend_id = id;-- SQL语句
   END //-- 存储过程的主体的结束,结尾用//
DELIMITER ;

-- 调用存储过程
CALL GetAllProducts();
-- 删除存储过程
DROP PROCEDURE IF EXISTS `GetAllProducts`;

-- 设置参数
DELIMITER //
CREATE PROCEDURE GetProductsByVendId(IN id INT(20), OUT outcome VARCHAR(20))-- 参数默认前缀是IN,即只允许调用函数时给参数传递值;OUT则表示将存储过程的运行结果传递出去,它是个单值参数;
    BEGIN
    SELECT count(*) INTO outcome FROM products WHERE vend_id = id;
    END //
DELIMITER ;
CALL GetProductsByVendId(1003, @outcome);-- 不直接打印结果,而是把结果传递给了全局变量@outcome
SELECT @outcome;-- 设置全局变量可以用SET variable = value;

-- 条件语句
/* IF condition THEN 
    sql
ELSEIF condition THEN
    sql
...
ELSE 
    sql
END IF */

DELIMITER //
CREATE PROCEDURE GetPriceLevel(IN prod_id CHAR(10), OUT price_level VARCHAR(20))
    BEGIN
    DECLARE price DECIMAL(8,2);
    SELECT prod_price INTO price FROM products WHERE products.prod_id = prod_id;

    IF price <= 5 THEN
        SET price_level = 'cheap';
    ELSEIF (price > 5 AND price <= 10) THEN
        SET price_level = 'ordinary';
    ELSE
        SET price_level = 'expensive';
    END IF;
    END //
DELIMITER ;
CALL GetPriceLevel('ANV01', @price_list);
SELECT @price_list;

-- 循环语句
/* WHILE condition DO
   statements
END WHILE */
-- 函数 略
-- 游标 https://www.yiibai.com/mysql/cursor.htm

第二十三章 使用存款和储蓄进度

  • 积攒进程是一条或然多条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;
    

  1、存款和储蓄进程

第三十章 改良质量

  • 硬件
  • 内部存款和储蓄器分配、缓冲区大小
  • 关心施行缓慢的进度
  • 检查测试找寻顶级的SQL语句
  • 积攒进程相似比一条条施行sql要快
  • 连接选拔科学的数据类型
  • 不用检Sobi供给还多的数量
  • 理之当然施用索引
  • 行使SELECT + UNION 代替一多元复杂的 OCRUISER 条件
  • 每条准绳在少数标准下都会被打破

  1、子查询

  作为子查询的SELECT语句只好查询单个列。图谋检索几个列将回来错误。

-- 作为查询条件使用
-- 查看TNT2订单对应的客户ip(order表)
SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id='TNT2');
-- 根据TNT2订单的客户ip查看客户信息(cust表)
SELECT cust_name, cust_contact FROM customers WHERE cust_id IN (SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id='TNT2'));
-- 作为计算字段使用
-- 计算每个客户的订单数据
SELECT cust_name, cust_state, (SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS orders FROM customers ORDER BY cust_name;

第二十八章 安全治本

  • 访谈调整
    • 客户对亟待的数额具有十分的访谈权
    • root是最好管理员,应该创立一多级的账号,开放差异的权柄,给有关的人士利用
  • 客商管理
    • MySQL的顾客账号和音讯囤积在mysql表中
    • 创建客户
      • CREATE USER ben IDENTIFIED BY ‘p@$$wOrd’;
      • REMANE USER ben TO mark;
    • 删除客商
      • DROP USER mark;
    • 设置访问权限
      • 翻开客户权限 SHOW GRANTS FOVanquish mark;
      • 行使 GRANT 设置权限
        • 要赋予的权杖
        • 被给予权限的数据库大概表
        • 用户名
      • 利用 REVOKE 撤废权限
      • GRANT 和 REVOKE 能够在多少个等级次序上调节访谈权限
        • 整整服务器
        • 全副数据库
        • 特定的表
        • 特定的列
        • 一定的囤积进程
      • 更换密码 SET PASSWO凯雷德D FO凯雷德 mark = PASSWO卡宴D(‘123456’);
        • 不点名客商名时,修改的是当前登陆客商的密码

  1.概念

  事务管理(transaction
processing)用于保险SQL操作的完整性。它提供一种管理体制来应对SQL恐怕另外景况因素可能引致的分外结果。事务管理中的几个术语:

  - 事务(transaction),指一组SQL语句。

  - 回降(rollback),指撤废内定SQL语句的长河。

  - 提交(commit),指将未存储的SQL语句结果些人多少库表。

  -
保留点(savepoint),指事务管理中装置的近期占位符(placeholder),它可以回落。

  事务管理用来治本(能够回降)INSERT、UPDATE和DELETE语句,无法回落SELECT语句,也无法回降CREATE恐怕DROP操作。

  在MySQL中,事务开头运用COMMIT或ROLLBACK语句开首工作和得了。开始和得了语句的SQL命令之间产生了多量的事务。

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

  • 字符集 字母和标识的成团
  • 编码 字符集的个中表示
  • 查对 为规定的字符怎么样相比较的下令
  • 能够给一定的表只怕列定义字符集和核查,不点名的话就利用数据库暗中认可

一、联结表

  数据仍采纳前文中的数据。

第二十二章 使用视图

  • 视图是一张设想表
  • 缘何选用视图
    • 重用SQL语句
    • 简化复杂的SQL操作
    • 使用表的组成都部队分并非整张表
    • 护卫数量,只同意访谈表的一部分并非整张表
    • 改换数据格式和代表,视图能够回来与底层表格式分歧的数目

  • 视图的选拔准绳

    • 独一命名
    • 视图数目没有界定
    • 开创视图须要权限
    • 视图能够嵌套,能够采取其它视图来布局视图
    • 视图能够行使 ORubiconDE揽胜极光 BY,不过 SELECT 中的 OWranglerDE途胜 BY 会覆盖视图中的
      OLacrosseDE卡宴 BY
    • 视图无法引得,也无法有关联的触发器或私下认可值
    • 视图能够和表一起利用,能够联结表和视图
  • 动用视图

    • CREATE VIEW 创造视图
    • SHOW CREATE VIEW viewname; 查看所创立的视图
    • DROP 删除视图
    • 立异视图,能够先删除再次创下制,也足以动用 CREATE OOdyssey PEPLACE VIEW
  • 使用视图简化复杂的联结:成立有时表,扩展灵活性

  • 用视图重新格式化检索出的数目:视图能够依附需求成立列名

  • 接纳视图过滤不想要的多寡:通过视图过滤数据后取代表使用

  • 利用视图简化总计字段

  • 视图一般用于检索,不用于立异

  3.简约用例

-- MySQL默认出错自动回滚,没出错自动提交
BEGIN;
SAVEPOINT place;
INSERT INTO orders VALUES(20010, '2005-09-08 00:00:00', 10001);
ROLLBACK;-- ROLLBACK place
COMMIT

  在COMMIT提交以前,ROLLBACK语句来撤废事务中所做的种种职业,就算职业是成功的也能够撤除,它能够平素裁撤到业务的启幕。在COMMIT提交之后,只好动用DELETE,INSERT可能UPDATE语句,ROLLBACK是可怜的。

第二十四章 使用游标

  • 游标(cursor)是三个囤积在MySQL服务器上面包车型客车数据库查询,能够在物色的结果集中滚动到某一行开展操作

  • 应用游标

    • 声称游标
    • 开采游标
    • 行使游标抽出要求的行并处理
    • 关门游标

  1、访问调整

  当客户端连接到服务器时,MySQL访谈调控有八个阶段:

  -
接连验证:连接到MySQL数据库服务器的顾客端要求有一个灵光的顾客名和密码。其它,客商端连接的主机必得与MySQL授权表中的主机相相称。

  -
恳请验证:当连接成功创建后,对于顾客端发出的每种语句,MySQL会检讨顾客端是还是不是有所丰盛的权位来进行该特定语句。
MySQL能够检查数据库,表和字段品级的权限。

  MySQL安装程序自动创立二个名称为mysql的数据库。
mysql数据库满含八个重大的授权表(user、db、host、tables_priv和columns_priv),它们存款和储蓄了分歧等第上对顾客权限的安装。并可通过GRANT和REVOKE等话语直接操作那么些表。

表名 权限
mysql.user  包含用户帐户和全局权限列。MySQL使用user表来接受或拒绝来自主机的连接。 在user表中授予的权限对MySQL服务器上的所有数据库都有效
mysql.db  包含数据库级权限。MySQL使用数据库表来确定用户可以访问哪个数据库以及哪个主机。在db表中的数据库级授予的特权适用于数据库,所有对象属于该数据库,例如表,触发器,视图,存储过程等
mysql.table_priv  包含表级别权限,权限适用于表中所有列
mysql.columns_priv  授予的权限只适用于字段
mysql.procs_priv  包含存储函数和存储过程的权限

第二十楚辞 数据库维护

  • 备份数据
    • 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
      记录实行缓慢的别样查询,优化数据库时很有用

  1.简介

  存款和储蓄进度是累积在数据库目录中的一段注脚性SQL语句。它疑似编制程序语言中的函数大概可施行代码块。通过声多美滋段可进行的SQL语句,既可防止止一行行的输入SQL语句,又有啥不可将这段SQL语伏羲臣复使用。

  存款和储蓄进程的帮助和益处:

  - 日常存款和储蓄进程有利于抓好应用程序的天性。

  -
存款和储蓄进程有利于削减应用程序和数据库服务器之间的流量,因为应用程序不必发送多少个冗长的SQL语句,而不得不发送存款和储蓄进程的称谓和参数。

  - 存款和储蓄的程序对另外应用程序都是可选择的和透明的。

  - 存款和储蓄的次序是安全的。

  存款和储蓄进度的劣点:

  -
假使运用大批量囤积进度,那么使用那一个囤积进度的种种连接的内存使用量将会大大扩充。

  - 存款和储蓄进度的构造使得开辟具备复杂职业逻辑的积存进程变得愈加困难。

  - 很难调节和测量检验存款和储蓄进度。

  - 开拓和保证存款和储蓄进度并不轻巧。

第二十六章 管监护人务管理

  • 事务处理用来保安数据库的完整性,它保险成批的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;
网站地图xml地图