在更改mysql中的表时获取受影响的行

时间:2013-08-19 18:14:25

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

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

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.-添加UNIQUE约束。

1 个答案:

答案 0 :(得分:1)

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

给出MyTable(KeyField int not null)然后

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

然后你必须想出与他们有关的事情。删除或重新安排。

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

例如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并在闲暇时处理它们。