Mysql 使用唯一索引插入重复数据

Mysql 使用唯一索引插入重复数据,mysql,Mysql,我有一个名为users的表,它有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

我有一个名为users的表,它有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)
)";
但是,当我创建具有以下结构的表时:

$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验证所有这些列在这两种方法中都具有唯一的索引。

Akash,在第一个
创建表
中,组合(组合)是唯一的。如果你想让它们各自独一无二,就把它们分成。。。单独的唯一关键语句,如第2条

假设你第一张桌子的底部读这个

PRIMARY KEY(id),
UNIQUE KEY(email,username,fb_id,google_id)
那么,复合索引中存在的这两行没有问题:

'akash@gmail.com','Akash',101,102

and

'akash@gmail.com','Akash2',101,102

你能解释一下吗?所有组合栏的唯一组合,是更清晰,还是仍然模糊?
unique(电子邮件、用户名、fb\u id、google\u id)
不会使它们每个都是唯一的,而是它们的组合。这意味着,如果其他3个值中的任何一个不同,您可以插入相同的电子邮件任意次数。