2015-09-05 82 views
1

我有一個表稱爲具有4個唯一列的用戶,當我插入數據在email它不會給我任何錯誤,並插入數據,即使當該列中已存在相同的值。插入重複的數據與唯一索引

這裏是我的數據庫結構:

$user = "CREATE TABLE IF NOT EXISTS users(
id INT UNSIGNED AUTO_INCREMENT, 
fb_id BIGINT UNSIGNED NULL, 
google_id BIGINT UNSIGNED NULL, 
fname VARCHAR(255) NOT NULL, 
lname VARCHAR(255) NULL, 
email VARCHAR(320) NOT NULL, 
username VARCHAR(20) NULL, 
password VARCHAR(255) NULL, 
access_token TEXT NULL, 
type ENUM('facebook','google','site') NOT NULL, 
gender ENUM('m','f','o') NULL, 
reg_date DATE NOT NULL, 
token_expire DATETIME NULL, 
PRIMARY KEY(id), 
UNIQUE(email,username,fb_id,google_id) 
)"; 

但是,當我創建我的結構如下表:

$user = "CREATE TABLE IF NOT EXISTS users(
id INT UNSIGNED AUTO_INCREMENT, 
fb_id BIGINT UNSIGNED NULL UNIQUE, 
google_id BIGINT UNSIGNED NULL UNIQUE, 
fname VARCHAR(255) NOT NULL, 
lname VARCHAR(255) NULL, 
email VARCHAR(320) NOT NULL UNIQUE, 
username VARCHAR(20) NULL UNIQUE, 
password VARCHAR(255) NULL, 
access_token TEXT NULL, 
type ENUM('facebook','google','site') NOT NULL, 
gender ENUM('m','f','o') NULL, 
reg_date DATE NOT NULL, 
token_expire DATETIME NULL, 
PRIMARY KEY(id) 
)"; 

它給了我一個錯誤時,有一個重複的條目。

使用這些方法中的任何一種創建表不會產生任何錯誤。在創建表格後,我使用phpmyadmin驗證了所有這些列在兩種方法中都有唯一的索引。

+0

'UNIQUE(電子郵件,用戶名,fb_id ,google_id)'不會使**每一個**都是唯一的,而是**它們的組合**。這意味着如果其他3個值中的任何值不同,則可以根據需要多次插入相同的電子郵件。 –

回答

3

Akash,在第一個create table中,組合(組合)是唯一的。如果你希望它們單獨是獨一無二的,將它們分開......獨立的UNIQUE鍵語句,就像第二個一樣。

比方說,你的第一個表的底部閱讀本

PRIMARY KEY(id), 
UNIQUE KEY(email,username,fb_id,google_id) 

再有什麼不對現有的綜合指數這兩行:

'[email protected]','Akash',101,102 

and 

'[email protected]','Akash2',101,102 
+0

你能通過複合組合找到什麼? –

+0

跨越所有複合列的獨特組合,是更清晰還是模糊? – Drew

相關問題