mysql服务器执行sql语句(MySQL如何跟踪sql语句)

本文目录
- MySQL如何跟踪sql语句
- 在mysql提示符下可以输入一个sql语句
- mysql命令行中执行sql的几种方式总结
- MySQL之--一条更新的SQL如何执行
- SQL在MySQL数据库中是如何执行的
- 在MySQL中执行SQL语句时的几个注意点
- mysql使用什么函数来执行mysql语句
- mysql怎么一次执行多条SQL语句
- MySQL数据库中,如何记录SQL执行语句
MySQL如何跟踪sql语句
在项目开发中,难免会遇到在数据库服务器端跟踪sql执行语句的需求,通过跟踪sql执行语句,我们可以确定当上层应用在执行sql语句时
在项目开发中,,难免会遇到在数据库服务器端跟踪sql执行语句的需求,通过跟踪sql执行语句,我们可以确定当上层应用在执行sql语句时,数据库端是否执行了sql语句,执行的sql语句是否有错误等等。总之,在数据库端跟踪sql执行语句极大的便利了数据库逻辑代码编写中的错误排查。
我们都知道在SQL SERVER下跟踪sql采用事件探查器,那么在MySQL下如何跟踪执行的sql语句了?
通过一番google、baidu,找到了一个简单但是不是终极的解决方法。
解决办法
1、思路很简单:开启MySQL的日志log功能,通过查看跟踪日志即可。
2、开启MySQL的日志log方法:
【Windows环境下的配置方法】
在Mysql服务器安装目录下找到my.ini,我的是在“C:\Program Files\MySQL\MySQL Server 5.5”目录下,
在my.ini中找到字段,在下面添加: log=存放日志的路径/mysql.log
我的配置:
修改my.ini完成后,保存文件,重新启动mysql服务,即可在C:/Users/Administrator/发现mysql.log文件。
在MySQL客户端执行一条sql语句,查看mysql.log日志,实现对sql语句的跟踪。
本文永久更新链接地址:
在mysql提示符下可以输入一个sql语句
在mysql提示符下输入sql语句的时候会以\g,\g表示的就是一个语句的结束。
mysql提示符是数据库当中的一个指令,可以通过这条指令来对数据进行调取。右键以文本文件的形式打开,里面是记录着可以在mysql里面执行的代码。要执行sql文件里面的代码,需要打开mysql数据库去执行,新手推荐用软件的形式执行此sql,软件如navicat,sqlyog等。打开软件并且配置连接数据库的信息后打开,然后创建一个数据库,之后右键数据库选中执行sql,接着选择要执行的sql文件,按提示一步一步走下去即可。在mysql中导入/导出超大的sql文本文件,我们可以使用很多方法实例,如有:客户端直接命令操作,分块导入,客户端用source命令操作等等。
在实际工作中,有时经常地时行mysql数据库的导入和导入操作,但对于大型sql文件导入时,phpmyadmin是不行的,有太多限制,比如记录,内存等!MySql是一个种关联数据库管理系统,所谓关联数据库就是将数据保存在不同的表中,而不是将所有数据放在一个大的仓库中。这样就增加了速度与提高了灵活性。并且MySql软件是一个开放源码软件。还有,在安装MySql的时候,我们一般都选择Typical(典型安装)就可以了,当然,如果还有其它用途的话,那最好选择Complete(完全安装);在安装过程中,一般的还会让你进行服务器类型的选择,分别有三种服务器类型的选择,(Developer(开发机)、ServerMachine(服务器)、DedicatedMySqlServerMachine(专用MYSQL服务器)),选择哪种类型的服务器,只会对配置向导对内存等有影响,不然其它方面是没有什么影响的;所以,我们如果是开发者,选择开发机就可以啦;然后接下来,还会有数据库使用情况对话框的选择,我们只要按照默认就可以啦。
mysql命令行中执行sql的几种方式总结
1.直接输入sql执行
MySQL》 select now();
+---------------------+
| now() |
+---------------------+
| 2013-09-18 13:55:45 |
+---------------------+
1 row in set (0.00 sec)
2.执行编写好的sql脚本
mysql》 source H:/1.sql
+---------------------+
| now() |
+---------------------+
| 2013-09-18 13:54:04 |
+---------------------+
1 row in set (0.00 sec)
3.select ...into outfile 方式执行sql
mysql》 select now() into outfile ’h:/data/2.sql’;
Query OK, 1 row affected (0.00 sec)
4.使用mysql命令执行
H:\》mysql -uaHmin -p -e "select now()"
Enter passworH: ****
+---------------------+
| now() |
+---------------------+
| 2013-09-18 13:57:09 |
+---------------------+
5.mysql命令执行sql,并将查询结果保存到文本中
a)执行简单sql
mysql -uaHmin -proot test -e "select now()" -N 》H:/work/target1.txt
如果sql很长,这种方式就不是很适合了。
b)执行复杂sql
可以将复杂的sql事先好,存放到文本中在执行。
H:\》 mysql -uroot -pmypwH -h127.0.0.1 -p3306 test 《 H:/work/source.sql 》 H:/work/target.txt
将最后一种执行方式加上操作系统的定时任务,就可以在mysql中实现定时执行sql,并保存执行结果的目的了。
参考:官方文档中的 3.5. Using mysql in Batch Mode
***隐藏网址***
MySQL之--一条更新的SQL如何执行
一条更新的SQL语句如何执行
执行流程
一条SQL的执行流程如图所示:(图片来源与网络)
()
如图所示:
MySQL数据库主要分为两个层级:服务层和存储引擎层
服务层:server层包括连接器、查询缓存、分析器、优化器、执行器,包括大多数MySQL中的核心功能所有跨存储引擎的功能也在这一层实现,包括 存储过程、触发器、视图等。
存储引擎层:存储引擎层包括MySQL常见的存储引擎,包括MyISAM、InnoDB和Memory等,最常用的是InnoDB,也是现在MySQL的默认存储引擎。存储引擎也可以在创建表的时候手动指定,比如:
CREATE TABLE t (I iNT) ENGINE = 《Storage Engine》;
SQL语句的执行过程
连接器: 需要MySQL客户端登录,需要一个 连接器 来连接用户和MySQL数据库,“mysql -u 用户名 -p 密码” 进行MySQL登录,在完成 TCP握手 后,连接器会根据输入的用户名和密码验证登录身份。若错误 会提示 Access denied for user。若成功,MySQL会根据权限表中的记录来判定权限。
查询缓存:MySQL在得到一个执行请求后,会首先去 查询缓存 中查找,是否执行过这条SQL语句,之前执行过得语句以及结果会以 key-value对的形式,北直街放在内存中。key是查询语句,value是查询的结果。如果通过key能够查找到这条SQL语句,直接返回SQL的执行结果。若存在缓存中,就会继续后面的执行阶段。执行完成后,执行结果就会被放入查询缓存中。优点是效率高。但是查询缓存不建议使用, 因为在MySQL中对某张表进行了更新操作,那么所有的查询缓存就会失效,对于更新频繁的数据库来说,查询缓存的命中率很低。 需要注意:在MySQL8.0版本,查询缓存功能就删除了,不存在查询缓存的功能了
分析器: 分为词法分析和语法分析
1). 词法分析:首先,MySQL会根据SQL语句进行解析,分析器会先做 词法分析,你写的SQL就是由多个字符串和空格组成的一条SQL语句,MySQL需要识别出里面的字符串是什么,代表什么。
2). 语法分析:然后进行 语法分析, 根据词法分析的结果,语法分析器会根据语法规则,判断输入的这个SQL语句是否满足MySQL语法。如果SQL语句不正确,就提示:You have an error in your SQL suntax
优化器: 经过分析器分析后,SQL就合法了,但在执行之前,还需要进行优化器的处理,优化器会判断使用了哪种索引,使用哪种连接,优化器的作用 就是确定效率最高的执行方案。
执行器:在执行阶段,MySQL首先会判断有没有执行语句的权限,若无权限,返回没有权限的错误;若有权限,就打开表继续执行。打开表时,执行器会根据标的引擎定义,去使用该引擎提供的接口,对于有索引额表,执行的逻辑类似。
存储引擎提供数据读取和记录的接口。
更新SQL语句的日志记录
日志记录用到WAL技术,全称为Write-Ahead-logging
关键点为:先写日志,再写磁盘
redo log
redo log 是 InnoDB引擎 中的日志模块,只有InnoDB中有。
redo log 是物理日志,记录“这个数据页做了什么改动”。
是固定大小的日志模块。比如可以配置为一组4个文件,每个文件大小是1GB,那么这块日志就可以记录4GB的内容,可以理解为一个环形结构,有一个write pos标识当前记录的位置,一边写入一边后移,有一个check point记录当前要擦除的位置(当然擦除之前要写入数据文件中),也是往后推移,并且循环的。当write pos追上 check point的时候表示日志已经满了, 当前需要停下来先擦除一些记录,存到数据文件中,为需要写入的日志腾出空间。
有了redo log,InnoDB就保证数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 Crash-safe
binlog
binlog 是server层的日志,称之为归档日志。因为binlog是server层的那就代表所有的存储引擎都可以使用。
binglog是逻辑日志,记录的是这个语句的原始逻辑,比如“给ID=2这行的C字段加1”
binlog有两种模式:statement格式是记录执行的sql语句,而row格式是记录行的内容,会记录两行数据,分别是:更新前的这行数据和更新后的这行数据。
binlog 是可以追加写的日志,在日志文件写到一定大小,会切换到下一个文件记录,并不会覆盖以前的日志。
MySQL之--一条更新的SQL如何执行
标签:bing内存access字符mysq固定权限表指定擦除
SQL在MySQL数据库中是如何执行的
SQL在MySQL数据库中是如何执行的:今天和mysql视频教程栏目一起看看一条更新语句又是怎么一个执行流程。查询语句的一套执行流程,更新语句也会同样的走一步,下边我们在对照上次文章中的图来简单的看一下:首先,在执行语句前要先连接数据库,这是第一步中连接器的工作,前面我们也说过,当一
在MySQL中执行SQL语句时的几个注意点
在执行查找命令时的大小写问题 默认情况下,MySQL在执行查找时不区分字母的大小写。当你在查找时使用like ’a%’时, 默认将返回以a或者A开头的所有列值,若要在查找时区分大小写,则需要使用collate运算符来实现,具体例子如下: col_name COLLATE latin1_gen
在执行查找命令时的大小写问题
默认情况下,MySQL在执行查找时不区分字母的大小写。当你在查找时使用like ’a%’时, 默认将返回以a或者A开头的所有列值,若要在查找时区分大小写,则需要使用collate运算符来实现,具体例子如下:
col_name COLLATE latin1_general_cs LIKE ’a%’
col_name LIKE ’a%’ COLLATE latin1_general_cs
col_name COLLATE latin1_bin LIKE ’a%’
col_name LIKE ’a%’ COLLATE latin1_bin
如果想让某列在查找时始终保持区分字母大小写,,则需要用case sensitive或binary collation来定义列的特性。
当进行简单比较运算,如》=, 》, =,
和空值NULL相关的问题
空值的概念比较容易混淆,有人认为空值NULL和空 字符’’是一会时,其实这样认为是错误的,举例来说,
mysql》 INSERT INTO my_table (phone) VALUES (NULL);
mysql》 INSERT INTO my_table (phone) VALUES (’’);
上面两条语句有完全不同的意义和结果。第一句表示,向表中插入的记录中的某人的电话号码NULL,意思是还不知道这 条记录中的人的电话号码,而第二句向表中插入’’空字符,就意味着已经知道表中这条记录中的人的电话号码,这个电话号码 是’’,也可以确定此人没有正常的电话号码。
帮助处理空值NULL的方法,主要通过执行is null运算判断,is not null运算 判断,和IFNULL()函数运算来实现。在SQL中,任何与NULL发生运算关系的结果都不可能为真(即永远是假)。为了寻找NULL值 ,必须执行is null测试运算。
可以在MyISAM, InnoDB, BDB或MEMORY等存储类型的表列中含有空值时添加index,但该 index必须声明成not null,这样之后将不可以往该列中输入空值。
当使用load data infile语句载入数据时,空值NULL将 被替换成’’。使用DISTINCT, GROUP BY, 或ORDER BY时所有空值将被视为等同。像COUNT(), MIN(), SUM()等概要总结函数将忽略空值NULL。
但对一些特殊类型的列来说,比如timestamp类型和具有auto_increment属性的列:前者插入NULL是实际将插入当前时间值,向后者插入NULL时将是下个正整数序列。
mysql使用什么函数来执行mysql语句
mysql使用什么函数来执行mysql语句 定义和用法 mysql_query() 函数执行一条 MySQL 查询。 语法 mysql_query(query,connection)参数 描述 query 必需。规定要发送的 SQL 查询。注释:查询字符串不应以分号结束。 connection 可
mysql使用什么函数来执行mysql语句
定义和用法
mysql_query() 函数执行一条 MySQL 查询。
语法
mysql_query(query,connection)参数 描述
query 必需。规定要发送的 SQL 查询。注释:查询字符串不应以分号结束。
connection 可选。规定 SQL 连接标识符。如果未规定,则使用上一个打开的连接。
说明
如果没有打开的连接,本函数会尝试无参数调用 mysql_connect() 函数来建立一个连接并使用之。
返回值
mysql_query() 仅对 SELECT,SHOW,,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。
对于其它类型的 SQL 语句,mysql_query() 在执行成功时返回 TRUE,出错时返回 FALSE。
非 FALSE 的返回值意味着查询是合法的并能够被服务器执行。这并不说明任何有关影响到的或返回的行数。很有可能一条查询执行成功了但并未影响到或并未返回任何行。
提示和注释
注释:该函数自动对记录集进行读取和缓存。如需运行非缓存查询,请使用 mysql_unbuffered_query()。
例子 1
$con = mysql_connect("localhost","mysql_user","mysql_pwd");
if (!$con)
{
die(’Could not connect: ’ . mysql_error());
}
$sql = "SELECT * FROM Person";
mysql_query($sql,$con);
// 一些代码
mysql_close($con);
?》
例子 2
通过 mysql_query() 函数创建一个新数据库:
$con = mysql_connect("localhost","mysql_user","mysql_pwd");
if (!$con)
{
die(’Could not connect: ’ . mysql_error());
}
$sql = "CREATE DATABASE my_db";
if (mysql_query($sql,$con))
{
echo "Database my_db created";
}
else
{
echo "Error creating database: " . mysql_error();
}
?》
mysql怎么一次执行多条SQL语句
工具/材料:NavicatForMysql。
1、首先在桌面上,点击“NavicatForMysql”图标。
***隐藏网址***
2、然后在该界面中,点击“新建查询”按钮。
***隐藏网址***
3、之后在该界面中,输入多条SQL语句。
***隐藏网址***
4、接着在该界面中,点击上方“执行”按钮。
***隐藏网址***
5、最后在该界面中,显示多条SQL语句执行成功。
***隐藏网址***
MySQL数据库中,如何记录SQL执行语句
今天有个同事让我帮忙看一张报表, 这张报表是一个开源的系统产生出来的,后台数据库用的是MySQL.问题是一张报表的数据是错误的,当时另外一张报表是对的,所以希望能够找出后台逻辑,这样可以对报表进行修改。 这是我第一次接触MySQL,所以说需要时间研究一
今天有个同事让我帮忙看一张报表, 这张报表是一个开源的系统产生出来的,后台数据库用的是MySQL.问题是一张报表的数据是错误的,当时另外一张报表是对的,所以希望能够找出后台逻辑,这样可以对报表进行修改。
这是我第一次接触MySQL,所以说需要时间研究一下。当时的想法是像SQL Server或者Oracle抓Trace看到运行的SQL语句。
开始连接到MySQL,看了一下Help然后用Root超级用户登录,一直提示错误无法连接到Localhost,再查看到有个参数是P指定端口,然后把端口加进去就可以连接上了。
登录以后运行SHOW PROCESSLIST,但是只能看到存在的一些SPID,没有详细的SQL语句。
之后就想着找一个GUI的工具抓Trace,看到其实MySQL提供了一些Log是可以记录执行的SQL以及允许缓慢的SQL。命令如下:
-- 打开sql执行记录功能
set global log_output=’TABLE’; -- 输出到表
set global log=ON; -- 打开所有命令执行记录功能general_log, 所有语句: 成功和未成功的.
set global log_slow_queries=ON; -- 打开慢查询sql记录slow_log, 执行成功的: 慢查询语句和未使用索引的语句
set global long_query_time=0.1; -- 慢查询时间限制(秒)
set global log_queries_not_using_indexes=ON; -- 记录未使用索引的sql语句
-- 查询sql执行记录
select * from mysql.slow_log order by 1; -- 执行成功的:慢查询语句,和未使用索引的语句
select * from mysql.general_log order by 1; -- 所有语句: 成功和未成功的.
-- 关闭sql执行记录
set global log=OFF;
set global log_slow_queries=OFF;
但是我运行的时候直接报错,说“unknown system variable logoutput”。
用show variables查看当前可配置选项,没有看到global log_output对应的配置项。 而且在服务器上夜找不到MYSQL的配置文档。
再看Help文档是5.1版本的,是不是因为版本问题?带着这个疑问,查询了一下@@Version,我们的是4.1的版本,再查4.1的帮助文件,就没有上面的那些配置项了。
虽然没有抓到Trace,但是由于知道需要查询的列,所以还是找到了对应的信息,然后将错误数据做了更改Report就正确了。看来有时间也要稍微了解一下MYSQL了,毕竟很多开源的软件都是用这个数据库作为后台的。

更多文章:
sdi转mipi(为什么sdi转hdmi转换器转出来的hdmi信号采集卡无法采集)
2026年9月22日 06:50
服务器按用途可以分为几类(网络资源系统为什么要用服务器,服务器典型用途可分为哪几类)
2026年9月22日 04:10
眉山成功发射10颗卫星(中国三大卫星发射中心分别在什么地方)
2026年9月22日 04:00
电脑硬件中的chassis是什么意思?uu加速器app下载安装怎么下载
2026年9月22日 03:50
中国疫情最新消息今天分布图(今天在宁波已发现中国国内第一起埃博拉,此疾病基本死亡率90%流入中国时间比专家预估时间早十天)
2026年9月21日 22:20




