2012-04-04 5 views
1

MySQLでVARCHARカラムの制約を設定することはできますか?MySQLのVARCHARカラムの制約を設定することはできますか?

私は、特定の値の複数の行を許可しません。

______________ 
    | MyTable | 
    -------------- 
    | pk id INT | 
    | name VARCHAR | 

「ピーター」と同じ名前の2つの行を挿入した場合は、エラーが発生します。したがって、制約は、すでに「ピーター」が格納されているかどうかだけをチェックする必要があります。しかし、他の値の複数の行が動作する必要があります。

INSERT INTO MyTable VALUES (1, "peter"); 
INSERT INTO MyTable VALUES (2, "peter"); // This should fail 
INSERT INTO MyTable VALUES (3, "steven"); 
INSERT INTO MyTable VALUES (4, "steven"); // Shall succeed 

MySQLでは何らかの方法で特定の値をチェックすることはできますか?

+1

'where'句の一部としてcheck(name <> 'peter')行を挿入しているとき他のものはリストと一致するかどうかを確認するためにcartisan製品を使用します。 – Milee

+0

は意図されたstevensかtypoの両方で同じidですか? – oezi

+1

ALTER TABLE MyTable ADDユニークインデックス 'name'(' name'); – hjpotter92

答えて

2

なし、制約を使用可能ではないthatsの。 nameunique constraintを追加することもできますが、これは "ピーター"だけでなく、すべての重複したエントリを優先します。それはあなた自身でこの追加チェックをしなければならないと言われています。

+0

[こちらは英語のリンクです](http://dev.mysql.com/doc/refman/5.1/en/constraint-primary-key.html) – Austin

0

UNIQUEに設定します。重複した値を挿入しようとするMySQLクエリは失敗します。

INSERT: insert into <table> (<columns>,unique(<unique column>));

UPDATE: alter table <table> add unique(<unique column>));

+0

はい、それはその列のすべてのエントリを一意にします。私はちょうど1つの価値をユニークにしたい。上記の例では、「ピーター」をユニークにしたいが、「スティーブン」にしたくない。 – Rox

+0

ああ、 'Peter 'が重複しないようにロックしたいが、複数の' Steve'エントリーを許可したいのですか? – Francisc

+0

まさに!しかし、おそらくそれはoeziが言ったように不可能です:-) – Rox

関連する問題