mysql 错误代码2013

mysql 错误代码2013,第1张

原因:MySQL默认connect_timeout是5秒,超过了这个时间MySQL的server端就会返回“Bad handshake”。解决办法:1.大多数时候设置"set global connect_timeout=60"是可以解决问题的我们可以通过执行“SHOW STATUS LIKE 'aborted%'”,可以观察到Variable_nameValueAborted_clients6Aborted_connects15010觉得是否要增加connect_timeout的时间,"Aborted_connects"将会随着服务端放弃客户端初始连接而增加。如果"Aborted_connects"很大,并且不断增加,就需要增加"connect_timeout".2.在MySQL的配置文件中[mysqld]添加"skip-name-resolve",减少域名解析的时间3.部署服务器端的网络要好,至少大于100Mbps/s4.如果是在调用mysql_query的时候出现的问题,那就需要把"net_read_timeout"的时间调成30秒,或者60秒,或者更大的值5.如果还不能解决问题,那估计是你的SQL语句中含有BLOB这种大类型,我们就需要增加"max_allowed_packet"的值了

mysql设置主键的代码是PRIMARY KEY (主键字段)。

如:CREATE TABLE Customer (SID integer,Last_Name varchar(30),First_Name varchar(30),PRIMARY KEY (SID))。

主关键字(主键,primary key)是被挑选出来,作表的行的唯一标识的候选关键字。一个表只有一个主关键字。主关键字又可以称为主键。

扩展资料:

永远也不要更新主键。实际上,因为主键除了唯一地标识一行之外,再没有其他的用途了,所以也就没有理由去对它更新。如果主键需要更新,则说明主键应对用户无意义的原则被违反了。

主键应当由计算机自动生成。如果由人来对主键的创建进行干预,就会使它带有除了唯一标识一行以外的意义。一旦越过这个界限,就可能产生人为修改主键的动机,这样,这种系统用来链接记录行、管理记录行的关键手段就会落入不了解数据库设计的人的手中。

MYSQL执行如下语句报错:

报错信息如下:

意思是不能在同一语句中更新select出的同一张表元组的属性值

解决方法:将select出的结果通过中间表再select一遍即可。

MYSQL手册restrictions.html#subquery-restrictions里给出了限制规则和解决方法:

其实想想也是这样的,对同一张表查的同时更新会引起数据不一致的问题吧,但是将查询结果事先放到临时表中就不会有这个问题了。

这个是我们在使用update或者delete语句时,在where条件里面加入的子查询导致的。例如如下的update语句:

修改上述语句为下面这样,该问题可以解决:

注意,这样一定要给最里面的子查询定义一个别名,不然会报另外一个错误:

自己的例子:下面这种方式报错   error code:1093

所以改成:

原因:一定要给最里面的子查询定义一个别名.

中文意思:不能先select出同一表中的某些值,再update这个表(在同一语句中)

解决: 注:把同一个table重新包一遍,重命名

原句

修改后

转自 http://www.cnblogs.com/lteal/archive/2013/05/06/3062709.html

*** 作没有问题,按照本思路对product表进行 *** 作

产生You can't specify target table '表名' for update in FROM clause错误

3、解决思路:既然Mysql不让对查询到的目标语句进行更新,那么我在它的上面在套一个子查询就可以。

将SELECT出的结果再通过中间表SELECT一遍,这样就规避了错误。需要注意的是,这个问题只出现于MySQL,MSSQL和Oracle不会出现此问题。

如下业务场景,ecs_order_shipping表里面记录了每一个订单的配送流转记录,type从11,12,21,22,23这么递进.

按理说每个订单的每一个type就出现一次,因为系统bug造成type为11、12的记录,都出现了两次或多次。对于每一个订单,如果它有两条type等于11的ecs_order_shipping记录,那么只保留第一条,其他的删除。

一、先查出来那些要被删除的记录的id组合

#查出type为11的全部记录

#分组后,记录少了,说明有重复的记录

#这样筛选出那些重复的订单

#从筛选的重复订单中,得到id最大的

二、根据这些id组合,删除他们

这样就会报错!!!Error : You can't specify target table 'ecs_order_shipping' for update in FROM clause

三、如上,修改sql语句如下即可

/****每个订单type等于11,12的记录,出现了很多重复的,要删除重复项,只留下最早的那个***/

改为下面就OK

删除重复,但保留最小id项。

删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6137181.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存