目录
本周开始学习数据库相关知识,首先学习的是建表操作。检查了很多次,确定代码无误,且刷新了很多次,都没有成功出现新建的表格。于是向老师求助,在断开链接数据库又重新链接数据库后,出现了新建的表格。后又重复尝试执行命令,insert插入数据、update更新数据、delete删除数据,此类语句都会报错1055,非常苦恼,影响日常使用,所以第一次尝试自己查询网上的方法并独立解决问题。同时也把自己查询的原因及解决办法记录下来,供大家参考。
一、报错问题描述:
在MySQL数据库查询下,执行SQL建表命令或插入数据命令。错误提示示例:
二、报错问题原因:
在MySQL 5.7以后,sql_mode中默认设置中有ONLY_FULL_GROUP_BY,SQL句子未通过ONLY_FULL_GROUP_BY词义查验,因此导致了报错。
ONLY_FULL_GROUP_BY规定select句子中查询出的列必须是确立的(其他语句也是如此)。
三、解决报错的思路:
解决报错的方法有两种:第一种便是把这类限制除掉,让我们的SQL语句像5.7版本之前的那样能跑。第二种就是修改sql:依照规定要求的标准重新写整个项目中全部会报错的sql。很明显的是,第二种方法会带来很大的复杂度,而且万一某个SQL语句改写不到位,会继续报错,所以这种方案也具有一定的风险。
因此,我们最好是选择第一种方式,试试看能否将此类限制永久的去掉,这样以后使用过程中更为方便。而如何去掉,请仔细查看以下解决方案。
四、解决方案:
1.永久解决
1)在MySQL下执行语句SELECT @@sql_mode
2)将查询结果中的ONLY_FULL_GROUP_BY除掉随后拷贝,找到MySQL的配置文件并打开,将sql_mode的值设定为拷贝的值
(若沒有sql_mode在[mysqld]正下方加上一行就可以)。
MySQL配置文件所在位置:安装版可根据windows服务相匹配的mysql开机启动项,查询其相匹配的属性->exe文件的路径,获得my.ini文件的路径。
免安装版一般在其根目录下。(默认文件名是my-default.ini,务必将其改成my.ini才可以起效)。
3)再次开启MySQL服务即可生效
2.暂时关掉ONLY_FULL_GROUP_BY
1)首先,利用用管理员身份运行cmd,进到到mysql的安装路径下的bin文件目录,用管理员账号登录mysql数据库。
2)随后输入命令mysql –h localhost –uroot –p在其中-h是特定IP地址或IP地址,-u是特定客户,-p是指用登录密码。
3)然后输入命令select @@global.sql_mode;能够查询全局sql_mode的值。请注意:这里的“;”是不可以省去的。
4)再键入 set @@global.sql_mode = (select replace(@@global.sql_mode,‘ONLY_FULL_GROUP_BY’,’’));执行后就可以修改@@global.sql_mode。
5)最后再次连接一下数据库,执行语句,就不会报错了。但是注意:这种方法是一次性的,只能解决一次,如果重启数据库,它又会再次报错的。
以上就是对于MySQL 1055报错的总结和解决的方案,希望能够解决你的问题。