【发布时间】:2018-10-31 11:45:01
【问题描述】:
我有这样的东西。我想删除列上的 unique 索引:long_col_name 和 some_other_id。由于表名和列名都很长,而且三个都有下划线,我该如何删除这个唯一索引?
mysql> SHOW INDEXES FROM long_table_name;
+--------------------------+------------+----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+--------------------------+------------+----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| long_table_name | 0 | PRIMARY | 1 | id | A | 32 | NULL | NULL | | BTREE | | |
| long_table_name | 0 | unique | 1 | long_col_name | A | 32 | NULL | NULL | | BTREE | | |
| long_table_name | 0 | unique | 2 | some_other_id | A | 32 | NULL | NULL | | BTREE | | |
+--------------------------+------------+----------+--------------+----------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3 rows in set (0.00 sec)
我正在使用 Laravel,但我只需要在 Laravel 或 MySQL 中都可以使用的东西。
唯一键是不是叫这个...long_table_name_long_col_name_some_other_id_unique?
如何在mysql中删除这样的索引?
ALTER TABLE long_table_name DROP ???;
或者使用 Laravel..
if (Schema::hasColumn('long_table_name', 'long_col_name')) {
Schema::table('long_table_name', function (Blueprint $table) {
$table->dropUnique('long_table_name_long_col_name_some_other_id_unique');
});
}
给出错误...
SQLSTATE[42000]: Syntax error or access violation: 1091 Can't DROP 'long_table_name_long_col_name_some_other_id_unique'; check that column/key exists (SQL: alter table `long_table_name` d
rop index `long_table_name_long_col_name_some_other_id_unique`)
当我这样做时,我得到了同样的错误......
$table->dropUnique(['long_col_name','some_other_id']);
有什么想法吗?
【问题讨论】:
-
This SO question 在这里可能会有所帮助。您的问题似乎与 how 删除唯一约束无关,而是如何找到约束的名称。
-
谢谢。唯一键的实际名称是“唯一”,这就是 OP 表中的内容,所以也许我不应该感到惊讶。
标签: mysql laravel-5 unique-key