如何找到唯一索引的名称?mysql数据库

mrfwxfqh  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(412)

我有这样的东西。我要删除列上的唯一索引: 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']);

有什么想法吗?

qpgpyjmq

qpgpyjmq1#

首先需要检查索引是否存在于表中,如果存在,则使用collection获取键名并将其转换为数组。检查键是否在数组中,如果不删除,则可以向相应的列添加索引。

$key_names = collect(DB::select("SHOW INDEXES FROM long_table_name"))->pluck('Key_name')->toArray();

if (in_array("long_table_name_long_col_name_some_other_id_unique", $key_names)) {
            Schema::table('long_table_name', function (Blueprint $table) {
                $table->dropIndex( 'long_table_name_long_col_name_some_other_id_unique');
            });
        }

相关问题