一:
触发器报错:“Not allowed to return a result set from a trigger”。
创建触发器语句如下:
CREATE TRIGGER
newproduct
AFTER INSERT ON
products
FOR EACH ROW
SELECT 'Product added' ;
此时报错:
Not allowed to return a result set from a trigger
解决方法:加上 into @‘变量’,MySQL5早期版本是支持的,现在的新版本已经不支持这种写法。触发器不允许出现SELECT *的形式,因为这会返回一个结果集,而这是不允许的,所以会报出这种错。
触发器中可以使用SELECT INTO的形式来进行查询,将结果放进一个变量,然后查询该变量。
CREATE TRIGGER
newproduct
AFTER INSERT ON
products
FOR EACH ROW
SELECT 'Product added'
INTO @arg;
返回结果如下:
二:Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre
问题出现的原因:
MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前的行为的说明,请参见“MySQL 5.6参考手册”。)
解决方法一:
用sql查询:
select @@global.sql_mode
查询出来的值为:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
去掉ONLY_FULL_GROUP_BY,重新设置值。
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’;
解决方法二:
vim /etc/mysql/conf.d/mysql.cnf
添加设置:
[mysqld]
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(service mysql restart)。