全文本搜索,第二十三章 使用存储过程

发布时间:2019-10-06  栏目:数据  评论:0 Comments

  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操作
    • 使用表的组成都部队分而不是整张表
    • 护卫数量,只允许访问表的片段并不是整张表
    • 更动数据格式和象征,视图能够重返与底层表格式分化的数额

  • 视图的利用法则

    • 唯一命名
    • 视图数目未有范围
    • 创设视图须要权限
    • 视图能够嵌套,能够采纳其它视图来布局视图
    • 视图能够行使 O福特ExplorerDEENCORE BY,可是 SELECT 中的 O本田UR-VDEEvoque BY 会覆盖视图中的
      OSportageDE卡宴 BY
    • 视图无法引得,也不能够有提到的触发器或暗中同意值
    • 视图能够和表一同利用,能够联结表和视图
  • 采取视图

    • CREATE VIEW 创立视图
    • SHOW CREATE VIEW viewname; 查看所创办的视图
    • DROP 删除视图
    • 履新视图,可以先删除再次创下设,也能够采纳 CREATE O库罗德 PEPLACE VIEW
  • 利用视图简化复杂的合併:创制有的时候表,扩张灵活性

  • 用视图重新格式化检索出的数据:视图能够根据须要创制列名

  • 应用视图过滤不想要的数额:通过视图过滤数据后取代表使用

  • 运用视图简化总计字段

  • 视图平时用来检索,不用于创新

东西管理

去除存款和储蓄进程
DROP PROCEDURE productpricing;//当不设不经常报错
DROP PROCEDURE productpricing IF
EXISTS;//仅当存在时去除,荒诞不经时不报错
实行存款和储蓄进程
MySQL称存款和储蓄进程的试行为调用,由此MySQL实施存款和储蓄进程的讲话为CALL。CALL接受存款和储蓄进度的名字以及要求传递给它的放肆参数。
诚如,存款和储蓄进程并不显得结果,而是把结果重返给您钦定的变量。
变量:内存中一个特定的职位,用来有时存储数据。全体MySQL变量必须以@开首。

  1.简介

  存款和储蓄进度是积存在数据库目录中的一段表明性SQL语句。它疑似编制程序语言中的函数恐怕可进行代码块。通过证明一(Wissu)段可实行的SQL语句,不仅可以制止一行行的输入SQL语句,又能够将这段SQL语春神复使用。

  存储进度的独到之处:

  - 常常存款和储蓄进度有利于拉长应用程序的性质。

  -
存款和储蓄进度有利于减弱应用程序和数据库服务器之间的流量,因为应用程序不必发送七个冗长的SQL语句,而只好发送存款和储蓄进程的名称和参数。

  - 存款和储蓄的前后相继对任何应用程序都以可采纳的和晶莹剔透的。

  - 存款和储蓄的次第是平安的。

  存款和储蓄进程的后天不足:

  -
如若使用多量存款和储蓄进程,那么使用那一个囤积进程的种种连接的内部存储器使用量将会大大扩大。

  - 存款和储蓄进程的结构使得开荒具备复杂职业逻辑的仓库储存进程变得更其不方便。

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

  - 开荒和珍惜存储进程并不轻易。

第二十六章 处管事人务管理

  • 事务处理用来保护数据库的完整性,它有限支持成批的MySQL操作照旧完全实践,要么完全不试行

  • 不是独具的数据库引擎都援救事务管理

    • MyISAM 不支持
    • InnoDB 支持
  • 多少个术语

    • 事务 一组SQL语句
    • 回落 撤废钦点SQL语句
    • 付给 将未存款和储蓄的SQL语句结果写入数据库表
    • 保留点 指事务管理中设置的有时占位符
  • 支配事务管理

    • 关键在于将SQL语句组分解为逻辑块,并显明规定数据何时应该回降,曾几何时不应有回降
  • 事情起头 START TRANSACTION

  • 回退 ROLLBACK

    • ROLLBACK 只好在叁个事务管理Nelly用,在实行一条 START TRANSACTION
      命令之后
    • INSERT UPDATE DELETE 能够回降
    • SELECT CREATE DROP 不可能回落
  • 提交 COMMIT

    • 为了保险 SQL 操作不是被一些管理,能够投身工作块中拍卖
    • 在事务管理块中,提交不会包括的交由,供给动用 COMMIT 显著的提交
    • 除非事务块中全体语句都没有错实行,才会实践 COMMIT
  • 当 ROLLBACK 和 COMMIT 施行后,事务会自动关闭

  • 运用保留点

    • 简单的 ROLLBACK 和 COMMIT
      能够写入只怕裁撤所有的事务处理,更目不暇接的也许要某些交到或许回降
    • 增多占位符,纵然急需回降,能够回降到有个别占位符(保留点)
    • 创办保留点 SAVEPOINT delete;
    • 回降到保留点 ROLLBACK TO delete;

MYSQL:基础——事务管理

图片 1

  2、事务管理

第二十九歌 数据库维护

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

       
上边包车型地铁亲自过问操作,首先开始叁个事务,然后删除了表test_inn中的全部剧情,并查看表中的源委,展现表已被清空。但施行ROLLBACK回降事务后,重新查询表中的数据。表中的数码仍然还在:

2.COMMIT

说明:在事务管理块中,提交不会隐含地进行。为扩充驾驭的交由,使用COMMIT语句
实例:
  图片 2

饱含事物关闭:当COMMIT或ROLLBACK语句实践后,事务会自动关闭(以往的更换会隐含提交)。

九、字符集和核查顺序
CREATETABLE mytable
(
Column1 INT,
Column2 VARCHAR(0)
)DEAULT CHARACTER SET hebrew COLLATE hebrew_general_ci;
那条语句创造三个表,并且制订三个字符集和一个核查顺序
SHOW CHARACTE景逸SUV SET;//能够查看所支撑的字符集完整列表
SHOW COLLATION; //查看所协助的核对完整列表

  2.ACID特性

  事务有以下多少个职业属性的缩写ACID,平时被称之为:

  - 原子性:
指事务是三个不得再细分的办事单元,事务中的操作依旧都发生,要么都不爆发。

  - 一致性:
在事情初步从前和职业结束之后,数据库的完整性约束未有被毁损。那是说数据库事务无法破坏关周详据的完整性以及工作逻辑上的一致性。

  - 隔绝性:
七个业务并发访谈时,事务之间是与世隔膜的,二个专门的学业不应当影响别的工作运维效果。

  - 长久性:
在职业完结之后,该事务所对数据库所作的退换便漫长的保存在数据库之中,并不会被回滚。

第二十七章 全世界化和本地化

  • 字符集 字母和标识的联谊
  • 编码 字符集的中间表示
  • 查对 为规定的字符怎样相比的一声令下
  • 能够给一定的表只怕列定义字符集和核对,不钦定的话就应用数据库暗中同意

MYSQL入门上学之三:全文本搜索

4.改换暗中认可的付骑行为

  默许的MySQL行为是自动提交全部改换。换句话说,任曾几何时候你实行一条MySQL语句,该语句其实都以针对表实施的,并且所做的变动马上生效。为提醒MySQL不自行提交退换,须要采取以下语句:
  图片 3

图片 4

一、联结表

  数据仍使用前文中的数据。

第二十八章 安全治本

  • 访谈调控
    • 顾客对亟待的多少拥有特别的访问权
    • root是极品管理员,应该成立一密密麻麻的账号,开放分裂的权限,给有关的人口选择
  • 客商管理
    • MySQL的客户账号和新闻存款和储蓄在mysql表中
    • 创造客商
      • CREATE USER ben IDENTIFIED BY ‘p@$$wOrd’;
      • REMANE USER ben TO mark;
    • 删去用户
      • DROP USER mark;
    • 安装采访权限
      • 翻开顾客权限 SHOW GRANTS FO福睿斯 mark;
      • 使用 GRANT 设置权限
        • 要赋予的权位
        • 被授予权限的数据库也许表
        • 用户名
      • 接纳 REVOKE 撤废权限
      • GRANT 和 REVOKE 能够在几个档案的次序上主宰访谈权限
        • 整整服务器
        • 全副数据库
        • 特定的表
        • 特定的列
        • 特定的蕴藏进程
      • 改换密码 SET PASSWOEvoqueD FO奥迪Q5 mark = PASSWO瑞鹰D(‘123456’);
        • 不钦点客商名时,修改的是时下报到客商的密码

5、更动暗中认可的提工行为

3.施用保留点

说明:大约的ROLLBACK和COMMIT语句就能够写入或撤除所有的事务管理。不过,只是对简易的事务管理才具那样做,更复杂的事务管理恐怕需要有的交给或回降。
创造保留点:

   图片 5

展现出检索的数据
SELECT @pricehigh,@pricelow,@priceaverage;

  2、创立链接

 图片示例  链接方式 关键字 语句示例
  内连接 INNER JOIN … ON SELECT <select_list> FROM A INNER JOIN B ON A.key = B.key
左外连接 LEFT JOIN … ON SELECT <select_list> FROM A LEFT JOIN B ON A.key = B.key
左外连接 LEFT JOIN … ON … WHERE B.key IS NULL SELECT <select_list> FROM A LEFT JOIN B ON A.key = B.key WHERE B.key IS NULL
右外连接 RIGHT JOIN … ON SELECT <select_list> FROM A RIGHT JOIN B ON A.key = B.key
右外连接 RIGHT JOIN … ON … WHERE A.key IS NULL SELECT <select_list> FROM A RIGHT JOIN B ON A.key = B.key WHERE A.key IS NULL
全外连接 UNION

SELECT <select_list> FROM A LEFT JOIN B ON A.key = B.key

UNION

SELECT <select_list> FROM A RIGHT JOIN B ON A.key = B.key

全外连接 (WHER IS NULL) UNION … (WHER IS NULL)

SELECT <select_list> FROM A LEFT JOIN B ON A.key = B.key WHERE B.key IS NULL

UNION

SELECT <select_list> FROM A RIGHT JOIN B ON A.key = B.key WHERE A.key IS NULL

   用例:

-- 笛卡尔积:n * m
-- SELECT * FROM vendors, products;
SELECT orders.cust_id, cust_name FROM orders CROSS JOIN customers;-- 没有WHERE子句
-- 内连接
-- SELECT * FROM vendors, products WHERE vendors.vend_id = products.vend_id;
SELECT * FROM vendors INNER JOIN products on vendors.vend_id = products.vend_id;
-- 左外连接(a),根据A表相应字段取列
SELECT orders.cust_id, cust_name FROM orders LEFT JOIN customers on customers.cust_id = orders.cust_id;
-- 左外连接b,只取A表中无B表相应字段的列
SELECT vendors.vend_id, vend_name, vend_country  FROM vendors LEFT JOIN products on vendors.vend_id = products.vend_id where products.vend_id IS NULL ORDER BY vend_id;
-- 右外连接(a),同左外连接(a)
SELECT orders.cust_id, cust_name FROM orders RIGHT JOIN customers on customers.cust_id = orders.cust_id;
-- 右外连接(b),同左外连接(b)
SELECT customers.cust_id, cust_name FROM orders RIGHT JOIN customers on customers.cust_id = orders.cust_id WHERE orders.cust_id IS NULL;

-- 全外连接,两者id相等的行和不相等的行都保留
SELECT customers.cust_id, orders.order_num FROM orders LEFT JOIN customers on customers.cust_id = orders.cust_id
UNION
SELECT customers.cust_id, orders.order_num FROM orders RIGHT JOIN customers on customers.cust_id = orders.cust_id;
-- 全外连接,只保留两者id不相等的行,这里两个WHERE子句一样是因为customers的id字段完全包含orders中的字段
SELECT customers.cust_id, orders.order_num FROM orders LEFT JOIN customers on customers.cust_id = orders.cust_id WHERE orders.cust_id IS NULL
UNION
SELECT customers.cust_id, orders.order_num FROM orders RIGHT JOIN customers on customers.cust_id = orders.cust_id WHERE orders.cust_id IS NULL

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

  • 积累进度是一条只怕多条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;
    

mysql> show create table test_inn;  

支配事物处理

五、动用存款和储蓄进程
储存进度轻松的话,就是为日后的利用而保留的一条或多条MySQL语句的集纳。可将其身为批文件,纵然它们的效果与利益不只有限于批管理。
积攒进度有3个重视的功利:轻易、安全、高质量。
开创进度

  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  包含存储函数和存储过程的权限

第三十章 改革品质

  • 硬件
  • 内部存款和储蓄器分配、缓冲区大小
  • 体贴入微施行缓慢的历程
  • 检验找出一级的SQL语句
  • 储存过程平常比一条条实行sql要快
  • 连日采纳科学的数据类型
  • 无须检Sobi供给还多的数额
  • 理所必然使用索引
  • 利用SELECT + UNION 取代一名目大多复杂的 OCR-V 条件
  • 每条法则在一些法规下都会被打破

mysql> delete from test_inn;  

1.如何是东西处理

  事务管理(transaction
processing)可以用来保卫安全数据库的完整性,它保险成批的MySQL操作依然完全实践,要么完全不试行。
此地就须要采取事务管理了。事务处理是一种机制,用来保管必得成批施行的MySQL操作,以担保数据库不带有不完全的操作结果。利用事务管理,能够保险一组操作不会中途甘休,它们还是充作完全实行,大概完全不实践(除非显著提醒)。如果没有不当发生,整组语句提交给(写到)数据库表。倘诺发生错误,则开展回落(撤废)以平复数据库到有个别已知且安全的情况。

图片 6

  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.使用ROLLBACK

说明:ROLLBACK命令用来回落MYSQL语句
实例:
  图片 7

结果:终极一条SELECT语句展现该表不为空。
结论:
  1.ROLLBACK只还好四个事物管理内采用,即在实践一条START
TRANSACTION命令之后。
  2.事务管理用来管理INSERT、
UPDATE和DELETE语句。你不可能回降SELECT语句。

图片 8

  2、顾客权限管理

  MySQL8以上提供了role对象开展多客户权限管理。

/* GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user_specification [, user_specification] ...
    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
    [WITH with_option ...]
*/

-- 创建单个用户账户
-- CREATE USER username@localhost IDENTIFIED BY passwd
CREATE USER dbadmin@localhost IDENTIFIED BY 'pwd123';
-- 查看该用户权限
SHOW GRANTS FOR dbadmin@localhost;
-- 赋予该用户操作权限
GRANT ALL PRIVILEGES ON test.customer TO dbadmin@localhost;-- 可以到mysql.table_priv授权表中查看设置
-- 更新
FLUSH PRIVILEGES;
SHOW GRANTS FOR dbadmin@localhost;
SELECT * FROM mysql.user;
-- 删除权限
REVOKE ALL PRIVILEGES ON test.customer FROM dbadmin@localhost;

  dbadmin@localhost用来内定账户名和主机地址。

  GRANT子句设置顾客权限,包蕴对数据库级、表级、字段、查询语句等的设置。

权限 含义 全局 数据库 过程 代理
ALL [PRIVILEGES] 授予除了GRANT OPTION之外的指定访问级别的所有权限            
ALTER 允许用户使用ALTER TABLE语句 x x x      
ALTER ROUTINE 允许用户更改或删除存储程序 x x     x  
CREATE 允许用户创建数据库和表 x x x      
CREATE ROUTINE x x          
CREATE TABLESPACE 允许用户创建,更改或删除表空间和日志文件组 x          
CREATE TEMPORARY TABLES 允许用户使用CREATE TEMPORARY TABLE创建临时表 x x        
CREATE USER 允许用户使用CREATE USERDROP USERRENAME USERREVOKE ALL PRIVILEGES语句。 x          
CREATE VIEW 允许用户创建或修改视图 x x x      
DELETE 允许用户使用DELETE x x x      
DROP 允许用户删除数据库,表和视图 x x x      
EVENT 能够使用事件计划的事件 x x        
EXECUTE 允许用户执行存储过程/存储函数 x x        
FILE 允许用户读取数据库目录中的任何文件 x          
GRANT OPTION 允许用户有权授予或撤销其他帐户的权限 x x x   x x
INDEX 允许用户创建或删除索引 x x x      
INSERT 允许用户使用INSERT语句 x x x x    
LOCK TABLES 允许用户在具有SELECT权限的表上使用LOCK TABLES x x        
PROCESS 允许用户使用SHOW PROCESSLIST语句查看所有进程 x          
PROXY 启用用户代理            
REFERENCES 允许用户创建外键 x x x x    
RELOAD 允许用户使用FLUSH操作 x          
REPLICATION CLIENT 允许用户查询主服务器或从服务器的位置 x          
REPLICATION SLAVE 允许用户使用复制从站从主机读取二进制日志事件 x          
SELECT 允许用户使用SELECT语句 x x x x    
SHOW DATABASES 允许用户显示所有数据库 x          
SHOW VIEW 允许用户使用SHOW CREATE VIEW语句 x x x      
SHUTDOWN 允许用户使用mysqladmin shutdown命令 x          
SUPER 允许用户使用其他管理操作,如CHANGE MASTER TOKILLPURGE BINARY LOGSSET GLOBALmysqladmin命令 x          
TRIGGER 允许用户使用TRIGGER操作 x x x      
UPDATE 允许用户使用UPDATE语句 x x x x    
USAGE 相当于“无权限”          

第二十五章 使用触发器

  • 触发器是在事件发生时自动施行的一条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 触发器用于数据注解,AFTEEnclave 触发器用于查询数据
    • DELETE 触发器
      • 能够援引二个名叫 OLD 的虚构表,访谈被删除的行
    • UPDATE 触发器
      • 能够引用三个名叫 OLD 的设想表,访谈被更新从前的值
      • 能够援引三个名称叫 NEW 的设想表,访谈被更新之后的值

2.东西管理的要害术语:

• 事务(transaction)指一组SQL语句;
• 回落(rollback)指裁撤内定SQL语句的经过;
• 提交(commit)指将未存储的SQL语句结果写入数据库表;

保留点(savepoint)指事务管理中安装的近期占位符(placeholder),你能够对它揭露回降(与回落整个事务管理分裂)。

二、立异和删除数据 UPDATE DELETE

  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;

2、使用ROLLBACK

![](https://upload-images.jianshu.io/upload_images/1926574-8fff0cb9ef10dbf6.png)



![](https://upload-images.jianshu.io/upload_images/1926574-1a2ccb7f6f0e0098.png)



这里用CREATE
TRIGGER创建一个名为newproduct的新触发器。触发器可在一个操作发生之前或之后执行,这里给出了AFTER
INSERT,所以触发器将在INSERT语句成功后执行。这个触发器还制定了FOR
EACH ROW,因此代码对每个插入行执行。在这个例子中,文本Product
added将对每个插入的行显示一次。  
☆触发器按每个表每个时间每次的定义,每个表每个时间每次只能定义一个触发器,因此一个表最多支持6个触发器(INSERT,UPDATE和DELETE之前或之后)。  
3.删除触发器:  
DROP TRIGGER newproduct;  
4.1 INSERT触发器  
1)在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行;  
2)在BEFORE
INSERT触发器中,NEW中的值可以被更新(允许更改被插入的值)  
3)对于AUTO\_INCREMENT列,NEW在INSERRT执行之前包含0,在执行之后包含新的自动生成的值。  
CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW SELECT
NEW.ORDER\_num;  
4.2.DELETE触发器  
1)在DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行  
2)OLD中的值全部都是只读的,不能更新。



![](https://upload-images.jianshu.io/upload_images/1926574-cefe02efd309791e.png)


4.3update触发器  
1)可以用OLD的虚拟表访问以前的值,也可以用名为NEW的虚拟表访问新更新的值  
2)在BEFFORE UPDATE触发器中,NEW中的值可能也被更新  
3)OLD中的值全部都是只读的,不能更新

三、访谈调节和顾客权限管理

  内容摘自MySQL教程()

|    1 | 2012-12-12 |  

下边看二个一体化经过的榛子:

  3、视图

  视图是杜撰的表。它只含有使用时动态检索数据的查询,换言之,视图存款和储蓄查询语句。保存查询语句能够应用视图。视图的有的平整:

  - 与表名同样,视图必需独一命名。

  - 视图数目未有界定。

  - 为了创立视图,必需具有丰盛的拜见权限。

  - 视图能够嵌套。

  - 视图查询中不要选取GROUP BY。

  - 视图不能够引得,也不能够有关系的触发器或暗中认可值。

-- 创建视图
-- CREATE VIEW viewname AS SELECT *
CREATE VIEW productcustomers AS SELECT cust_name, cust_contact, prod_id FROM customers, orders, orderitems WHERE customers.cust_id = orders.cust_id AND orderitems.order_num = orders.order_num;

CREATE VIEW orderitemsexpanded AS SELECT order_num, prod_id, quantity, item_price, quantity*item_price AS expanded_price FROM orderitems;

-- 执行视图查询时会首先执行视图
SELECT cust_name, cust_contact FROM productcustomers WHERE prod_id ='FB';
SELECT * FROM orderitemsexpanded WHERE order_num = 20009;
-- 删除视图
-- DROP VIEW viewname;
DROP VIEW productcustomers;

十一、数据库维护
ANALYZE TABLE:用来检查表键是或不是准确
CHECK TABLE:用来针对广大主题素材对表举行检查

  1、存款和储蓄进度

有关链接:

七、采用触发器
1.触发器
触发器是MySQL响应以下任性语句而自动施行的一条MySQL语句(或放在BEGIN和END语句之间的一组语句):
DELETE INSERT UPDATE
2.创办触发器
创制触发器时,须求提交4条音讯:

二、存款和储蓄进程

为了赢得包蕴哪一天,由什么人创制等详细音讯的仓库储存进度列表,使用SHOW PROCEDURE
STATUS,而且可用LIKE钦定二个过滤形式,举个例子:
SHOW PROCEDURE STATUS LIKE ‘ordertotal’;

  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

MYSQL入门上学之一:基本操作

图片 9

一、多少个事务管理相关的术语

一、用INSERT INTO 插入数据

+———-+—————————-  

  1. 改换暗中认可的提农行为
    为提示MySQL不活动提交改换,必要采取以下语句:
    SET autocommit = 0;

| Table    | Create Table  

赋予bforta在crashcourse.*拥有SELECT权限。
能够用REVOKE撤除权限。

       
可是不用全部的数据库引擎都帮忙事务管理。MyISAM和InnoDB是三种最常使用的引擎。前面二个不匡助明显的事务管理管理,而后人协理。

图片 10

相关文章

留下评论

网站地图xml地图