分类 MySql 下的文章

批量更新数据报错, 包括额外套一层也会报错, 网上找了圈没有找到答案

update tb1
,(select id from tb1 where id in (123)) daa
set tb1.value=1
where tb1.id=daa.id

按我下面的写法即可解决

update tb1
,(select id from tb1 where id in (123) limit 9999999) daa
set tb1.value=1
where tb1.id=daa.id

  • Row 224 was cut by GROUP_CONCAT()
# 查询当前全局配置, 尝试修改全局配置, 如果没有全局配置权限, 可以修改当前连接的配置
SELECT @@global.group_concat_max_len;
SET GLOBAL group_concat_max_len=102400;
SET group_concat_max_len=1024;

参考文献

https://www.cnblogs.com/zhoumin6012/p/9841738.html

1、先删除之前安装出错的MySQL
cmd---->切换到C:\Program Files\MySQL\MySQL Server 8.0\bin(mysql默认安装路径)
输入命令:mysqld --remove mysql
再输入命令:mysqld --remove mysql80

2、初始化设置
输入:mysqld --initialize-insecure --user=mysql

PS: 我的在这一步能看到了报错,在my.ini增加2行配置解决了
lc-messages = en_US
lc-messages-dir = 'D:/s/mysql/MySQL/share'

3、创建服务
输入: mysqld --install mysql

4、启动服务
输入: net start mysql

5、登录mysql
输入:mysql -uroot -p
PS: 我这里是没有密码,所以直接登录就可以,如果存在密码错误,添加skip-grant-table,修改密码

6、设置密码
输入:alter user'root'@'localhost' IDENTIFIED BY 'MyPass@123456';
PS: 8.0版本密码中必需包含大小写字母、数字和字符

7、设置远程连接密码
输入:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyPass@123456';
PS:更改了mysql_native_passwd密码,等同更改用户原始密码。MYSQL 8.0 内以mysql-native_passwd为主

mysql8
ALTER USER 'root'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'root';

8、刷新权限
输入:flush privileges;

  • 关闭binlog
查询当前状态
show variables like 'log_bin';  
输出如下
Variable_name  Value   
-------------  --------
log_bin        ON    

vim /etc/mysql/my.cnf
在[mysqld]后面增加一行
skip-log-bin

增加了配置后, 重新查询如下
Variable_name  Value   
-------------  --------
log_bin        OFF     

时间戳为 0000-00-00 00:00:00 的处理办法

SHOW VARIABLES LIKE 'sql_mode' ; 
SET @@sql_mode="STRICT_TRANS_TABLES";
SET GLOBAL SQL_MODE="STRICT_TRANS_TABLES"; # 需要权限
设置后再设置非法时间戳, 譬如2000-02-30 时会直接报错阻止设置了

参考链接: https://www.cnblogs.com/john-xiong/p/12099842.html

Unknown column 'date_joins.tv' in 'on clause'

SELECT tv AS '日期'
,(SELECT COUNT(1) FROM user_center.`project_users` pu
INNER JOIN (
SELECT DISTINCT use_uid FROM course.`course_order_items`
WHERE pid=1 AND state=1 AND price>1
AND complete_at>=date_joins.tv 
AND complete_at<date_add(date_joins.tv,interval 1 month)
UNION 
SELECT DISTINCT uid FROM common.`virtual_good_orders`
WHERE pid=1 AND state=2 AND price_total>2000
) b ON pu.pid=1 AND pu.uid=b.use_uid 

and pu.pro_created_at>=date_joins.tv AND pu.pro_created_at<date_add(date_joins.tv,interval 1 month)) AS '学习人数'
FROM report.`date_joins` WHERE ty='d' AND tv>='2020-01-01' AND tv<now() and tv like '%-%-01'
SELECT tv AS '日期'
,(SELECT COUNT(1) FROM user_center.`project_users` pu
INNER JOIN (
SELECT DISTINCT use_uid FROM course.`course_order_items`
WHERE pid=1 AND state=1 AND price>1
AND complete_at>=date_joins.tv 
AND complete_at<date_add(date_joins.tv,interval 1 month)
UNION 
SELECT DISTINCT uid FROM common.`virtual_good_orders`
WHERE pid=1 AND state=2 AND price_total>2000
) b ON pu.pid=1 AND pu.uid=b.use_uid 

-- 下面的那个 WHERE 原来是AND, 改为where就可以执行了
WHERE pu.pro_created_at>=date_joins.tv AND pu.pro_created_at<date_add(date_joins.tv,interval 1 month)) AS '学习人数'
FROM report.`date_joins` WHERE ty='d' AND tv>='2020-01-01' AND tv<now() and tv like '%-%-01'

第二条语句就可以执行, 嵌套字段的使用不可以用于条件中的 ON 里面的 AND, 可以 ON 其中的部分AND改为 WHERE