MySQL问题汇总

PHP在使用addAll函数时插入失败:

原因分析:sql拼接太长超过max_allowed_packet(默认4M),所以需要调大一些

修改方法:打开my.ini,修改max_allowed_packet即可,然后重启mysql

show VARIABLES like 'max_allowed_packet';

Caused by: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY

查看mysql是否启用ONLY_FULL_GROUP_BY

Incorrect datetime value: '0000-00-00 00:00:00' for column 'update_time' at row 1

查看mysql是否启用了NO_ZERO_DATE 

select @@global.sql_mode

如果有,则删除这个模式,找到my.ini,去掉然后重启mysql服务即可

查询数据库需要随机排序的时候可以使用 order by rand()进行随机排序。

例如select * from table order by rand();

mysql数据库中表名或字段名与SQL语言中的关键字冲突时,如何区分?

需要使用反引号(backtick)来将其括起来。例如,我们新建了一个名为group表且有一个叫level的字段,要查询“group”表中的“level”字段时,SELECT `level` FROM `group`;

mysql使用group_concat导致查询内容缺失:

解决方法:在my.ini配置中添加group_concat_max_len = 102400然后重启mysql服务;然后在命令行端输入show variables like 'group_concat_max_len';查询配置是否成功

my.ini位置:C:\ProgramData\MySQL\MySQL Server 5.7

Lock wait timeout exceeded; try restarting transaction

执行删除任务时,报了这样的错,先查询相关信息

show full PROCESSLIST;


SELECT * FROM information_schema.INNODB_TRX;


SELECT * FROM information_schema.INNODB_LOCKs;
SELECT * FROM information_schema.INNODB_LOCK_waits;

然后将阻塞的线程杀掉即可
kill 51; 

带where的delete删除数据慢的问题

CREATE INDEX mytest ON my_table(add_time);//先创建索引

delete from my_table where add_time<'2023-01-01';//再删除

mysql包含数字的字符串order时顺序混乱,如10在2前面:

将字段*1或者+0可以将MySQL字符串字段按数值排序

select * from car_task ORDER BY sort*1
select * from car_task ORDER BY sort+0

The user specified as a definer ('test'@'%') does not exist

这个错误是因为在复制数据库时把当时用test用户创建的函数赋值到了本地使用,但本地又没有test这个用户,所以在调用时就会报错了

解决方法:(1)创建一个test用户 (2)更改函数的定义者

The total number of locks exceeds the lock table size  

当我们使用一个事务操作很多数据时, MySQL 有时会报错: The total number of locks exceeds the lock table size

解决方法1(重启mysql后会还原配置):

show variables like "%_buffer%";    -- 查看innodb_buffer_pool_size的值

SET GLOBAL innodb_buffer_pool_size=1073741824(1G)  -- 修改innodb_buffer_pool_size的值

解决方法2:

打开my.ini文件

找到    innodb_buffer_pool_size=8M

将其修改为   innodb_buffer_pool_size=1024M

mysql创建表字段有6个字段是text,执行创建语句是报Row size too large (> 8126). 如果去掉其中3个后就可以正常执行,请问为什么?

问题描述:

在 MySQL 中,当你尝试创建一个表,其中包含多个 TEXT 类型的字段,并且这些字段的总大小超过了 InnoDB 存储引擎的行大小限制时,你会遇到 "Row size too large (> 8126)" 的错误。这是因为 InnoDB 存储引擎有一个限制,即单个行的最大大小不能超过 8126 字节。

解决方案:

将建表语句种的ROW_FORMAT = Compact改为ROW_FORMAT = DYNAMIC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值