首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql变量声明、存储过程、触发器

变量声明 服务器系统变量 通过@@来调用系统变量 # 列出mysql所有系统变量 SHOW VARIABLES SELECT @@date_format 用户变量 通过@来调用用户变量 # 输出变量yesterday...GROUP BY department; END 调用存储过程 CALL stat_store_perf(1) 删除存储过程 DROP PROCEDURE stat_store_perf 触发器...和存储过程一样, 都是嵌入到mysql中的一段程序, 区别就是存储过程需要显式调用, 而触发器式根据对表的相关操作自动激活执行....创建触发器 CREATE TRIGGER 触发器名 BEFORE[AFTER] [INSERT, UPDATE, DELETE] CREATE TRIGGER check_department BEFORE...多用来检查字段 查看触发器 建议通过客户端删除 SHOW TRIGGERS FROM store_perf 删除触发器 建议通过客户端删除 DROP TRIGGERS check_department

1.7K40

MySQL基础-变量流程控制游标触发器

文章目录 MySQL基础-变量/流程控制/游标/触发器 一、变量 1、系统变量 2、用户变量 二、流程控制 1、分支语句 2、循环语句 3、跳转语句 三、游标 1、概念 2、使用 四、触发器...1、触发器概念 2、触发器使用 3、触发器的优缺点 MySQL基础-变量/流程控制/游标/触发器 一、变量MySQL数据库的存储过程和函数中,可以使用变量来存储查询或计算的中间结果数据,或者输出最终的结果数据...在 MySQL 数据库中,变量分为 系统变量 以及 用户自定义变量 1、系统变量 变量由系统定义,不是用户定义,属于 服务器 层面 启动MySQL服务,生成MySQL服务实例期间,MySQL将为MySQL...:修改MySQL 配置文件 ,继而修改MySQL系统变量的值(该方法需要重启MySQL服务) 方式2:在MySQL服务运行期间,使用“set”命令重新设置系统变量的值 #为某个系统变量赋值 #方式1:...如果游标读取的数据行有多个列名,则在 INTO 关键字后面赋值给多个变量名即可 关闭游标: CLOSE cursor_name 注:游标会占用系统资源 ,如果不及时关闭,游标会一直保持到存储过程结束,影响系统运行的效率

1.5K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    数据库必看--浅谈Oracle与MySQL的SQL语句区别

    数据类型:MySQL支持VARCHAR、INT、DOUBLE等数据类型,而Oracle则使用VARCHAR2代替VARCHAR,使用NUMBER代替INT和DOUBLE,且小数类型默认为FLOAT。...NULL, email VARCHAR(100) );Oracle 创建表(使用序列和触发器实现自增长)示例:CREATE TABLE users ( id NUMBER PRIMARY...修改列名MySQL使用ALTER TABLE 表名 CHANGE COLUMN 旧列名列名 新数据类型;来修改列名和数据类型,而Oracle则使用ALTER TABLE 表名 RENAME COLUMN...旧列名 TO 新列名;来修改列名,并通过ALTER TABLE 表名 MODIFY (列名 新数据类型);来修改数据类型(注意,Oracle在列有数据时无法直接修改列类型)。...模糊查询:在进行模糊查询时,MySQL可以使用CONCAT('%', 变量, '%'),而Oracle则使用'%' || 变量 || '%'进行字符串拼接。

    47710

    SQL简介

    /mysql.sql 备份到当前目录下,带数据备份 2,列操作 添加列:alter table name add(列名,类型 默认值 约束,列名2 类型) 删除列:alter table name drop...100开始每次曾一 create Sequence 序列名 start with 100 increment by 5;每次增5 使用:序列名.nextval 获取序列中下一个有效值可作为一个自增变量使用...> delimiter ; SHOW TRIGGERS语句查看触发器信息 mysql> SHOW TRIGGERS\G; 结果,显示所有触发器的基本信息;无法查询指定的触发器。...在information_schema.triggers表中查看触发器信息 mysql> select * from information_schema.triggers -> where trigger_name...如:select id from t where num/2=100应改为:select id from t where num=100*2 很多时候 exists 代替 in 是一个好的选择:exists

    2.7K20

    数据库概念相关

    推荐方案:在业务密集的SQL当中尽量不采用IN操作符,EXISTS 方案代替。 ②.NOT IN操作符 此操作是强列不推荐使用的,因为它不能应用表的索引。...推荐方案:NOT EXISTS 方案代替 ③.IS NULL 或IS NOT NULL操作(判断字段是否为空) 判断字段是否为空一般是不会应用索引的,因为索引是不索引空值的。...推荐方案:其它相同功能的操作运算代替,如:a is not null 改为 a>0 或a>’’等。不允许字段为空,而用一个缺省值代替空值,如申请中状态字段不允许为空,缺省为申请。...create table #t(...) 13.很多时候 exists 代替 in 是一个好的选择:?     ...19.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。 20.尽量使用表变量代替临时表。

    1.7K110

    MySQL系列专题(2)-MySQL的SQL语句和高级特性

    MySQL启动的时候由服务器自动将全局变量初始化为默认值;     全局变量的默认值可以通过更改MySQL配置文件(my.ini、my.cnf)来更改。   ...在每次建立一个新的连接的时候,由MySQL来初始化;      MYSQL会将当前所有全局变量的值复制一份来做为会话变量(也就是说,如果在建立会话以后,没有手动更改过会话变量与全局变量的值,那所有这些变量的值都是一样的...更新从表,主表不变 3.3.2 Trigger 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。...trigger_stmt:触发器的程序体,可以是一条SQL语句或者是BEGIN和END包含的多条语句 所以可以说MySQL创建以下六种触发器: BEFORE INSERT,BEFORE DELETE...SHOW INDEX FROM table_name; 索引字段尽量使用数字型(简单的数据类型) 尽量不要让字段的默认值为NULL 使用唯一索引 使用组合索引代替多个列索引 注意重复/冗余的索引、不使用的索引

    3.7K10

    SQL 与 MySQL 基础

    = 也可以 表示; 是否在集合中:IN、NOT IN; 字符模糊匹配:LIKE,NOT LIKE; 多重条件连接查询:AND、OR、NOT; 例如: 在 MySQL 中,查询Student表中名字的第二个字是...LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录,即返回两个表满足条件的交集部分,也会返回左边表中的全部数据,而在右表中缺失的数据会使用 NULL 来代替。...RIGHT JOIN(右连接):与 LEFT JOIN 相反,即返回两个表满足条件的交集部分,也会返回右边边表中的全部数据,而在左表中缺失的数据会使用 NULL 来代替。...触发器所依附的表称为基本表,当触发器表上发生 SELECT/UPDATE/DELETE 等操作时,会自动生成两个临时的表( NEW 表和 OLD 表,只能由触发器使用) 例如: 在 INSERT 操作时...通过下面的命令来查看触发器: SHOW TRIGGERS 删除此触发器: DROP TRIGGER 触发器名称 ---- 事务 ---- 概念: SQL 的事务(Transaction)是一组数据库操作的逻辑单元

    1.9K20

    六年开发经验,整理Mysql数据库技巧笔记,全网最详细的笔记集合!

    WHERE db='数据库名称'; 删除存储过程 DROP PROCEDURE [IF EXISTS] 存储过程名称; 存储过程语法 - 变量 定义变量 DECLARE 变量名 数据类型 [DEFAULT...默认值]; 变量赋值方式一 SET 变量名 = 变量值; 变量赋值方式二 SELECT 列名 INTO 变量名 FROM 表名 [WHERE 条件]; 存储过程语法 – if 语句 IF 判断条件...触发器是与表有关的数据库对象,可以在 insert、update、delete 之前或之后触发并执行触发器中定义的 SQL 语句。...触发器分类 创建触发器 DELIMITER $ CREATE TRIGGER 触发器名称 BEFORE|AFTER INSERT|UPDATE|DELETE ON 表名 FOR EACH ROW BEGIN...触发器要执行的功能; END$ DELIMITER ; 查看触发器 SHOW TRIGGERS; 删除触发器 DROP TRIGGER 触发器名称; 事务 事务的四大特征(ACID) 原子性(Atomicity

    1.4K20

    MySQL 高级 | 存储过程、定时器、触发器来解决数据分析问题

    文章大纲 一、存储过程 1、啥是存储过程,有什么?...变量的种类和定义 在 SQL 中变量分为两种: ① 系统变量:@@ ② 自定义变量:@ 图片 存储过程是可以编程的,意味着可以使用变量、表达式、控制结构,在存储过程中,声明变量 declare 格式...所谓定时器,就是定时地去运行指定的函数和代码,MySQL 的定时器就是 MySQL 的事件。 在开发过程中经常会遇到这样一个问题:每天或每月需定时去执行一条 SQL 语句或更新或删除数据。...在我不了解 MySQL 定时器时,是 Python 程序代码去操作数据表,再将 Python 程序,放到服务器跑定时任务。现在用定时器,完全可以在数据层面操作了,非常方便。...发现这样写触发器并不灵活 3、触发器引用行变量 使用别名 old、new 来引用触发器中发生变化的记录内容。

    1.6K20

    Mysql触发器

    :标识触发事件,取值为 INSERT、UPDATE 或 DELETE; tbl_name:标识建立触发器的表名,即在哪张表上建立触发器; trigger_stmt:触发器程序体,可以是一句SQL语句,或者...mysql存储过程中,定义变量有两种方式: 1.使用set或select直接赋值,变量名以 @ 开头....而会话变量(即@开头的变量)则不会被再初始化,在一个会话内,只须初始化一次,之后在会话内都是对上一次计算的结果,就相当于在是这个会话内的全局变量。...PREPARE stmt FROM @v_sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; NEW 与 OLD 上述示例中使用了 NEW 关键字 MySQL...; 在 DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据; 使用方法: NEW.columnName (columnName 为相应数据表某一列名) if else declare

    4.5K30

    MySQL的学习--触发器

    :标识触发事件,取值为 INSERT、UPDATE 或 DELETE; tbl_name:标识建立触发器的表名,即在哪张表上建立触发器; trigger_stmt:触发器程序体,可以是一句SQL语句,或者...MySQL 中使用 DECLARE 来定义一局部变量,该变量只能在 BEGIN … END 复合语句中使用,并且应该定义在复合语句的开头, 即其它语句之前,语法如下: DECLARE var_name...[,...] type [DEFAULT value] 其中: var_name 为变量名称,同 SQL 语句一样,变量名不区分大小写;type 为 MySQL 支持的任何数据类型;可以同时定义多个同类型的变量...,逗号隔开;变量初始值为 NULL,如果需要,可以使用 DEFAULT 子句提供默认值,值可以被指定为一个表达式。...; 在 DELETE 型触发器中,OLD 用来表示将要或已经被删除的原数据; 使用方法: NEW.columnName (columnName 为相应数据表某一列名) 另外,OLD 是只读的,而 NEW

    4.8K20

    MySQL命令,一篇文章替你全部搞定

    MySQL的基本操作可以包括两个方面:MySQL常用语句如高频率使用的增删改查(CRUD)语句和MySQL高级功能,如存储过程,触发器,事务处理等。...当然,多表的查询可以是联结查询。 联结查询 内联结又称之为内部联结,是基于两个表 之间的的相等测试。如果不加过滤条件,会造成“笛卡尔积”。...注意MySQL中定义变量时都是变量名在前,数据类型在后。 3. 存储过程具体逻辑写在BEGIN END之间; 4. 将值赋给变量使用INTO关键字; 5....如果存储过程中定义了OUT类型的输入参数,那么在执行存储过程时需要传入变量,如这里@total,并且变量都是@开始的。...INSERT触发器 在执行INSERT触发器时,也这样几点需要注意:1.在INSERT触发器代码内,可以引用一个名为NEW的虚拟表,可以NEW来访问刚插入的行数据;2.在BEFORE INSERT触发器

    2.6K20

    SQL视图、存储过程、触发器

    VIEW 视图名称(列名列表)] AS SELECT语句 [WITH[CASCADED|LOCAL]CHECK OPTION] 删除 DROP VIEW [IF EXISTS] 视图名称 [视图名称]...MySQL允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围,MySQL提供了两个选项: CASCADED和LOCAL,默认值为CASCADED。...(三)存储过程 1.变量 系统变量MySQL服务器提供,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL)、会话变量(SESSION)。...2.用户自定义变量 用户定义变量是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接“@变量名”使用就可以。其作用域为当前连接。...UNTIL 条件 END REPEAT; 9.loop LOOP实现简单的循环,如果不在SQL逻辑中增加退出循环的条件,可以其来实现简单的死循环。

    31540

    后端程序员必备:SQL高性能优化方案!50条优化,建议马上收藏!

    9、很多时候 EXISTS 代替 IN 是一个好的选择:select num from a where num in(select num from b)。...35、别名的使用,别名是大型数据库的应用技巧,就是表名、列名在查询中以一个字母为别名,查询速度要比建连接表快 1.5 倍。...37、避免使用临时表,除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替。...WHERE 子句中的字段,特别是大表的字段,应该建立索引;  索引应该建在选择性高的字段上;  索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;  复合索引的建立需要进行仔细分析,尽量考虑单字段索引代替...无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。 46、MySQL 查询可以启用高速查询缓存。这是提高数据库性能的有效MySQL优化方法之一。

    1.1K01

    SQL优化

    应尽量避免在 where 子句中对字段进行表达式操作,应尽量避免在where子句中对字段进行函数操作 很多时候 exists 代替 in 是一个好的选择:select num from a where...别名的使用,别名是大型数据库的应用技巧,就是表名、列名在查询中以一个字母为别名,查询速度要比建连接表快1.5倍。...避免使用临时表,除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替;大多数时候(99%),表变量驻扎在内存中,因此速度比临时表更快,临时表驻扎在TempDb数据库中,因此临时表上的操作需要跨数据库通信...经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 索引应该建在选择性高的字段上; 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 复合索引的建立需要进行仔细分析,尽量考虑单字段索引代替...无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。 MySQL查询可以启用高速查询缓存。这是提高数据库性能的有效Mysql优化方法之一。

    69920

    52 条 SQL 语句性能优化策略,建议收藏!

    8 应尽量避免在 where 子句中对字段进行表达式操作,应尽量避免在where子句中对字段进行函数操作 9 很多时候 exists 代替 in 是一个好的选择:select num from a where...35 别名的使用,别名是大型数据库的应用技巧,就是表名、列名在查询中以一个字母为别名,查询速度要比建连接表快1.5倍。...37 避免使用临时表,除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替;大多数时候(99%),表变量驻扎在内存中,因此速度比临时表更快,临时表驻扎在TempDb数据库中,因此临时表上的操作需要跨数据库通信...经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 索引应该建在选择性高的字段上; 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 复合索引的建立需要进行仔细分析,尽量考虑单字段索引代替...无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。 46 MySQL查询可以启用高速查询缓存。这是提高数据库性能的有效Mysql优化方法之一。

    92900

    爆肝!52 条SQL语句性能优化策略

    9 很多时候 exists 代替 in 是一个好的选择: select num from a where num in(select num from b) 下面的语句替换: select num...35 别名的使用,别名是大型数据库的应用技巧,就是表名、列名在查询中以一个字母为别名,查询速度要比建连接表快1.5倍。...37 避免使用临时表,除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替大多数时候(99%),表变量驻扎在内存中,因此速度比临时表更快,临时表驻扎在TempDb数据库中,因此临时表上的操作需要跨数据库通信...经常出现在Where子句中的字段,特别是大表的字段,应该建立索引; 索引应该建在选择性高的字段上; 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 复合索引的建立需要进行仔细分析,尽量考虑单字段索引代替...无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。 46 MySQL查询可以启用高速查询缓存。这是提高数据库性能的有效Mysql优化方法之一。

    55430

    52 条 SQL 语句性能优化策略

    9、很多时候exists代替in是一个好的选择:select num from a where num in(select num from b)。...35、别名的使用,别名是大型数据库的应用技巧,就是表名、列名在查询中以一个字母为别名,查询速度要比建连接表快1.5倍。...37、避免使用临时表,除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替;大多数时候(99%),表变量驻扎在内存中,因此速度比临时表更快,临时表驻扎在TempDb数据库中,因此临时表上的操作需要跨数据库通信...子句中的字段,特别是大表的字段,应该建立索引; 索引应该建在选择性高的字段上; 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 复合索引的建立需要进行仔细分析,尽量考虑单字段索引代替...有时候MySQL会使用错误的索引,对于这种情况使用USE INDEX,检查使用SQL_MODE=STRICT的问题,对于记录数小于5的索引字段,在UNION的时候使用LIMIT不是是OR。

    64260
    领券