【问题标题】:Getting the affected rows when altering a table in mysql在mysql中更改表时获取受影响的行
【发布时间】:2013-08-19 18:14:24
【问题描述】:

当使用以下命令更改表时,我需要检索受影响行的报告:

1.- 更换引擎:

ALTER TABLE <table> ENGINE=INNODB;

2.- 添加约束:

ALTER TABLE nombre_tabla ADD PRIMARY KEY símbolo_clave_foránea;
ALTER TABLE nombre_tabla DROP PRIMARY KEY símbolo_clave_foránea;

ALTER TABLE nombre_tabla ADD FOREIGN KEY símbolo_clave_foránea;
ALTER TABLE nombre_tabla DROP FOREIGN KEY símbolo_clave_foránea;

3.- 添加唯一约束。

【问题讨论】:

  • 你的意思是哪些行在约束方面会失败?
  • 是的@TonyHopkinson 显示某种警告的受影响行和那些会失败的行。

标签: mysql report constraints unique-constraint rows-affected


【解决方案1】:

主键或唯一键失败是查找重复项,如果其中有空值,则需要先对其进行排序。

例如给定MyTable(KeyField int not null) 然后

Select KeyField From MyTable
inner join (Select KeyField,Count() as NumberOfTimes Group By KeyField) Duplicates
Where NumberOfTimes > 1

那么你必须想出一些与他们有关的事情。删除或重新设置密钥。

外键只是一个外连接查询,其中键为空

例如给定MyTable (KeyField int not null, ForeignKeyField int not null)MyLookUpTable(LookUpkey int not null, Description VarChar(32) not null) 然后

Select KeyField From MyTable 
Left Join MyLookUpTable On MyTable.LookUpField = MyLookUpTable.LookUpKey
Where MyTable.LookUpField Is Null

同样,您必须决定如何处理它们。您可以删除它们,但这可能会有所帮助。 一种方法是在查找表中插入“缺失”记录,抓住它的键,然后使用连接进行更新。所以假设密钥是 999

Update m
Set LookUpField = 999
From MyTable m 
Left Join MyLookUpTable On m.LookUpField = MyLookUpTable.LookUpKey
Where m.LookUpField Is Null

现在你可以挖掘 999 并在闲暇时处理它们。

【讨论】:

  • 嗯,你需要这样做才能拥有一个外键,但除此之外,与你所要求的无关。
猜你喜欢
  • 2019-02-19
  • 2012-02-11
  • 2011-06-11
  • 1970-01-01
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 2019-11-20
  • 2011-10-03
相关资源
最近更新 更多