mysql内部代码的优缺点

mysql内部代码有四种:存储过程,存储函数,事件,触发器。

存储过程&存储函数:

优点:

内部执行,离数据最近,另外在服务器上执行还可以节省宽带和网络延迟

代码重用,可以方便地统一业务规则,保证某些行为总是一致,也可以为应用提供一定的安全性。

简化代码的维护和版本更新。

帮助提升安全,提供更细颗粒度的权限控制。

缓存执行计划,如果反复调用可以降低消耗。

维护简单,没外部依赖

更好在开发和数据库维护人员间分工。

缺点:

mysql没有提供好的开发和调试工具,编写调试困难。

效率差,存储过程使用的函数有限,难以编写复杂的字符串维护功能,也难以实现太复杂的逻辑。

部署带来额外的复杂性。

带来额外的内部存储代码。

有安全隐患

给服务器带来额外压力

mysql没有资源消耗控制进程,如果存储过程发生错误,可能直接把服务器拖死。

调试困难。

触发器:

缺点:

功能有限。

对于每一个表的每一个时间,最多只能定义一个触发器。

Mysql只支持“基于行的触发”——所以说,触发器是针对一条记录的。而不是针对整个sql语句的,如果更变的数据集非常大的话,效率会很低。

而且触发器会掩盖服务器背后的工种,影响潜在效率,对性能排查造成阻碍。

触发器问题难以排查,尤其是性能问题

触发器可能导致死锁和锁等待,如果触发器失败,sql执行也会失败。

触发器并不能保证更新原子性。

优点:

减少客户端和服务端之间的通信

简化应用逻辑

提高性能

可用于自动更新反范式化数据或者汇总汇总表数据。

事件(直接汇总):

在Mysql内部实现

通常把复杂代码封装成存储过程再通过call来调用

事件在一个独立事件调度进程中被初始化,这个线程和处理链接的线程没有任何关系。不接受常熟也没有返回值。

用于定期维护任务。

时间: 2024-10-19 15:45:31

mysql内部代码的优缺点的相关文章

Mysql基础代码(不断完善中)

Mysql基础代码,不断完善中~ 1 //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. 2 3 4 /* [命名规则] */ 5 常量名 类常量建议全大写,单词间用下划线分隔 // MIN_WIDTH 6 变量名建议用下划线方式分隔 // $var_name 7 函数名建议用驼峰命名法 // varName 8 定界符建议全大写 // <<<DING, <<<'DING' 9 文件名建议全小写和下划线.数字 // func_n

Php mysql 常用代码、CURD操作以及简单查询

C/S:Client ServerB/S:Brower Server php主要实现B/S LAMP :Linux系统    A阿帕奇服务器    Mysql数据库   Php语言 mysql常用代码 创建表 1 create table CeShi1 2 ( 3 Uid varchar(50) primary key, 4 Pwd varchar(50), 5 Name varchar(50), 6 Nation varchar(50), 7 foreign key(Nation) refer

mysql内部组件架构,索引管理,视图view

--以下内容摘自马哥教育课堂 === 单进程多线程模型 每个用户连接都使用一个线程 mysql使用线程池来管理各个线程 mysql内部组件架构 connection --management service & unities(管理服务单元,如备份恢复,集群,合并,迁移工具,复制工具): connection pool(认证,线程重用,连接限制,内存检查,缓存): --SQL接口(DML,DDL,存储过程,视图,触发器): 分析器parser(查询翻译成二进制指令,访问权限): 优化器optim

Python操作Mysql实例代码教程在线版(查询手册)_python

实例1.取得MYSQL的版本 在windows环境下安装mysql模块用于python开发 MySQL-python Windows下EXE安装文件下载 复制代码 代码如下: # -*- coding: UTF-8 -*- #安装MYSQL DB for pythonimport MySQLdb as mdb con = None try:    #连接mysql的方法:connect('ip','user','password','dbname')    con = mdb.connect('

mysql数据字典代码

平时做开发时,查看mysql的表是用了navicat,虽然查看单个表的各个字段时还算方便,但是要一次查看整个数据库各个表的各个字段的详情还是不那么方便,于是就在网上找了一段代码,把数据库的所有表的字段都显示出来,这样查看结构会比较清晰. 显示效果 1 <?php 2 /** 3 * 生成mysql数据字典 4 */ 5 header ( "Content-type: text/html; charset=utf-8" ); 6 7 // 配置数据库 8 $dbserver = &

mysql网络部分代码

今天终有点空闲(心情?)整理下mysql的网络部分代码了.整体网络部分的代码是非常简单的,mysql几乎没有做过多的封装,很直接的调用系统函数,一目了然. 总体看来,mysql主要使用了一个连接一个线程的模型,对客户端连接的socket使用非阻塞模式.linux版本,甚至包括OSX都用的是poll函数监听客户端请求.中间细节的处理没有太多复杂的操作,可见mysql这一块没有很特别的优化. 先说说Mysql启动网络几个关键函数. Mysql启动时,首先进入的是mysql_main这个函数,这个函数

php 生成mysql数据字典代码

由于项目开发用了比较多的表 ,为了快速获取数据字典,通过php代码的方式来获取表结构和表注释.代码如下: <?php /** * 生成mysql数据字典 */ header ( "Content-type: text/html; charset=utf-8" ); // 配置数据库 $dbserver = "localhost"; $dbusername = "数据库用户名"; $dbpassword = "数据库密码"

Mysql:常用代码

C/S: Client Server B/S: Brower Server Php主要实现B/S .net IIS Jave TomCat LAMP:L Create table ceshi1 ( Uid varchar(50) primary key, Pwd varchar(50), Name varchar(50), Nation varchar(50), foreign key(nation) references nation(code) ) 写查询语句需要注意: 创建表的时候,最后一

Python操作Mysql实例代码

实例1.取得MYSQL的版本在windows环境下安装mysql模块用于python开发 MySQL-python Windows下EXE安装文件下载 代码如下: # -*- coding: UTF-8 -*- #安装MYSQL DB for pythonimport MySQLdb as mdb con = None try:    #连接mysql的方法:connect('ip','user','password','dbname')    con = mdb.connect('localh