如何找到唯一索引的名称?的MySQL

时间:2018-10-31 11:45:02

标签: mysql laravel-5 unique-key

我有这样的东西。我想删除以下列的 unique 索引:<select id="getFname"> <option value="1">Jay</option> <option value="4">Sam</option> <option value="0">Admin</option> </select> <div id="admDivCheck" style="display:none;"> admin selected </div> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script> <script> $("#getFname").on("change",function(){"0"===$(this).val()?$("#admDivCheck").show():$("#admDivCheck").hide()}); </script> long_col_name。由于表名和列名都非常长,并且三个名称中都有下划线,因此如何删除此唯一索引?

some_other_id

我正在使用Laravel,但我只需要在Laravel或MySQL中都可以使用的东西。

唯一键是否称为... 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)

我如何在mysql中删除这样的索引?

long_table_name_long_col_name_some_other_id_unique

或使用Laravel。

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`)  

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

首先,您需要检查表中是否存在索引,如果是,则使用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');
            });
        }