首页 > 代码库 > Python/MySQL(四、MySQL数据库操作)

Python/MySQL(四、MySQL数据库操作)

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 ;

 

Python/MySQL(四、MySQL数据库操作)