Python/MySQL(四、MySQL数据库操作)
Python/MySQL(四、MySQL数据库操作)
一、数据库条件语句:
- case when id>9 then ture else false
二、三元运算:
- 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
- ----------------------------------------------------------------------------
- 注意:上下连接一定要保证行数相等
四、数据库临时表:
- (select * from student)as B
- 创建一个临时表(临时表就是存在内存中的拿到的内容,方便下次使用时再次写)
五、数据库视图:
- 创建视图
- create view 视图名 as sql语句
- 注意:因为视图是虚拟表,创建视图就是相当于在实体表中绑定一个动态的表,所以在绑定的实体表数据发生变化时,视图表也会发生变化。(因为视图表示虚拟表所以不能进行表的修改操作。)
- 修改视图
- alter view 视图名 as sql语句
- 此处修改视图(修改视图绑定的实体表,不能对虚拟表进行修改操作)
- 删除视图
- drop view 视图名
六、数据库触发器:
当对某种表进行修改操作时可以绑定一个触发器(在触发器中可以编写想要执行的SQL语句)
- delimiter //
- 修改MySQL语句中结束语句的符号
- create trigger t1 BEFORE INSERT on student for EACH ROW
- 创建触犯器(插入一个数据就执行下边的代码一次)
- BEGIN
- 开始
- INSERT into teacher(tname) values(NEW.sname);
- 老师表中插入一个老师名称
- INSERT into teacher(tname) values(NEW.sname);
- 此处NEW(绑定触发器要插入的值获取到)
- INSERT into teacher(tname) values(NEW.sname);
- INSERT into teacher(tname) values(NEW.sname);
- END //
- 结束
- delimiter ;
- 修改MySQL语句中结束语句的符号
NEW --- 代指新数据 OLD --- 代指旧数据
七、数据库函数:
1、内置函数(使用内置函数去MySQL官网中查看)
2、自定义函数
- delimiter \\
- create function f1(i1 int i2 int)
- returns int
- 定义函数,可以传参,也具有返回值
- begin 函数体开始
- declare num int default 0;
- set num=i1+i2;
- return(num)
- end \\ 函数体结束
- delimiter ; 重新设置结束语句
3、调用函数方法
- select 函数名称加括号进行调用
- select f1()
注意:在定义函数时,设定了俩个参数但是只用可一个,另一个参数必须进行传参,并且在函数体内不能进行selsect操作!
八、数据库存储过程:
- 存储过程就是保存在MySQL上的有别名(集合)--->SQL语句
- 存储过程实现了开发人员写代码的过程。
- 存储过程一:
- MySQL存储过程,在程序或者客户端这边只需要知道存储过程的名称就可以调用执行。
- 存储过程二:
- MySQL服务端启动,客户端自己进行写SQL语句。
创建一个无参的存储过程:
- create procedure p1() 创建无参存储过程
- begin
- select * from student:
- insert into teacher(tnaem) values('alex')
- end
- 调用存储过程
- call p1()
创建一个有参存储过程:参数共分为(in(输入) out(输出)inout(可输入可输出))
- delimiter //
- create procedure p2(
- in n1 int,
- in n2 int 创建有参数的存储过程,(参数都是in 输入)
- )
- BEGIN
- select * from student where sid > n1;
- END //
- delimiter ;
- call p2(12,2) 调用执行存储过程(传参数)
- 注意:在定义存储过程时,设定了俩个参数但是只用可一个,另一个参数必须进行传参
创建一个带有输入参数和输出参数的存储过程:
- delimiter \\
- create procedrue p3(
- in n1 int
- out n2 int
- )
- begin
- set n2=1212
- select * from student where sid > n1
- end \\
- delimiter ;
注意:out 对应的传值必须是变量,在存储过程当中是没有返回值(只能用out伪造一个返回值)在存储过程当中还可以进行 selsect 操作!
九、数据库事务:
delimiter \\ create procedure p5( out tse tinyint ) begin declare exit handler for sqlexception begin --error set tse=1 rollback end; strat TRANSACTION; delete from tb1; insert into tb2(name) values('seven') commit: --success set tse=2; end; delimiter ;
十、数据库游标:
- delimiter //
- create procedure p6()
- begin
- declare row_id int; -- 自定义变量1
- declare row_num int; -- 自定义变量2
- declare done INT DEFAULT FALSE;
- declare temp int;
- declare my_cursor CURSOR FOR select id,num from A;
- declare CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
- open my_cursor;
- xxoo: LOOP
- fetch my_cursor into row_id,row_num;
- if done then
- leave xxoo;
- END IF;
- set temp = row_id + row_num;
- insert into B(number) values(temp);
- end loop xxoo;
- close my_cursor;
- end //
- delimter ;
十一、动态执行SQL(防SQL注入)
防止SQL注入的共有俩种方式,第一种是在pycharm中设置,第二种是在mysql中设置
- delimiter \\
- CREATE PROCEDURE p8 (
- in nid int
- )
- BEGIN
- set @nid = nid;
- PREPARE prod FROM 'select * from student where sid > ?';
- EXECUTE prod USING @nid;
- DEALLOCATE prepare prod;
- END\\
- delimiter ;
Python/MySQL(四、MySQL数据库操作)的更多相关文章
- Node.js 连接 MySQL 并进行数据库操作
Node.js 连接 MySQL 并进行数据库操作 按照这篇操作mysql的指引,我远程操作了我另一台电脑的mysql数据库. var mysql = require('mysql'); var c ...
- Java Spring Boot VS .NetCore (四)数据库操作 Spring Data JPA vs EFCore
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- Hapi+MySql项目实战数据库操作(四)
数据库访问 下面以Node的ORM框架Sequelize来操作数据库,Mysql为例. 配置数据库连接信息config/db_config.js: //db_config.js module.expo ...
- python 使用sqlalchemy进行数据库操作
sqlalchemy是python下一个著名的数据库orm库,可以方便地进行数据表创建.数据增删改查等操作 最详细的教程,见官方:https://docs.sqlalchemy.org 这里列举一些常 ...
- (SQL SERVER) (ORACLE) (ACCESS)(POSTGRE SQL)四种数据库操作C#代码
将对这四种数据库的操作封装到了2个类中可以拷贝过去直接使用. public sealed class OleDbClass { #region private utility methods & ...
- android菜鸟学习笔记20----Android数据存储(四))Android数据库操作
Android内置了一个名为SQLite的关系型数据库,这是一款轻量型的数据库,操作十分简便.SQLite与别的数据库不同的是,它没有数据类型.可以保存任何类型的数据到你所想要保存的任何表的任何列中. ...
- python工具之myql数据库操作
import pymysql import config ''' 1.0 简单封装 1.1 添加了insert_id属性,返回insert时返回的主键 1.2 添加了column属性,返回查询的col ...
- mysql四:数据操作
一.介绍 MySQL数据操作: DML ======================================================== 在MySQL管理软件中,可以通过SQL语句中的 ...
- MySQL基金会-基本数据库操作
1. 删除数据库 DROP DATABASE 数据库名; mysql> drop database test; 即删除数据库模式 2 .创建数据库 create DATABASE 数据库名; m ...
- mysql学习笔记--数据库操作
一.显示数据库 show databases; 二.创建数据库 create database [if not exists] 数据库名 [字符编码] 注意: a. 如果已经存在数据库再创建会报错 b ...
随机推荐
- mount挂载与umount卸载
mount挂载与umount卸载 author:headsen chen 2017-10-23 15:13:51 个人原创,转载请注明作者,否则依法追究法律责任 mount:挂载: eg ...
- 20165230 2017-2018-2 《Java程序设计》第3周学习总结
20165230 2017-2018-2 <Java程序设计>第3周学习总结 教材学习内容总结 本周主要学习了类与对象. 包括创建对象与构造方法. 了解了程序是由若干个类所构成:类分为类名 ...
- Unity的常用API
1.Event Function:事件函数 Reset() :被附加脚本时.在游戏物体的组件上按Reset时会触发该事件函数 Start() :在游戏初始化时会执行一次 Update() :每一帧 ...
- Java 常用单词
1.Object-Oriented ['əbdʒekt'ɔ:rɪəntɪd] 面向对象 adj 2.inheritance [ɪnˈherɪtəns] 继承;遗传;遗产 n inherit [ɪ ...
- IT外包一定要按着程序流程做
步骤1: 衡量外包对你的公司是否有意义.在分析是否需要将你的工作进行外包的阶段,对本公司现有的业务做好基准调查以判定它们在多大程度上符合行业标准.或许,自行开展离岸业务--在其他地区建立离岸IT资源更 ...
- python之Redis的字符串类型操作
redis的数据类型: 字符串型 哈希 列表 集合 有序集合 1.String(字符串类型) set 命令: 设置一个键和值,键存在则只覆盖,返回ok > s ...
- 关于JSP页面URL传值所遇到的小问题
在JSP页面中我的页面传值加了分号,在后台取值是没有问题的. 但是在XML底层执行时就会返回不了值,这是什么原因呢? 经过努力排查发现了分号导致了${XXX}的值都成了和前面ID一样的串.去掉${XX ...
- markdown语法小结
引用数学公式1 \[ \begin{equation} \pi^2=x^2+y \label{eq_lab1} \end{equation} \] Here we cite this equation ...
- 关于Netty的入门使用
Netty介绍: Netty是一个提供异步事件驱动的网络应用框架,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 换句话说,Netty是一个NIO框架,使用它可以简单快速地开发网络应用程序,比 ...
- 作业01-Java基本概念
1.本周学习总结 本周学习了JVM,JDK,JRE三者之间的区别及联系,知道JDK包括JRE,JRE包括JVM,知道java语言与C语言的不同之处在于java语言可以依赖于虚拟机实现"编译一 ...