我有一个名为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)
)";
当有重复条目时,它会给我一个错误。
使用这些方法创建表格不会产生任何错误。在创建表之后,我已经使用phpmyadmin验证了所有这些列在这两种方法中都具有唯一索引。
答案 0 :(得分:3)
Akash,在第一个 package com.crawler.c_api.rest;
import com.crawler.c_api.provider.ResponseCorsFilter;
import java.util.logging.Logger;
import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.ServerProperties;
public class ApplicationResource extends ResourceConfig {
private static final Logger LOGGER = null;
public ApplicationResource() {
System.out.println("iansdiansdasdasd");
// Register resources and providers using package-scanning.
packages("main.java.com.crawler.c_api");
// Register my custom provider - not needed if it's in my.package.
register(ResponseCorsFilter.class);
// Register an instance of LoggingFilter.
register(new LoggingFilter(LOGGER, true));
// Enable Tracing support.
property(ServerProperties.TRACING, "ALL");
}
}
中,复合(组合)是唯一的。如果您希望它们是唯一的,请将它们分成......单独的UNIQUE键语句,如第二个。
让我们说你的第一张桌子的底部是这个
create table
然后,复合索引中存在的这两行没有任何问题:
PRIMARY KEY(id),
UNIQUE KEY(email,username,fb_id,google_id)