一.触发器

对某个表进行【增/删/改】操作的前后如果希望触发某个特定的行为时,可以使用触发器,触发器用于定制用户对表的行进行【增/删/改】前后的行为。

创建视图

# 插入前
CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
BEGIN
    ...
END # 插入后
CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
BEGIN
    ...
END # 删除前
CREATE TRIGGER tri_before_delete_tb1 BEFORE DELETE ON tb1 FOR EACH ROW
BEGIN
    ...
END # 删除后
CREATE TRIGGER tri_after_delete_tb1 AFTER DELETE ON tb1 FOR EACH ROW
BEGIN
    ...
END # 更新前
CREATE TRIGGER tri_before_update_tb1 BEFORE UPDATE ON tb1 FOR EACH ROW
BEGIN
    ...
END # 更新后
CREATE TRIGGER tri_after_update_tb1 AFTER UPDATE ON tb1 FOR EACH ROW
BEGIN
    ...
END
create trigger <trigger_name>
{before | after}
{insert | update | delete}
ON table_name
for each row
<触发的sql语句>
--查看当前mysql中有哪些触发器
show triggers;
delimiter //
CREATE TRIGGER tri_before_insert_tb1 BEFORE INSERT ON tb1 FOR EACH ROW
BEGIN IF NEW. NAME == 'alex' THEN
INSERT INTO tb2 (NAME)
VALUES
('aa')
END
END//
delimiter ;

insert前触发器

delimiter //
CREATE TRIGGER tri_after_insert_tb1 AFTER INSERT ON tb1 FOR EACH ROW
BEGIN
IF NEW. num = 666 THEN
INSERT INTO tb2 (NAME)
VALUES
(''),
('') ;
ELSEIF NEW. num = 555 THEN
INSERT INTO tb2 (NAME)
VALUES
(''),
('') ;
END IF;
END//
delimiter ;

insert后触发器

特别的:NEW表示即将插入的数据行,OLD表示即将删除的数据行

1.2 删除触发器

DROP TRIGGER tri_after_insert_tb1;

1.3 使用触发器

二.视图

  视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,并可以将其当作表来使用。

2.1 创建视图

  aaarticlea/png;base64,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" alt="" />

create view v1 as select score.sid,score.student_id,score.corse_id,score.number,student.sname,course.cname,teacher.tname from score 

left join student on score.student_id = student.sid left join course on score.corse_id = course.cid 

left join teacher on course.tearch_id = teacher.tid;

aaarticlea/png;base64,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" alt="" />

引用视图:

select * from v1;

查看视图的定义内容:

show create view v1;

删除视图

drop view v1;

三.存储过程

存储过程是一个SQL语句集合,当主动去调用存储过程时,其中内部的SQL语句会按照逻辑执行。

存储过程通常有以下优点:

(1).存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

(2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。

(3).存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

(4).存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。

(5).存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。

3.1 创建存储过程

-- 创建存储过程

delimiter //
create procedure p1()
BEGIN
select * from t1;
END//
delimiter ; -- 执行存储过程 call p1()

创建存储过程

1.对于存储过程,可以接收参数,其参数有三类:

  • in          仅用于传入参数用
  • out        仅用于返回值用
  • inout     既可以传入又可以当作返回值

2. 过程体的开始与结束使用BEGIN与END进行标识

3.DELIMITER //和DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原

4. 注释

MySQL存储过程可使用两种风格的注释

双模杠:--

该风格一般用于单行注释

c风格: 一般用于多行注释

-- 创建存储过程
delimiter \\
create procedure p1(
in i1 int,
in i2 int,
inout i3 int,
out r1 int
)
BEGIN
DECLARE temp1 int;
DECLARE temp2 int default 0; set temp1 = 1; set r1 = i1 + i2 + temp1 + temp2; set i3 = i3 + 100; end\\
delimiter ; -- 执行存储过程
DECLARE @t1 INT default 3;
DECLARE @t2 INT;
CALL p1 (1, 2 ,@t1, @t2);
SELECT @t1,@t2;

有参数存储过程

3.2 删除存储过程

drop procedure proc_name;

3.3 执行存储过程

-- 无参数
call proc_name() -- 有参数,全in
call proc_name(1,2) -- 有参数,有in,out,inout
DECLARE @t1 INT;
DECLARE @t2 INT default 3;
call proc_name(1,2,@t1,@t2)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='t1')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 执行存储过程
cursor.callproc('p1', args=(1, 22, 3, 4))
# 获取执行完存储的参数
cursor.execute("select @_p1_0,@_p1_1,@_p1_2,@_p1_3")
result = cursor.fetchall() conn.commit()
cursor.close()
conn.close() print(result)

pymysql执行存储过程

四.函数

  MySQL中提供了许多内置函数,例如:

CHAR_LENGTH(str)
返回值为字符串str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。
对于一个包含五个二字节字符集, LENGTH()返回值为 10, 而CHAR_LENGTH()的返回值为5。 CONCAT(str1,str2,...)
字符串拼接
如有任何一个参数为NULL ,则返回值为 NULL。
CONCAT_WS(separator,str1,str2,...)
字符串拼接(自定义连接符)
CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。 CONV(N,from_base,to_base)
进制转换
例如:
SELECT CONV('a',16,2); 表示将 a 由16进制转换为2进制字符串表示 FORMAT(X,D)
将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若 D 为 0, 则返回结果不带有小数点,或不含小数部分。
例如:
SELECT FORMAT(12332.1,4); 结果为: '12,332.1000'
INSERT(str,pos,len,newstr)
在str的指定位置插入字符串
pos:要替换位置其实位置
len:替换的长度
newstr:新字符串
特别的:
如果pos超过原字符串长度,则返回原字符串
如果len超过原字符串长度,则由新字符串完全替换
INSTR(str,substr)
返回字符串 str 中子字符串的第一个出现位置。 LEFT(str,len)
返回字符串str 从开始的len位置的子序列字符。 LOWER(str)
变小写 UPPER(str)
变大写 LTRIM(str)
返回字符串 str ,其引导空格字符被删除。
RTRIM(str)
返回字符串 str ,结尾空格字符被删去。
SUBSTRING(str,pos,len)
获取字符串子序列 LOCATE(substr,str,pos)
获取子序列索引位置 REPEAT(str,count)
返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。
若 count <= 0,则返回一个空字符串。
若str 或 count 为 NULL,则返回 NULL 。
REPLACE(str,from_str,to_str)
返回字符串str 以及所有被字符串to_str替代的字符串from_str 。
REVERSE(str)
返回字符串 str ,顺序和字符顺序相反。
RIGHT(str,len)
从字符串str 开始,返回从后边开始len个字符组成的子序列 SPACE(N)
返回一个由N空格组成的字符串。 SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len)
不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值。 mysql> SELECT SUBSTRING('Quadratically',5);
-> 'ratically' mysql> SELECT SUBSTRING('foobarbar' FROM 4);
-> 'barbar' mysql> SELECT SUBSTRING('Quadratically',5,6);
-> 'ratica' mysql> SELECT SUBSTRING('Sakila', -3);
-> 'ila' mysql> SELECT SUBSTRING('Sakila', -5, 3);
-> 'aki' mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);
-> 'ki' TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) TRIM(remstr FROM] str)
返回字符串 str , 其中所有remstr 前缀和/或后缀都已被删除。若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则假设为BOTH 。 remstr 为可选项,在未指定情况下,可删除空格。 mysql> SELECT TRIM(' bar ');
-> 'bar' mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
-> 'barxxx' mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
-> 'bar' mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
-> 'barx'

部分内置函数

4.1 自定义函数

语法:

Create function function_name(参数列表)

    returns返回值类型

    函数体内容

注:

  • 函数名:应该合法的标识符,并且不应该与已有的关键字冲突。一个函数应该属于某数据库,可以使用db_name.funciton_name的形式执行当前函数所属数据库

   ,否则默认为当前数据库。

  • 参数列表:可以有一个或者多个函数参数,甚至是没有参数也是可以的。对于每个参数,由参数名和参数类型组成。
  • 返回值:指明返回值类类型
  • 函数体:自定义函数的函数体由多条可用的MySQL语句,流程控制,变量声明等语句构成。需要指明的是函数体中一定要含有return 返回语句

示例 :

delimiter \\
create function f1(
i1 int,
i2 int)
returns int
BEGIN
declare num int;
set num = i1 + i2;
return(num);
END \\
delimiter ;

调用:

# 获取返回值
declare @i VARCHAR(32);
select UPPER('alex') into @i;
SELECT @i; # 在查询中使用
select f1(11,nid) ,name from tb2;

删除函数:

drop function func_name;

查看函数:

查看定义的函数
SHOW FUCNTION STATUS LIKE 'function_name',
或者是使用
SHOW CREATE FUNCTION function_name;

修改函数选项:

ALTER FUNCTION  function_name 

五. 事物

事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性

1) 事务特性

  • 1、事务的原子性:一组事务,要么成功;要么撤回。
  • 2、稳定性 : 有非法数据(外键约束之类),事务撤回。
  • 3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
  • 4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里

2)开启事务

start transaction

3)做保存点

savepoint 保存点名称

4)操作

MYSQL的事务处理主要有两种方法
1.用begin,rollback,commit来实现
    begin开始一个事务
    rollback事务回滚
    commit 事务确认
2.直接用set来改变mysql的自动提交模式
    mysql默认是自动提交的,也就是你提交一个query,就直接执行!可以通过
    set autocommit = 0 禁止自动提交
    set autocommit = 1 开启自动提交

当用set autocommit = 0 的时候,以后所有的sql都将作为事务处理,直到你用commit确认或 rollback结束,注意当你结束这个事务的同时也开启了新的事务!

按第一种方法只将当前的做为一个事务

MYSQL只有 INNODB和BDB类型的数据表才支持事务处理,其他的类型是不支持的

delimiter \\
create PROCEDURE p1(
OUT p_return_code tinyint
)
BEGIN
DECLARE exit handler for sqlexception
BEGIN
-- ERROR
set p_return_code = 1;
rollback;
END; DECLARE exit handler for sqlwarning
BEGIN
-- WARNING
set p_return_code = 2;
rollback;
END; START TRANSACTION;
DELETE from tb1;
insert into tb2(name)values('seven');
COMMIT; -- SUCCESS
set p_return_code = 0; END\\
delimiter ;

支持事务的存储过程

DECLARE @i TINYINT;
call p1(@i);
select @i;

执行存储过程

5)事务优化

◆ innodb_flush_log_at_trx_commit = 0,Innodb 中的Log Thread 每隔1 秒钟会将log buffer中的数据写入到文件,同时还会通知文件系统进行文件同步的flush 操作,保证数据确实已经写入到磁盘上面的物理文件。但是,每次事务的结束(commit 或者是rollback)并不会触发Log Thread 将log buffer 中的数据写入文件。所以,当设置为0 的时候,当MySQL Crash 和OS Crash 或者主机断电之后,最极端的情况是丢失1 秒时间的数据变更。(fsync)

◆ innodb_flush_log_at_trx_commit = 1,这也是Innodb 的默认设置。我们每次事务的结束都会触发Log Thread 将log buffer 中的数据写入文件并通知文件系统同步文件。这个设置是最安全的设置,能够保证不论是MySQL Crash 还是OS Crash 或者是主机断电都不会丢失任何已经提交的数据。(fsync)

◆ innodb_flush_log_at_trx_commit = 2,当我们设置为2 的时候,Log Thread 会在我们每次事务结束的时候将数据写入事务日志,但是这里的写入仅仅是调用了文件系统的文件写入操作。而我们的文件系统都是有缓存机制的,所以Log Thread 的这个写入并不能保证内容真的已经写入到物理磁盘上面完成持久化的动作。文件系统什么时候会将缓存中的这个数据同步到物理磁盘文件Log Thread 就完全不知道了。所以,当设置为2 的时候,MySQL Crash 并不会造成数据的丢失,但是OS Crash 或者是主机断电后可能丢失的数据量就完全控制在文件系统上了。(async)

七. 其它

 1.IF语句

IF search_conditionTHEN

statement_list

[ELSEIF search_conditionTHENstatement_list]

...

[ELSE statement_list]

ENDIF;

IF实现了一个基本的条件构造。如果search_condition求值为真,相应的SQL语句列表被执行。如果没有search_condition匹配,在ELSE子句里的语句列表被执行。statement_list可以包括一个或多个语句。 
请注意,也有一个IF() 函数,它不同于这里描述的IF语句: 
IF(expr1,expr2,expr3) 
如果 expr1 是TRUE (expr1 不等于 0 且 expr1 不等于 NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定

2. case语句

[begin_label:] LOOP
statement_list
END LOOP [end_label]

3. repeat语名

语句格式

[begin_label:] REPEAT
statement_list
UNTIL search_condition
END REPEAT [end_label]

REPEAT语句内的语句或语句群被重复,直至search_condition 为真。

REPEAT 语句可以被标注。 除非begin_label也存在,end_label才能被用,如果两者都存在,它们必须是一样的

delimiter \\
CREATE PROCEDURE proc_repeat ()
BEGIN DECLARE i INT ;
SET i = 0 ;
repeat
select i;
set i = i + 1;
until i >= 5
end repeat; END\\
delimiter ;

repeat循环

4. loop语句

loop语句格式

[begin_label:] LOOP
statement_list
END LOOP [end_label]

loop允许某特定语句或语句群的重复执行,实现一个简单的循环构造。在循环内的语句一直重复直到循环被退出,退出通常伴随着一个leave语句

delimiter \\
CREATE PROCEDURE proc_loop ()
BEGIN declare i int default 0;
loop_label: loop
select i;
set i=i+1;
if i>=5 then
leave loop_label;
end if;
end loop; END\\
delimiter ;

loop

5.while语句

while语句格式

[begin_label:] WHILE search_condition DO
statement_list
END WHILE [end_label]

退出整个循环leave 相当于break

退出当前循环iterate 相当于 continue

通过退出的标签决定退出哪个循环

delimiter \\
CREATE PROCEDURE proc_while ()
BEGIN DECLARE num INT ;
SET num = 0 ;
WHILE num < 10 DO
SELECT
num ;
SET num = num + 1 ;
END WHILE ; END\\
delimiter ;

6. 动态执行SQL语句

delimiter \\
DROP PROCEDURE IF EXISTS proc_sql \\
CREATE PROCEDURE proc_sql ()
BEGIN
declare p1 int;
set p1 = 11;
set @p1 = p1; PREPARE prod FROM 'select * from tb2 where nid > ?';
EXECUTE prod USING @p1;
DEALLOCATE prepare prod; END\\
delimiter ;

Mysql进阶(二)的更多相关文章

  1. mysql进阶(二十九)常用函数

    mysql进阶(二十九)常用函数 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP ...

  2. mysql进阶(二十八)MySQL GRANT REVOKE用法

    mysql进阶(二十八)MySQL GRANT REVOKE用法   MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执 ...

  3. mysql进阶(二十七)数据库索引原理

    mysql进阶(二十七)数据库索引原理 前言   本文主要是阐述MySQL索引机制,主要是说明存储引擎Innodb.   第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础.    ...

  4. mysql进阶(二十六)MySQL 索引类型(初学者必看)

    mysql进阶(二十六)MySQL 索引类型(初学者必看)   索引是快速搜索的关键.MySQL 索引的建立对于 MySQL 的高效运行是很重要的.下面介绍几种常见的 MySQL 索引类型.   在数 ...

  5. mysql进阶(二)索引简易教程

    Mysql索引简易教程 基本概念 索引是指把你设置为索引的字段A的内容储存在一个独立区间S里,里面只有这个字段的内容.在找查这个与这个字段A的内容时会直接从这个独立区间里查找,而不是去到数据表里查找. ...

  6. mysql进阶二

    数据库存储数据的特点: 1.数据存放到表中,然后表再放到库中 2.一个库中可以有多张表,每张表具有唯一的表名来标识自己 3.表中有一个或多个列,列又称为“字段” 数据库常见的管理系统 mysql.or ...

  7. mysql进阶(二十五)解决数据库NO CONNECTION问题

    解决数据库NO CONNECTION问题 前言 数据库版本类型:Mysql5.5 在应用程序连接数据库时,提示数据库连接失败.打开数据库查看,显示如下. 究其原因,是因为mysql服务出现了问题,重启 ...

  8. mysql进阶(二十二)MySQL错误之Incorrect string value: '\xE7\x81\xAB\xE7\x8B\x90...中文字符输入错误

    MySQL错误之Incorrect string value: '\xE7\x81\xAB\xE7\x8B\x90...' for column 'tout' at row 1中文字符输入错误 在实验 ...

  9. mysql进阶(二十一)删除表数据

    MySQL删除表数据 在MySQL中有两种方法可以删除数据,一种是DELETE语句,另一种是TRUNCATE TABLE语句.DELETE语句可以通过WHERE对要删除的记录进行选择.而使用TRUNC ...

  10. mysql进阶(二十四)防御SQL注入的方法总结

    防御SQL注入的方法总结 这篇文章主要讲解了防御SQL注入的方法,介绍了什么是注入,注入的原因是什么,以及如何防御,需要的朋友可以参考下. SQL注入是一类危害极大的攻击形式.虽然危害很大,但是防御却 ...

随机推荐

  1. saiku缓存整理

    使用saiku的人,肯定都有这么一个经历,查询了一次多维分析数据表,第二次之后就特别快,因为它缓存了结果,可问题是过了一天,甚至几天,来源数据早都更换了,可还是这个缓存结果.问题来了,缓存不失效! 那 ...

  2. “远程调试监视器(MSVSMON.EXE)似乎没有在远程计算机上运行“的完美解决方案

    今天调试程序时,Visual Studio突然报出了如下错误: Microsoft Visual Studio 远程调试监视器(MSVSMON.EXE)似乎没有在远程计算机上运行.这可能是因为防火墙阻 ...

  3. Microsoft 2013 新技术学习笔记 三

    什么是代码结构的组织?asp.net MVC 5 默认创建出的几个目录的标准含义分别如下: Controllers目录存放MVC模式中的Controler Models目录存放MVC模式中的Model ...

  4. Flash Media Server 4.5 序列号 (fms4.5 激活码)

    激活码一枚   ,网上找不到的..我今天放出来了哦... 1462-5864-7783-6034-8316-3718    (亲测 可用) 安装前找到系统盘下windows/system32/driv ...

  5. Java分布式应用技术架构介绍

    分布式架构的演进 系统架构演化历程-初始阶段架构

  6. POJ 2676 Sudoku

    Sudoku Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12005   Accepted: 5984   Special ...

  7. 安卓开发笔记——重识Activity

    Activity并不是什么新鲜的东西,老生常谈,这里只是随笔记录一些笔记. 每当说起Activity,感觉最关注的还是它的生命周期,因为要使我们的应用程序更加健壮,客户体验更加良好,如果对生命周期不熟 ...

  8. oracle 日期获取

    ,'YYYY-MM-DD')星期一, to_char(NEXT_DAy(to_date(,'YYYY-MM-DD')星期日 from dual; select to_char(sysdate,'yyy ...

  9. apache+tomcat整合后的编码问题

    apache+tomcat整合提供webserver服务的方式是为了实现两个目的:一是方便利用apache http server将客户请求均衡的分给tomcat1,tomcat2....去处理,即负 ...

  10. 如何将ToolBar 样式设置Title文字水平居中

    以下是我的activity.xml的代码,线性布局.<android.support.v7.widget.Toolbar         android:id="@+id/toolba ...