1、提示:违反并发性: UpdateCommand 影响了预期 1 条记录中的 0 条
数据库从mysql5.1升级到5.7之后,因为5.1和5.7的版本迭代很大,
在执行UPDATE的时候,数据库会根据你传递的数据源进行where条件拼接,
当前端改过数据之后,数据库的没能及时更新前端,
就会出现系统和数据库的数据不匹配,报这个错误
this.cb = new MySqlCommandBuilder();//先不附MySqlCommandBuilder
string propertyName = "ConflictOption";
Type ts = cb.GetType();
System.Reflection.PropertyInfo _findedPropertyInfo = ts.GetProperty(propertyName);
if (_findedPropertyInfo != null)
{
ts.GetProperty(propertyName).SetValue(cb, ConflictOption.OverwriteChanges, null);//关键,where子句只包含PK
}
cb.DataAdapter = adapter;//到这里才把MySqlCommandBuilder和MySqlDataAdapter关联
2、DELETE FROM A WHERE A.ID IN (SELECT AID FROM B);
mysql5.7 执行以上sql删除的时候,会遇到效率问题,
问题描述:我要通过B表中的AID当做A表的删除条件,A表的ID是有索引的,但是删除的时候,通过执行计划发现,A表的ID索引未生效,导致删除数据非常慢。
解决方案:通过表别名可以快速时间 DELETE T1 FROM A T1 WHERE T1.ID IN (SELECT AID FROM B);
解决后:未做表别名,删除时间在3-4分钟左右,做表别名后,删除时间2-3秒
参考文章:直通车