[前][次][番号順一覧][スレッド一覧]

mysql:1980

From: とみたまさひろ <とみたまさひろ <tommy@xxxxxxxxxx>>
Date: Tue, 09 May 2000 21:07:34 +0900
Subject: [mysql 01980] Re: AUTO_INCREMENT

とみたです。

At Tue, 09 May 2000 20:24:33 +0900,
moeru@xxxxxxxxxx (moeru) wrote:

> ぼくは、データベースでの「一意」という意味がよく分かってないみたいです(^^;
> 
> 「一意」がPRIMARY KEY(id)などによって
> usersテーブル全体に意味を持たせることができるのか
> usersテーブルの中の各フィールドにのみなのかということです。

RDBMS でいうところの「一意」または「ユニーク」というのは、「そのフィール
ドにその値を持つレコードは、そのテーブルには1レコードしか存在しない」と
いうことです。

つまり、UNIQUE (id) とした場合は、id という名前のフィールドに、ダブった
値を登録することができなくなるので、

	mysql> insert into users (id, username) values (99, "hoge");
	mysql> insert into users (id, username) values (99, "fuga");

とすると2回目のはエラーになります。

UNIQUE (id, username) とした場合は、id と username を合わせた値が一意に
なるので、

	mysql> insert into users (id, username) values (99, "hoge");
	mysql> insert into users (id, username) values (99, "fuga");

はエラーになりません("99hoge" と "99fuga" は異なるから)。

PRIMARY KEY というのは、MySQL の場合は最初の UNIQUE インデックスという意
味でしかないと思います。


> つまり、このusersテーブルの中で、
> UNIQUE (username)とすれば、この後登録されるであろうユーザー名に
> 同じ名前を使うことができないと理解すればいいでしょうか。

そうですね。

> ぼくは、このことをPHPのプログラム側で解決しようと思っていたのですが
> これは、データベースの設計上そうしたほうがいいでしょうか。(実行速度的にとか。。)

私だったら、PHP でチェックしてエラーを出しますね。MySQL の insert が失敗
したときにどのようなエラーなのかを判別するのは面倒なので… (^^;

> であれば、
> 
> CREATE TABLE users (
> 	id INT NOT NULL AUTO_INCREMENT,
> 	username VARCHAR(20) NOT NULL,
> 	password VARCHAR(20),
> 	email VARCHAR(50) NOT NULL,
> 	PRIMARY KEY(id)
> 	UNIQUE (username,email)
> );
> 
> で
> 	INDEX (username) ,
> 	INDEX (email) ,

> はいらないってことですか?
> で
> usernameに今後同じ名前を許可しない。
> emailに今後同じ名前を許可しない。

その場合は UNIQUE (username), UNIQUE (email) としないといけませんね。

> 
> それと、うちの場合、詐欺防止に必死なんですが(^^;
> 
> username-Aの人がemail-Aで登録されたとします。
> その後
> username-Aの人がusername-Bで登録して
> username-B email-A
> 
> を許可したくない場合
> 
> UNIQUE (username,email)
> 
> でいいでしょうか?

これも UNIQUE (username), UNIQUE (email) でしょう。

--
とみたまさひろ <tommy@xxxxxxxxxx>

[前][次][番号順一覧][スレッド一覧]

      1977 2000-05-08 23:37 [<moeru@xxxxxxxxxx>  ] AUTO_INCREMENT                          
      1978 2000-05-08 23:53 ┗[とみたまさひろ <tomm]                                       
      1979 2000-05-09 20:24  ┗[<moeru@xxxxxxxxxx>  ]                                     
->    1980 2000-05-09 21:07   ┗[とみたまさひろ <tomm]                                   
      1982 2000-05-09 21:39    ┗[<moeru@xxxxxxxxxx>  ]