Python/MySQL(四、MySQL数据库操作)
一、数据库条件语句:
1 case when id>9 then ture else false
二、三元运算:
1 if(isnull(xx)0,1)
三、上下连表:
select id,name from ta1 union 天然去重(检测上边的表和下边的表行内完全一样就只显示一行内容) select num,sname from tb2 ========================================== select id,name from ta1 union all 不去重 select num,sname from tb2 ---------------------------------------------------------------------------- 注意:上下连接一定要保证行数相等
四、数据库临时表:
1 (select * from student)as B 2 创建一个临时表(临时表就是存在内存中的拿到的内容,方便下次使用时再次写)
五、数据库视图:
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 for EACH ROW 4 创建触犯器(插入一个数据就执行下边的代码一次) 5 BEGIN 6 开始 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 int 4 定义函数,可以传参,也具有返回值 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 begin 3 select * from student: 4 insert into teacher(tnaem) values(‘alex‘) 5 end 6 7 调用存储过程 8 call p1()
创建一个有参存储过程:参数共分为(in(输入) out(输出)inout(可输入可输出))
1 delimiter // 2 create procedure p2( 3 in n1 int, 4 in n2 int 创建有参数的存储过程,(参数都是in 输入) 5 ) 6 BEGIN 7 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 in n1 int 4 out n2 int 5 ) 6 begin 7 set n2=1212 8 select * from student where sid > n1 9 end \10 delimiter ;
注意:out 对应的传值必须是变量,在存储过程当中是没有返回值(只能用out伪造一个返回值)在存储过程当中还可以进行 selsect 操作!
九、数据库事务:
1 delimiter \ 2 create procedure p5( 3 out tse tinyint 4 ) 5 begin 6 declare exit handler for sqlexception 7 begin 8 --error 9 set tse=1 10 rollback 11 end; 12 strat TRANSACTION; 13 delete from tb1; 14 insert into tb2(name) values(‘seven‘) 15 commit: 16 --success 17 set tse=2; 18 end; 19 delimiter ;
十、数据库游标:
1 delimiter // 2 create procedure p6() 3 begin 4 declare row_id int; -- 自定义变量1 5 declare row_num int; -- 自定义变量2 6 declare done INT DEFAULT FALSE; 7 declare temp int; 8 9 declare my_cursor CURSOR FOR select id,num from A; 10 declare CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 11 12 13 14 open my_cursor; 15 xxoo: LOOP 16 fetch my_cursor into row_id,row_num; 17 if done then 18 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 in nid int 4 ) 5 BEGIN 6 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 ;
时间: 2024-09-28 15:44:28