私はテーブルを持っています:
table votes (
id,
user,
email,
address,
primary key(id),
);
今度は、列 ユーザー、電子メール、アドレス を(一緒に)一意にします。
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をユニークな値として扱い、少なくとも現在マルチカラムインデックスでそれを回避するためのロジックを持っていないので、rowにNULL値がある場合、マルチカラムユニークインデックスはMySQLでは機能しません。マルチカラムインデックスの正当なアプリケーションの多くを制限するので、その振る舞いは正当ではありませんが、それはまさにその通りです...それでも、MySQLには「修正しない」というスタンプが付けられたバグですバグ追跡...
これを試しましたか?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
これはmysqlバージョン5.5.32で動作します
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
phpMyAdmin を使用して、複数列の一意のインデックスを追加できます。 (私はバージョン4.0.4でテストしました)
ターゲットテーブルの structure ページに移動します。いずれかの列に一意のインデックスを追加してください。構造ページの下部にある Indexes リストを展開して、追加したばかりの一意のインデックスを確認します。編集アイコンをクリックすると、次のダイアログでそのユニークインデックスに列を追加することができます。
MySql 5以降はこのように動作します(私はテストしたばかりです)。
例:PRODUCT_NAME、PRODUCT_VERSION 'glass'、null 'glass'、null 'wine'、1
( 'wine' 1)をもう一度挿入しようとすると、制約違反が報告されます。これが役立ちます
私はこのようにします:
CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);
私のユニークなindex_name
の慣習はTableName_Column1_Column2_Column3_uindex
です。
一意のインデックスを追加するには、以下が必要です。
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`);
将来重複を避けたい場合。 id2と言う別の列を作成します。
UPDATE tablename SET id2 = id;
それでは、2つの列にユニークを追加します。
alter table tablename add unique index(columnname, id2);
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)
);