質問

テーブルがあります:

table votes (
    id,
    user,
    email,
    address,
    primary key(id),
);

列を user、email、address を一意に(一緒に)したいです。

MySqlでこれを行うにはどうすればよいですか

  • もちろん、例は単なる...例です。そのため、セマンティクスについて心配しないでください。
役に立ちましたか?

解決

ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);

他のヒント

MySQLテーブルがあります:

CREATE TABLE `content_html` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_box_elements` int(11) DEFAULT NULL,
  `id_router` int(11) DEFAULT NULL,
  `content` mediumtext COLLATE utf8_czech_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_box_elements` (`id_box_elements`,`id_router`)
);

およびUNIQUE KEYは期待どおりに機能し、id_box_elementsおよびid_routerの複数のNULL行を許可します。

MySQL 5.1.42を実行しているので、おそらく上記の問題について何らかの更新があったでしょう。幸いにも機能し、うまくいけばそのままになります。

MySQLはNULLを一意の値として扱い、少なくとも現在、複数列のインデックスでそれを回避するロジックがないため、行にNULL値がある場合、MySQLでは複数列の一意のインデックスは機能しません。はい、複数列インデックスの正当なアプリケーションの多くを制限するため、動作は異常です。しかし、それはそうです...現時点では、「修正しない」とスタンプされたバグです。 MySQLバグ追跡...

これを試しましたか?

UNIQUE KEY `thekey` (`user`,`email`,`address`)

これはmysqlバージョン5.5.32で機能します

ALTER TABLE  `tablename` ADD UNIQUE (`column1` ,`column2`);

phpMyAdmin を使用して、複数列の一意のインデックスを追加できます。 (バージョン4.0.4でテストしました)

ターゲットテーブルの構造ページに移動します。列の1つに一意のインデックスを追加します。構造ページの下部にある[インデックス]リストを展開して、追加した一意のインデックスを表示します。編集アイコンをクリックすると、次のダイアログでその一意のインデックスに列を追加できます。

MySql 5以降は次のように動作します(テストしたばかりです):

  • null許容列を含む一意制約を定義できます。制約一意(A、B)を定義するとします。ここで、AはNULL不可ですが、Bは
  • そのような制約を評価する場合、必要な回数(A、null)持つことができます(同じA値!)
  • 1つ(A、null B以外)のペアしか持てません

例: PRODUCT_NAME、PRODUCT_VERSION 「ガラス」、null 「ガラス」、null 「ワイン」、1

(「ワイン」1)をもう一度挿入しようとすると、制約違反が報告されます これがお役に立てば幸いです

このようにします:

CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);

一意の index_name の慣例は TableName_Column1_Column2_Column3_uindex です。

将来的に重複を避けたい場合。 id2という別の列を作成します。

UPDATE tablename SET id2 = id;

2つの列に一意を追加します:

alter table tablename add unique index(columnname, id2);

一意のインデックスを追加するには、以下が必要です:

1)table_name
2)index_name
3)インデックスを追加する列

ALTER TABLE  `tablename` 
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);

あなたの場合、次のように一意のインデックスを作成できます:

ALTER TABLE `votes`ADD 
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);

mysqlでテーブルを作成する場合は、次を使用します。

create table package_template_mapping (
mapping_id  int(10) not null auto_increment  ,
template_id int(10) NOT NULL ,
package_id  int(10) NOT NULL ,
remark      varchar(100),
primary key (mapping_id) ,
UNIQUE KEY template_fun_id (template_id , package_id)
);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top