==========
咒骂一句mysql必知必会,存储过程的代码是无法实现的,坑爹么?
==========
推荐大家看上面那本书,通熟易懂,看的时候,请先看最后的那一张,里面有几个表先建立起来,那么
你学的时候就可以用到了,该死我的现在才知道,所以在敲书上的代码的时候,都是自己设计的表。
---------------------
于是今天看好了,除了一个爽子,还是爽,因为这是我2年来看的唯一一本mysql的书。对sql语句有一个全面的了解的。
可能平时在写代码过程中更加好吧。
--------------------------
存储过程
使用的大多数SQL语句都是针对一个或者多个表的单条语句,并非所有操作都这么简单,经常会有一个完整的操作需要多条语句才能完成。
1.为了处理订单,需要核对以保证库存中有相应的物品
2.如果库存有物品,这些物品需要预定以便不能将她们再卖给别的人,并且要减少可用的物品数量以反映正确的库存量
3.库存中没有的物品需要订购,这需要与供应商进行某种交互
4.关于哪些物品入库和哪些物品退订,需要通知相应的客户
存储过程的优势的简单 爱情 可靠
确定是复杂 而且要权限
mysql执行存储过程叫做CALL,称为调用,所用用的CALL的关键词。
执行存储过程
CALL productpricing (
@pricelow,
@priceHigh,
@priceave
)
存储过程的调用可以存入参数,也可以不传入参数的
创建存储过程
CREATE PROCEDURE proce()
BEGIN
SELECT AVG(id) AS idave FROM test1
END
SELECT VERSION();
CREATE PROCEDURE pxx (
OUT a VARCHAR(50),
OUT b VARCHAR(50),
OUT c VARCHAR(50)
)
BEGIN
SELECT sname INTO a FROM tb_x ;
SELECT sname INTO b FROM tb_y ;
SELECT sname INTO c FROM tb_z ;
END ;
CALL pxx(
@a,
@b,
@c
)
SELECT @a 就可以返回a的结果了
CREATE PROCEDURE ordertoal (
IN inid INT ,
OUT outvalue VARCHAR(60)
)--这个是注释
BEGIN
SELECT sname FROM test1
WHERE id = inid
INTO outvalue;
END;
、
//
触发器的学习
mysql语句在需要时被执行,存储过程也是如此,但是,如果你想要某条语句在事件发生时自动执行,怎么办?例如,
每当增加一个顾客到某个数据表时,都检查其电话号码格式是否正确,州的缩写是否为大写
每当订购一个产品时,都从库存数量中减去订购的数量
无论何时删除一行,都在某个存档表中保留一个副本
所有的这些例子的共同之处就是他们都需要再某个表发生更改是自动处理,这确切的说就是触发器,触发器是mysql响应一下任意语句而
自动执行的一条SQL语句
delect
INSERT
UPDATE
其他mysql语句是不支持触发器的
创建触发器:
在创建触发器时,需要给出4条信息
1.唯一的触发器的名字
2.触发器关联的表
3.触发器应该响应的活动(DELETE INSERT UPDATE)
4.触发器何时执行 (处理之前还是之后)
CREATE TRIGGER newpre
AFTER INSERT ON producets
FOR
EACH ROW SELECT 'producet added'
CREATE TABLE tb_tr (
id INT NOT NULL,
sname VARCHAR(60)
)
CREATE TRIGGER newtri
AFTER INSERT ON tb_tr
FOR EACH ROW SELECT new.
SHOW CHARACTER SET;
SHOW COLLATION;
SELECT USER FROM USER;
USE mysql;
CREATE USER endual IDENTIFIED BY '123456';
SELECT * FROM USER;
SHOW GRANT FOR endual;
我们的国家控制着绝大部分的资源,他们圈养了暴力机器,然后让我们在水深火热中生活,
这样的社会,如果我们不努力,那么等待我们的将是贫困和艰难。所以,除了努力,我们这一代人没的选择。