-
2018-07-17 10:36:36
需求
数据库为MYSQL 利用SQL实现 条件 不等于
技术选型
1 !=
2 <>
落地代码
tc_employee.emp_no <> 'E000000001'
tc_employee.emp_no != 'E000000001'
更多相关内容 -
Oracle Sql语句转换成Mysql Sql语句
2013-02-17 12:06:40Oracle Sql语句转换成Mysql Sql语句java 源码,非常简单,只要给定源oracle sql语句地址,和生成目标文件地址运行即可。 -
MySQL sql语句中变量应用
2020-09-02 10:07:40用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效。 全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名 或者 set @@global.变量名,对所有客户端生效。只有具有super权限才可以...用户变量:以“@”开始,形式为“@变量名”。用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效。
全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名 或者 set @@global.变量名,对所有客户端生效。只有具有super权限才可以设置全局变量。
会话变量:只对连接的客户端有效。
局部变量:作用范围在begin到end语句块之间。在该语句块里设置的变量。declare语句专门用于定义局部变量。set语句是设置不同类型的变量,包括会话变量和全局变量。
通过变量简单实现一下:SELECT @rank := IF(@bid = tv.ZId, @rank := @rank + 1, @rank := 1) AS RANK, @bid := tv.ZId AS ZID, tv.ZTime FROM (SELECT * FROM tb_chestnut ORDER BY ZId, ZTime) tv, (SELECT @rank := 0, @bid := NULL) z;
通过变量简单实现一下:SELECT tv.ZSort, @bid := tv.ZId, @stime := IF(@bid = tv.ZId AND tv.ZSort = 1, tv.ZTime, IF(@etime IS NULL, tv.ZTime, @etime)) AS stime, @etime := DATE_ADD(@stime, INTERVAL tv.ZNum HOUR) AS etime, tv.ZNum FROM (SELECT * FROM tb_chestnut ORDER BY ZId, ZSort) tv, (SELECT @stime := NULL, @etime := NULL, @bid := NULL) z;
注:针对于分组排名问题mysql8.0版本可以使用row_number()over(partition by desc) -
Mysql sql_mode=only_full_group_by错误解决
2020-05-06 15:30:28Mysql sql_mode=only_full_group_by错误解决说明原理层面sql层面解决方案 说明 原理层面 这个错误发生在mysql 5.7 版本及以上版本会出现的问题: mysql 5.7版本默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这...说明
原理层面
这个错误发生在mysql 5.7 版本及以上版本会出现的问题:
mysql 5.7版本默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准"。
很多从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序。sql层面
在sql执行时,出现该原因:
简单来说就是:输出的结果是叫target list,就是select后面跟着的字段,还有一个地方group by column,就是group by后面跟着的字段。由于开启了ONLY_FULL_GROUP_BY的设置,所以如果一个字段没有在target list和group by字段中同时出现,或者是聚合函数的值的话,那么这条sql查询是被mysql认为非法的,会报错误。解决方案
- 查看sql_mode的语句如下
select @@GLOBAL.sql_mode;
①解决方案一:sql语句暂时性修改sql_mode
set @@GLOBAL.sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
问题:
重启mysql数据库服务之后,ONLY_FULL_GROUP_BY还会出现。- 解决方案-(推荐解决方案二)
②解决方案二:完美解决方案。
需修改mysql配置文件,通过手动添加sql_mode的方式强制指定不需要ONLY_FULL_GROUP_BY属性,
my.cnf位于etc文件夹下,vim下光标移到最后,添加如下:sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
重启mysql服务,顺利解决。
-
Mysql Sql语句空格字符串等问题
2020-05-08 20:31:33Mysql Sql语句空格字符串等问题1、问题描述2、总结 1、问题描述 Mysql 里面SQL语句空格、字符串问题,你发现不了,但是就是运行报错。不服?来我们上源码。先来看一个删除表的。 DROP TABLE IF EXISTS 'user'; ...1、问题描述
Mysql 里面SQL语句空格、字符串问题,你发现不了,但是就是运行报错。不服?来我们上源码。先来看一个删除表的。
DROP TABLE IF EXISTS 'user';
堂堂正正删除表,没毛病,运行。1 queries executed, 0 success, 1 errors, 0 warnings 查询:DROP TABLE IF EXISTS 'user' 错误代码: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''user'' at line 1 执行耗时 : 0 sec 传送时间 : 0 sec 总耗时 : 0 sec
什么鬼。这里user
不能用字符串的引号。只能用mysql
自带的引号。DROP TABLE IF EXISTS `user`;
对比下这两种写法在
SQLYog
中的效果。执行SQL语句。1 queries executed, 1 success, 0 errors, 1 warnings 查询:DROP TABLE IF EXISTS `user` 共 0 行受到影响, 1 个警告 执行耗时 : 0 sec 传送时间 : 1.183 sec 总耗时 : 1.184 sec 注意:要查看所有警告的完整列表,请启用 工具 -> 首选项 -> 常规 -> 在信息选项卡下显示警告
再来个大招,关于空格的。CREATE TABLE `role` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_bin NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
也是堂堂正正建立一个表。没毛病。执行SQL语句。
1 queries executed, 0 success, 1 errors, 0 warnings 查询:CREATE TABLE `role` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_bin NOT NULL... 错误代码: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE `role` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `n' at line 1 执行耗时 : 0 sec 传送时间 : 0 sec 总耗时 : 0 sec
我的个亲娘嘞!还有没有王法。是的就是空格的问题。我们拿到记事本过滤一下再拷贝回来执行SQL语句。CREATE TABLE role( `id` BIGINT(20) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) COLLATE utf8_bin NOT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
大家肉眼看看和上面有什么区别,看出来的话,你是我大哥,我水土不服舅服你。执行SQL语句。
1 queries executed, 1 success, 0 errors, 0 warnings 查询:CREATE TABLE role( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_bin NOT NULL, PRIMARY KEY (`id`) ) ... 共 0 行受到影响 执行耗时 : 0.027 sec 传送时间 : 1.171 sec 总耗时 : 1.199 sec
看似一毛一样,竟然执行成功了。我们来看看SQLyog
中两段代码的差别。确实空格不同,颜色也不同。接下来看看
Navicat
的,一毛一样,还是SQLyog
好啊。
遇到这样的问题想必各位会直接哭晕在厕所了。不说了,我刚刚醒。2、总结
书上的代码直接运行绝大部分是对的,但是总有一些软件的更新使得作者无能为力。之前的API是对的,但是之后就废弃了或修改了是常有的事。所以我们需要跟踪源代码。这只是一个小小的问题,如果没有前辈的无私奉献,很难想象我们自己一天能学到多少内容。感谢各位前辈的辛勤付出,让我们少走了很多的弯路!
点个赞再走呗!欢迎留言哦!
-
临时和永久设置MySQL sql_mode非容器方式和容器方式
2020-03-26 13:48:20文章目录临时和永久设置MySQL sql_mode前言查看sql_mode临时修改sql_mode永久修改sql_mode永久修改sql_mode(容器方式)不同MySQL版本默认sql_mode的区别参考文档 临时和永久设置MySQL sql_mode 前言 MySQL的sql_mode... -
mysql sql长度限制
2017-10-27 11:16:52sql语句的长度跟数据包是成正比的,长度越长,数据包占用内存越大。 mysql通讯的数据包大小设置是1M,所以如果传过来的mysql语句内存大于1M,就会失败。 解决办法:1.注意精简sql语句,可以分批次执行,减少数据库... -
mysql sql语句长度限制
2018-11-05 14:04:28因此,咱需要修改my.ini文件(window系统下的mysql配置文件),my.conf(Linux系统下的mysql配置文件) 如果你用的是WIN的, 请在你的MySQL安装目录下查找my.ini 在Linux下你查找my.cnf 在配置里面加入 max_allowed... -
PHP+Mysql 带SQL注入源码 下载
2017-01-01 17:41:07PHP+Mysql 带SQL注入源码、下载解压部署到环境中去就行了。 -
mysql sql执行慢 分析过程
2017-09-11 17:05:38为了验证select 1 与 select 1 from ...于是总结一下,查看mysql语句运行时间的方法。 方法一: show profiles。 1. Show profiles是5.0.37之后添加的,要想使用此功能,要确保版本在5.0.37之后。 Quer -
MySQL sql语句字段截取前几位,后几位等
2021-04-28 15:24:15MySQL 字符串截取函数:left(), right(), substring(),这是我比较常用的几个方法。 1. 字符串截取:left(str, length) select left('这是要截取的内容', 3); 2. 字符串截取:right(str, length) select right('这... -
docker 下修改 mysql sql_mode和配置文件
2018-06-15 11:13:16docker run -d -p 3306:3306 --name mysql-docker -e MYSQL_ROOT_PASSWORD=root mysql:5.7 创建成功,查看一下运行状态 docker ps 可以看到我们的容器正在运行中,现在进入容器,查看一下配置文件 ... -
mysql sql长度限制解决
2017-10-02 14:20:43mysql sql长度限制问题 -
MySql SqlServer Oracle三款 主流数据库的比较
2017-06-23 16:43:38MySql SqlServer Oracle三款 主流数据库的比较 -
MySQL导入sql文件
2021-10-07 12:19:48解决办法:不使用MySQL的command,要先用cmd切换到sql文件所在目录,再导入。 步骤: 1.切换到所在目录 2.打开Mysql 3.导入sql文件 检查没有报错,导入成功 -
3.Mysql sql语句字段截取前几位,后几位等
2020-02-13 21:47:19MySQL 字符串截取函数:left(), right(), substring(),这是我比较常用的方法。 1. 字符串截取:left(str, length) select left('这是要截取的文字', 3); 2. 字符串截取:right(str, length) select right('这是... -
mysql sql 中 limit 接收变量方法
2018-09-11 13:31:32PREPARE s1 FROM 'SELECT * FROM ysxx LIMIT ?,?'; set @_limit=1; set @_limit1=(select count(1) from ysxx); EXECUTE s1 USING @_limit,@_limit1; -
MySQL和SQL是什么?MySQL和SQL之间的区别有哪些
2021-01-18 18:57:38MySQL和SQL之间的区别有哪些?很多PHP的初学者,对MySQL,MyAdmin和SQL有什么区别并不是很清楚?下面php中文网就带领大家来学习一下MySQL和SQL之间的区别。【推荐阅读:MySQL什么意思】一:什么是SQLSQL是一种数据库... -
把 mysql sql_mode 设置为严格模式的方法
2018-07-15 09:41:401.可以通过执行SQL语句来开启,但是只对当前连接有效,下面是SQL语句:set sql_mode=&...2.通过修改MySQL的配置文件,在配置文件中查找sql-mode,将此行修改成为:sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREAT... -
mysql sql语句要全部大写么 大写和小写对性能有没有影响
2017-05-05 07:30:39网上说 数据库会先把sql小写全部转化为大写 再执行 如果事先就把sql语句大写,岂不是可以提高性能 -
MySQL与SqlServer的区别
2020-11-08 14:25:19一、MySQL与SqlServer的区别 目前最流行的两种后台数据库即为Mysql 和 SQL Server。这两者最基本的相似之处在于数据存储和属于查询系统,你可以使用SQL来访问这两种数据库的数据,因为它们都支持ANSI-SQL(数据库管理... -
MySQL SQL Error: 1064, SQLState: 42000 错误
2018-12-04 18:39:06在 MySQL 中,下表中的字显式被保留。其中大多数字进制被标准 SQL 用作列名 和/或 表名( 例如,GROUP) 。少数被保留了,因为 MySQL 需要它们,( 目前) 使用 yacc 解析程序。保留字被引起来后可以用作识别符。 你不... -
mysql sql语句给当前日期加一天和减一天
2019-03-18 21:32:001.给当前日期减一天 SELECT DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 DAY),'%Y-%m-%d'); 2.给当前日期加一天 SELECT DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 1 DAY),'%Y-%m-%d'); year 年份 ...... -
mysql 中 sql 查询语句的执行过程 (mysql基本架构)
2022-01-13 20:40:34mysql总体上分为server层和存储引擎层 server层负包括连接器、缓存、解析器、优化器、执行器 存储引擎层则负责存储数据 连接器 连接器负责跟客户端建立连接、获取权限、维持和管理连接。 它首先会判断请求的账号和... -
mysql sql 根据父级id查询书所有的子孙级数据,或根据子级id查询对应的父级
2017-08-04 17:01:32-- mysql递归查询,mysql中从子类ID查询所有父类(做无限分类经常用到) SELECT T2.id, T2.channel_path FROM ( SELECT @r AS _id, (SELECT @r := parent_id FROM cm_channel WHERE id = _id) AS ... -
mysql sql语句查询指定数据在查询数据列表中排名第几
2018-10-19 18:25:10需求是这样的,我们有个排名列表,需要查询出当前...两种sql解决方案 SELECT a.* FROM (SELECT *, (@i :=@i + 1) AS No FROM jira_issue_statistics , (SELECT @i:=0) AS it WHERE year = 2018 and ... -
mysql sql 语句插入 blob字段的插入
2015-05-27 11:19:591 HEX 函数转换为 将一个字符串或数字转换为十六进制格式的字符串 2 使用 UNHEX() 把十六进制格式的字符串转化为原来的格式 使用实例 insert into tb_test(blob ) values(UNHEX(HEX(16))) 把16转换为对应的... -
Mysql SQL Mode详解 tpshop修改NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2017-06-14 14:03:27MySQL服务器能够工作在不同的SQL模式下,并能针对不同的客户端以不同的方式应用这些模式。这样,应用程序就能对服务器操作进行量身定制以满足自己的需求。这类模式定义了MySQL应支持的SQL语法,以及应该在数据上执行... -
MySQL 简介及SQL 语句
2021-05-11 15:23:232.SQL 接口:当 SQL 语句进入 MySQL 后,会先到 SQL 接口中,将传过来的 SQL 语句拆散,将底层的结果封装成 SQL 的数据格式。 3.解析器:负责将 SQL 语句进行拆分,如果语句有问题那么就返回错误,如果没问题就继续...