Suppression d'une contrainte unique de la table MySQL

Réponses:

345

Une contrainte unique est également un index.

Utilisez d'abord SHOW INDEX FROM tbl_namepour connaître le nom de l'index. Le nom de l'index est stocké dans la colonne appelée key_namedans les résultats de cette requête.

Ensuite, vous pouvez utiliser DROP INDEX :

DROP INDEX index_name ON tbl_name

ou la syntaxe ALTER TABLE :

ALTER TABLE tbl_name DROP INDEX index_name
Mark Byers
la source
1
Désolé monsieur, je l'avais essayé avant de poser la question, mais cela ne fonctionne pas
Ankur Mukherjee
@Ankur Mukherjee: J'ai oublié de mentionner: vous devez remplacer tbl_name et index_name par le nom de votre table réelle et le nom de l'index réel, respectivement. Vous pouvez voir les noms dans le navigateur de requêtes MySQL. Vous pouvez aussi le faire SHOW CREATE TABLE tbl_name.
Mark Byers
Message d'erreur: "Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de '(player_id, année, tournoi)' à la ligne 1"
Ankur Mukherjee
1
@Ankur Mukherjee: La façon dont j'ai suggéré est à mon avis la meilleure façon de le faire.
Mark Byers
1
J'ai lu quelque part dans la question en utilisant phpMyAdmin ... La réponse fournie par @systemovich devrait être marquée comme acceptée.
Pere
123

Vous pouvez DROPcréer une contrainte unique à partir d'une table à l' aide de phpMyAdmin comme demandé, comme indiqué dans le tableau ci-dessous. Une contrainte unique a été placée sur le champ Envergure. Le nom de la contrainte est le même que le nom du champ, dans ce cas.

texte alternatif

systemovich
la source
34
Il est important de noter que la section des index est réduite par défaut et est développée par un petit lien subtil en police 12px où la section est dans la capture d'écran. Mais grâce à toi, je l'ai trouvé. Bénissez votre visage. +1
Jack
11

Les index capables de placer une contrainte de clé unique sur une table sont les index PRIMARYet UNIQUE.

Pour supprimer la contrainte de clé unique sur une colonne mais conserver l'index, vous pouvez supprimer et recréer l'index avec le type INDEX.

Notez que c'est une bonne idée que toutes les tables aient un index marqué PRIMARY.

thomasrutter
la source
2
Voté parce que @thomasrutter a évoqué le fait que la suppression d'une contrainte unique peut nuire aux performances des requêtes - et cela peut être atténué en remplaçant l' UNIQUEindex par un régulier INDEX.
Alex
4

Pour ajouter une contrainte UNIQUE à l'aide de phpmyadmin, accédez à la structure de ce tableau et trouvez ci-dessous et cliquez dessus,

entrez la description de l'image ici

Pour supprimer la contrainte UNIQUE, de la même manière, allez dans la structure et faites défiler jusqu'à l'onglet Index et trouvez ci-dessous et cliquez sur drop, entrez la description de l'image ici

J'espère que cela fonctionne.

Prendre plaisir ;)

Umesh Patil
la source
cette solution était exactement ce que je cherchais.
Aryeh Beitz
2

Pour WAMP 3.0: Cliquez sur Structure ci-dessous, ajoutez 1 colonne, vous verrez «- Index» Cliquez sur -Indexes et supprimez l'index que vous souhaitez.

Jeffry Louis
la source
2

Si vous souhaitez supprimer des contraintes uniques de la table de base de données mysql, utilisez alter table with drop index.

Exemple:

créer une table unique_constraints (unid int, nom_activité varchar (100), CONSTRAINT activty_uqniue UNIQUE (nom_activité), clé primaire (unid));

alter table unique_constraints drop index activty_uqniue;

activty_uqniue est UNIQUE pour ACTIVITY_NAME colonne.

Manjunatha HC
la source
0

tout en laissant tomber la clé unique, nous utilisons l'index

ALTER TABLE tbl
DROP INDEX  unique_address;
Hamza.S
la source
0

La contrainte pourrait être supprimée avec la syntaxe:

MODIFIER TABLE

Depuis MySQL 8.0.19, ALTER TABLE permet une syntaxe plus générale (et standard SQL) pour supprimer et modifier les contraintes existantes de tout type, où le type de contrainte est déterminé à partir du nom de la contrainte: ALTER TABLE tbl_name DROP CONSTRAINT symbol;

Exemple:

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;

démo db <> violon

Lukasz Szozda
la source
-3

mon nom de table est acheteurs qui a une colonne de contrainte unique emp_id maintenant je vais supprimer l'emp_id

étape 1: exécutez les acheteurs sp_helpindex, consultez le fichier image

étape 2: copier l'adresse d'index

entrez la description de l'image ici

étape3: modifier la contrainte de suppression des acheteurs de table [UQ__buyers__1299A860D9793F2E] modifier la colonne de suppression des acheteurs de table emp_id

Remarque:

Blockquote

au lieu d'acheteurs, changez-le en nom de table :)

Blockquote

c'est tout le nom de colonne emp_id avec contraintes qui est supprimé!

vignesh .B
la source
-5
  1. Premier tableau à supprimer

  2. aller à SQL

Utilisez ce code:

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`);
RAM
la source