MySQLテーブルからの一意制約の削除


回答:


345

一意制約もインデックスです。

まずSHOW INDEX FROM tbl_name、インデックスの名前を見つけるために使用します。インデックスの名前は、key_nameそのクエリの結果で呼び出された列に格納されます。

次に、DROP INDEXを使用できます。

DROP INDEX index_name ON tbl_name

またはALTER TABLE構文:

ALTER TABLE tbl_name DROP INDEX index_name

1
ごめんなさい、質問をする前に試してみましたが、うまくいきませんでした
Ankur Mukherjee 2010

@Ankur Mukherjee:言及するのを忘れていました:tbl_nameとindex_nameを、それぞれ実際のテーブルの名前と実際のインデックスの名前に変更する必要があります。MySQLクエリブラウザで名前を確認できます。あなたも行うことができますSHOW CREATE TABLE tbl_name
Mark Byers、2010

エラーメッセージ:「SQL構文にエラーがあります。MySQLサーバーのバージョンに対応するマニュアルで、1行目で '(player_id、year、tournament)'の近くで使用する正しい構文を確認してください
Ankur Mukherjee

1
@Ankur Mukherjee:私が提案した方法は私の意見ではそれを行うための最良の方法です。
Mark Byers、

1
私はphpMyAdminを使用して質問のどこかで読みました... @systemovichによって提供された回答は、受け入れられたものとしてマークする必要があります。
Pere

123

以下の表に示すように、要求に応じてphpMyAdminを使用DROPして、テーブルから一意の制約を設定できます。Wingspanフィールドに一意の制約が設定されています。この例では、制約の名前はフィールド名と同じです。

代替テキスト


34
インデックスセクションはデフォルトで折りたたまれており、セクションがスクリーンショットにある12pxフォントの小さな微妙なリンクによって展開されていることに注意することが重要です。しかし、あなたのおかげで、私はそれを見つけました。あなたの顔を祝福してください。+1
ジャック

11

テーブルに一意キー制約を設定できるインデックスはPRIMARYUNIQUEインデックスです。

列の一意キー制約を削除し、インデックスを保持するには、typeを使用してインデックスを削除し、再作成しますINDEX

すべてのテーブルにインデックスを付けることをお勧めしますPRIMARY


2
@thomasrutterが一意の制約を削除するとクエリのパフォーマンスに悪影響を与える可能性があるという事実に触れたため、賛成です。これは、UNIQUEインデックスを通常のに置き換えることで軽減できますINDEX
アレックス

4

phpmyadminを使用してUNIQUE制約を追加するには、そのテーブルの構造に移動し、以下を見つけてクリックします。

ここに画像の説明を入力してください

UNIQUE制約を削除するには、同じ方法で、構造に移動し、[インデックス]タブまで下にスクロールして、以下を見つけてドロップをクリックします。 ここに画像の説明を入力してください

これがうまくいくことを願っています。

楽しい ;)


このソリューションは、まさに私が探していたものでした。
Aryeh Beitz

2

WAMP 3.0の場合:Add 1 Column下のStructureをクリックすると、「-Indexes」が表示され、-Indexesをクリックして、必要なインデックスをドロップします。


2

mysqlデータベーステーブルから一意の制約を削除する場合は、ドロップインデックスを指定したalter tableを使用します。

例:

テーブルを作成しますunique_constraints(unid int、activity_name varchar(100)、CONSTRAINT activty_uqniue UNIQUE(activity_name)、primary key(unid));

alter table unique_constraints drop index activty_uqniue;

ここで、activty_uqniueは、activity_name列のUNIQUE制約です。


0

一意のキーをドロップしながら、インデックスを使用します

ALTER TABLE tbl
DROP INDEX  unique_address;

0

制約は構文で削除できます:

他の机

MySQL 8.0.19以降、ALTER TABLEは、任意のタイプの既存の制約を削除および変更するためのより一般的な(およびSQL標準)構文を許可します。制約タイプは、制約名から決定されます。 ALTER TABLE tbl_name DROP CONSTRAINT symbol;

例:

CREATE TABLE tab(id INT, CONSTRAINT unq_tab_id UNIQUE(id));

-- checking constraint name if autogenerated
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'tab';

-- dropping constraint
ALTER TABLE tab DROP CONSTRAINT unq_tab_id;

db <> fiddleデモ


-3

私のテーブル名は、一意の制約列emp_idを持つバイヤーです。今度はemp_idを削除します

ステップ1:sp_helpindexバイヤーを実行する、画像ファイルを参照する

手順2:インデックスアドレスをコピーする

ここに画像の説明を入力してください

ステップ3:テーブル購入者のドロップ制約の変更[UQ__buyers__1299A860D9793F2E]テーブル購入者のドロップ列emp_idの変更

注意:

ブロッククォート

バイヤーの代わりにテーブル名に変更します:)

ブロッククォート

制約のあるすべての列名emp_idは削除されます!


-5
  1. 最初のテーブルの削除

  2. SQLに行く

このコードを使用してください:

CREATE  TABLE service( --tablename 
  `serviceid` int(11) NOT NULL,--columns
  `customerid` varchar(20) DEFAULT NULL,--columns
  `dos` varchar(30) NOT NULL,--columns
  `productname` varchar(150) NOT NULL,--columns
  `modelnumber` bigint(12) NOT NULL,--columns
  `serialnumber` bigint(20) NOT NULL,--columns
  `serviceby` varchar(20) DEFAULT NULL--columns
)
--INSERT VALUES
INSERT INTO `service` (`serviceid`, `customerid`, `dos`, `productname`, `modelnumber`, `serialnumber`, `serviceby`) VALUES
(1, '1', '12/10/2018', 'mouse', 1234555, 234234324, '9999'),
(2, '09', '12/10/2018', 'vhbgj', 79746385, 18923984, '9999'),
(3, '23', '12/10/2018', 'mouse', 123455534, 11111123, '9999'),
(4, '23', '12/10/2018', 'mouse', 12345, 84848, '9999'),
(5, '546456', '12/10/2018', 'ughg', 772882, 457283, '9999'),
(6, '23', '12/10/2018', 'keyboard', 7878787878, 22222, '1'),
(7, '23', '12/10/2018', 'java', 11, 98908, '9999'),
(8, '128', '12/10/2018', 'mouse', 9912280626, 111111, '9999'),
(9, '23', '15/10/2018', 'hg', 29829354, 4564564646, '9999'),
(10, '12', '15/10/2018', '2', 5256, 888888, '9999');
--before droping table
ALTER TABLE `service`
  ADD PRIMARY KEY (`serviceid`),
  ADD  unique`modelnumber` (`modelnumber`),
  ADD  unique`serialnumber` (`serialnumber`),
  ADD unique`modelnumber_2` (`modelnumber`);
--after droping table
ALTER TABLE `service`
  ADD PRIMARY KEY (`serviceid`),
  ADD  modelnumber` (`modelnumber`),
  ADD  serialnumber` (`serialnumber`),
  ADD modelnumber_2` (`modelnumber`);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.