我有这样的东西。我要删除列上的唯一索引: 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 ???;
或者用拉威尔。。
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']);
有什么想法吗?
1条答案
按热度按时间qpgpyjmq1#
首先需要检查索引是否存在于表中,如果存在,则使用collection获取键名并将其转换为数组。检查键是否在数组中,如果不删除,则可以向相应的列添加索引。