我有这样的东西。我想删除以下列的 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`)
有什么想法吗?
答案 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');
});
}