mysql创建存储过程

mysql存储过程整理

£可爱£侵袭症+ 提交于 2019-12-09 18:51:08
1、存储过程的简介: 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。 2、存储过程的有点: (1).存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 (2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。 (3).存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction

MySQL海量数据处理及优化

与世无争的帅哥 提交于 2019-12-08 18:08:48
什么是mysql MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。 为什么是mysql MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。 mysql的用法 1 默认约束 create table emp (id int default 12) 2 设置自增 create table emp(id int identity(1,1) 3 查看表定义 desc emp 4 修改表明 alter table emp rename emp2 4 修改字段的数据类型 alter table emp rename emp2 4 修改表明 alter table emp2 modify id biginf

MySQL This function has none of DETERMINISTIC, NO SQL...错误1418 的原因分析及解决方法

你离开我真会死。 提交于 2019-12-08 13:35:46
https://blog.csdn.net/ty_soft/article/details/6940190 原因分析: 因为CREATE PROCEDURE, CREATE FUNCTION, ALTER PROCEDURE,ALTER FUNCTION,CALL, DROP PROCEDURE, DROP FUNCTION等语句都会被写进二进制日志,然后在从服务器上执行。但是,一个执行更新的不确定子程序(存储过程、函数、触发器)是不可重复的,在从服务器上执行(相对与主服务器是重复执行)可能会造成恢复的数据与原始数据不同,从服务器不同于主服务器的情况。 为了解决这个问题,MySQL强制要求: 在主服务器上,除非子程序被声明为确定性的或者不更改数据,否则创建或者替换子程序将被拒绝。 这意味着当创建一个子程序的时候,必须要么声明它是确定性的,要么它不改变数据。 声明方式有两种, 第一种:声明是否是确定性的 DETERMINISTIC和NOT DETERMINISTIC指出一个子程序是否对给定的输入总是产生同样的结果。 如果没有给定任一特征,默认是NOT DETERMINISTIC,所以必须明确指定DETERMINISTIC来声明一个子程序是确定性的。 这里要说明的是:使用NOW() 函数(或它的同义)或者RAND() 函数不会使一个子程序变成非确定性的。对NOW()而言

MySQL存储过程学习笔记

笑着哭i 提交于 2019-12-07 09:07:15
一、基本语法及简单实例 1、创建简单的测试环境 mysql> use test; Database changed mysql> show tables; Empty set (0.00 sec) mysql> CREATE TABLE t(s1 INT); Query OK, 0 rows affected (0.06 sec) mysql> INSERT INTO t VALUES(5); Query OK, 1 row affected (0.02 sec) 2、选择分隔符 mysql> DELIMITER // 我们一般使用";"作为分隔符,但是在编写存储过程的时候这会带来一些问题,因为存储过程中有许多语句,修改会";"作为分隔符可使用语句"DELIMITER ;//"。 3、创建存储过程 mysql> CREATE PROCEDURE p1() SELECT * FROM t;// Query OK, 0 rows affected (0.08 sec) "CREATE PROCEDURE"即为SQL语句部分,第二部分是过程名"p1"(这里需要注意的是存储过程名对大小写不敏感)。 第三部分 () 是参数列表,通常需要在其中添加参数,这里参数为空,但是"()"必须存在。 "SELECT * FROM t;"是存储过程的主体,注意哦,";"是主体的一部分哦

存储过程从定义开始

倖福魔咒の 提交于 2019-12-06 16:47:14
1. 使用存储过程的优点有: (1)存储过程在服务器端运行,执行速度快。 (2)存储过程执行一次后,其执行规划就驻留在高速缓冲存储器,在以后的操作中,只需从高速缓冲存储器中调用已编译好的二进制代码执行,提高了系统性能。 (3)确保数据库的安全。使用存储过程可以完成所有数据库操作,并可通过编程方式控制上述操作对数据库信息访问的权限。 2.创建存储过程可以使用create procedure语句。 要在MySQL 5.1中创建存储过程,必须具有CREATE routine权限。要想查看数据库中有哪些存储过程,可以使用SHOW PROCEDURE STATUS命令。要查看某个存储过程的具体信息,可使用SHOWCREATE PROCEDURE sp_name命令,其中sp_name是存储过程的名称。 CREATE PROCEDURE的语法格式: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body 其中,proc_parameter的参数如下: [ IN | OUT | INOUT ] param_name type characteristic特征如下: language SQL | [NOT] DETERMINISTIC | { CONTAINS SQL | NO SQL

初识数据库

一世执手 提交于 2019-12-06 14:35:32
一.初识数据库 1.为什么要使用数据库? 将文件和程序存在一台机器上是很不合理的 操作文件是一件很麻烦的事情 2.所以出现了一个新的概念------数据库 数据库是一个可以独立在一台机器上工作的,并且可以给我们提供高效,便捷的方式对数据进行增删改查的一种工具. 3.数据库的优势 程序稳定性: 任意一台服务所在的机器奔溃了都不会影响数据和另外的服务 数据一致性 :所有的数据都是储存在一起,所有程序操作的数据都是统一的,这样就不会出现数据不一致的情况 并发:数据库可以良好的支持并发,所有的程序操作数据库都是通过网络,而数据库本身支持并发网络的操作,不需要我们自己写socket 效率: 使用数据库对数据进行增删改查的效率高出我们自己处理文件很多 二,认识数据库 1. 什么是 数据(data) 描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字,图片,图像,声音,语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机 2.什么是 数据库(DataBase------DB) 数据库是存放数据的仓库,只不过这个仓库在计算机储存设备上,而且数据是按照一定格式存放的 数据库是长期存放在计算机内,有组织,可共享的数据结合 数据库中的数据按照一定的数据模型组织,描述和储存,具有较小的冗余度,较高的数据独立性和易扩展性,并可为各种用户共享 3.什么是数据管理系统Data Base

MySQL存储过程

試著忘記壹切 提交于 2019-12-06 13:12:42
SQL存储过程? 定义: 为了以后的使用更加简单方便, 从而编写的一条或者多条SQL语句的集合. 是SQL语言的封装和重用. 优劣分析: 优点(简单安全高性能): 1.简化操作 2.防止错误, 保证一致性 3.简化对变动的管理. 4.提高性能 5.灵活 6.加快开发时间 劣势: 1.编写较为复杂 2.需要获得授权.(一般使用的时候都是使用存储过程,而没有创建存储过程的权限) 来源: https://www.cnblogs.com/jrri/p/11986649.html

MySQL存储过程事务

余生长醉 提交于 2019-12-06 09:23:12
day61 保存在MySQL上的一个别名 > 一坨SQL语句 -- delimiter // -- create procedure p1() -- BEGIN -- select * from student; -- INSERT into teacher(tname) values("ct"); -- END// -- delimiter; call p1(); #把sql语句封装进p1中 注释内容(创建存储过程)执行完,可以通过call调用(执行存储过程)。 在函数中: 也可通过pymysql调用存储过程 1 import pymysql 2 3 #打开 4 conn = pymysql.connect(host= "localhost", user = 'root', password='112358', database = 'db3') 5 #拿 6 cursor = conn.cursor() 7 cursor.callproc('p1')#p1存储过程 8 result = cursor.fetchall() #拿 9 10 print(result) 11 #关闭数据库 12 cursor.close() 13 conn.close() cursor.callproc('p1') 执行结果: ((1, '男', 1, '理解'), (2, '女', 1, '钢蛋'

常用mysql命令大全

孤街醉人 提交于 2019-12-06 08:03:33
常用的MySQL命令大全 连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1、例1:连接到本机上的MYSQL。 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是: mysql>。 2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令: mysql -h110.110.110.110 -uroot -pabcd123 (注:u与root可以不用加空格,其它也一样) 3、退出MYSQL命令: exit (回车)。 修改密码 格式:mysqladmin -u用户名 -p旧密码 password 新密码 1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令: mysqladmin -uroot -password ab12 注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。 2、例2:再将root的密码改为djg345。 mysqladmin -uroot -pab12 password djg345 增加新用户。(注意:和上面不同

mysql-常用组件之触发器

六月ゝ 毕业季﹏ 提交于 2019-12-06 06:39:40
基本概念 触发器是一种特殊的存储过程,不像存储过程需要显示调用,触发器通过监控表事件(增删改操作)自动触发某条 sql 的执行,可以用于购物车加购后库存减少等场景。 触发器基本操作 1. 创建触发器 DELIMITER $$ CREATE /*[DEFINER = { user | CURRENT_USER }]*/ TRIGGER `dbname`.`trigger` BEFORE/AFTER INSERT/UPDATE/DELETE ON `dbname`.`<Table Name>` FOR EACH ROW BEGIN -- 触发的 sql 动作 END$$ DELIMITER ; 触发时间: before:表中数据发生改变前的状态 after:表中数据发生改变后的状态 PS:如果 before 触发器失败或者语句本身失败,将不执行 after 触发器(如果有的话) 触发事件: INSERT DELETE UPDATE old/new 关键字 触发器针对的是数据库中的每一行记录,每行数据在操作前后都会有一个对应的状态,触发器将没有操作之前的状态保存到 old 关键字中,将操作后的状态保存到 new 中,不同类型的触发事件拥有不同的关键字类型: 触发事件类型 new/old使用 INSERT事件 没有 old,只有 new,new 表示将要(插入前)或者已经增加(插入后