case when id>9 then ture else false
二、三元运算:
1 if(isnull(xx)0,1)
三、上下连表:
select id,name fromta1
union 天然去重(检测上边的表和下边的表行内完全一样就只显示一行内容)
select num,snamefromtb2==========================================select id,namefromta1
union all 不去重
select num,snamefromtb2----------------------------------------------------------------------------注意:上下连接一定要保证行数相等
四、数据库临时表:
1 (select * fromstudent)as B2 创建一个临时表(临时表就是存在内存中的拿到的内容,方便下次使用时再次写)
五、数据库视图:
1 创建视图2 create view 视图名 as sql语句3 注意:因为视图是虚拟表,创建视图就是相当于在实体表中绑定一个动态的表,所以在绑定的实体表数据发生变化时,视图表也会发生变化。(因为视图表示虚拟表所以不能进行表的修改操作。)4 修改视图5 alter view 视图名 as sql语句6 此处修改视图(修改视图绑定的实体表,不能对虚拟表进行修改操作)7 删除视图8 drop view 视图名
六、数据库触发器:
当对某种表进行修改操作时可以绑定一个触发器(在触发器中可以编写想要执行的SQL语句)
1 delimiter //
2 修改MySQL语句中结束语句的符号3 create trigger t1 BEFORE INSERT on student forEACH ROW4 创建触犯器(插入一个数据就执行下边的代码一次)5 BEGIN6 开始7 INSERT into teacher(tname) values(NEW.sname);8 老师表中插入一个老师名称9 INSERT into teacher(tname) values(NEW.sname);10 此处NEW(绑定触发器要插入的值获取到)11 INSERT into teacher(tname) values(NEW.sname);12 INSERT into teacher(tname) values(NEW.sname);13 END //
14 结束15 delimiter ;16 修改MySQL语句中结束语句的符号
NEW --- 代指新数据 OLD --- 代指旧数据
七、数据库函数:
1、内置函数(使用内置函数去MySQL官网中查看)
2、自定义函数
1 delimiter \2 create function f1(i1 int i2 int)3 returns int4 定义函数,可以传参,也具有返回值5 begin 函数体开始6 declare num int default 0;7 set num=i1+i2;8 return(num)9 end \\ 函数体结束10 delimiter ; 重新设置结束语句
3、调用函数方法
1 select 函数名称加括号进行调用2 select f1()
注意:在定义函数时,设定了俩个参数但是只用可一个,另一个参数必须进行传参,并且在函数体内不能进行selsect操作!
八、数据库存储过程:
存储过程就是保存在MySQL上的有别名(集合)--->SQL语句
存储过程实现了开发人员写代码的过程。
存储过程一:
MySQL存储过程,在程序或者客户端这边只需要知道存储过程的名称就可以调用执行。
存储过程二:
MySQL服务端启动,客户端自己进行写SQL语句。
创建一个无参的存储过程:
1 create procedure p1() 创建无参存储过程2 begin3 select * fromstudent:4 insert into teacher(tnaem) values(‘alex‘)5 end6
7 调用存储过程8 call p1()
创建一个有参存储过程:参数共分为(in(输入) out(输出)inout(可输入可输出))
1 delimiter //
2 create procedure p2(3 inn1 int,4 inn2 int 创建有参数的存储过程,(参数都是in 输入)5 )6 BEGIN7
8 select * from student where sid >n1;9 END //
10 delimiter ;11
12 call p2(12,2) 调用执行存储过程(传参数)13 注意:在定义存储过程时,设定了俩个参数但是只用可一个,另一个参数必须进行传参
创建一个带有输入参数和输出参数的存储过程:
1 delimiter \2 create procedrue p3(3 inn1 int4 out n2 int5 )6 begin7 set n2=1212
8 select * from student where sid >n19 end \10 delimiter ;
注意:out 对应的传值必须是变量,在存储过程当中是没有返回值(只能用out伪造一个返回值)在存储过程当中还可以进行 selsect 操作!
九、数据库事务:
1 delimiter \2 create procedure p5(3 out tse tinyint4 )5 begin6 declare exit handler forsqlexception7 begin8 --error9 set tse=1
10 rollback11 end;12 strat TRANSACTION;13 delete fromtb1;14 insert into tb2(name) values(‘seven‘)15 commit:16 --success17 set tse=2;18 end;19 delimiter ;
十、数据库游标:
1 delimiter //
2 create procedure p6()3 begin4 declare row_id int; --自定义变量15 declare row_num int; --自定义变量26 declare done INT DEFAULT FALSE;7 declare temp int;8
9 declare my_cursor CURSOR FOR select id,num fromA;10 declare CONTINUE HANDLER FOR NOT FOUND SET done =TRUE;11
12
13
14 open my_cursor;15 xxoo: LOOP16 fetch my_cursor into row_id,row_num;17 ifdone then18 leave xxoo;19 END IF;20 set temp = row_id +row_num;21 insert into B(number) values(temp);22 end loop xxoo;23 close my_cursor;24
25
26 end //
27 delimter ;28
十一、动态执行SQL(防SQL注入)
防止SQL注入的共有俩种方式,第一种是在pycharm中设置,第二种是在mysql中设置
1 delimiter \2 CREATE PROCEDURE p8 (3 innid int4 )5 BEGIN6 set @nid =nid;7 PREPARE prod FROM ‘select * from student where sid > ?‘;8 EXECUTE prod USING @nid;9 DEALLOCATE prepare prod;10 END\11 delimiter ;
Python/MySQL(四、MySQL数据库操作)
标签:logs commit 输入 before arm nio 内置函数 服务 写代码
本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉
本文系统来源:http://www.cnblogs.com/guobaoyuan/p/6974564.html