将IGNORE添加到由架构更新创建的ALTER TABLE语句中

时间:2014-05-12 18:25:36

标签: php mysql sql cakephp

我刚跳进了一个用CakePHP编写的现有项目。我使用

创建了模式文件
Console/cake schema generate

现在,用户表缺少电子邮件字段的UNIQUE关键字,因此我需要添加它。可悲的是,现在一些用户不止一次注册了他们的电子邮件,所以当我运行时

Console/cake schema update

SQL语句

ALTER TABLE `users` 
ADD UNIQUE KEY email (`email`);

失败,因为有重复的电子邮件。

有没有办法进行自动迁移,或者我必须在更新前清理数据库?感谢

1 个答案:

答案 0 :(得分:0)

您应该在更新之前清理数据库。

使用ALTER TABLE会自动删除找到重复值的行,但您无法控制保留行。

ALTER IGNORE TABLE `users` ADD UNIQUE KEY email (`email`);

http://dev.mysql.com/doc/refman/5.6/en/alter-table.html说:

  

如果指定了IGNORE,则只对一行使用唯一键上具有重复项的行。其他冲突的行将被删除。不正确的值将被截断为最接近的匹配可接受值。

此功能在MySQL 5.6中已弃用,在MySQL 5.7中已删除。