我有一个表称为具有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验证了所有这些列在两种方法中都有唯一的索引。
'UNIQUE(电子邮件,用户名,fb_id ,google_id)'不会使**每一个**都是唯一的,而是**它们的组合**。这意味着如果其他3个值中的任何值不同,则可以根据需要多次插入相同的电子邮件。 –