2017-02-16 80 views
0

在我的MySQL表我已经给了主键Mysql主键不工作?

id (int)(auto_incremet) 
mobile_number(bigint) 
email(varchar) 

但我可以再次输入相同的电子邮件地址和手机号码。它没有返回错误。我希望电子邮件和手机号码在我的表格中独一无二。但是,即使在设置了主键之后,重复值也是允许的。

我使用的代码是

create table sample(id int(11) auto_increment, 
      mobile bigint(20),email varchar(50),primary key(id,mobile,email)); 

在描述它显示为所有三个主键..

我走到哪里错了..建议我sollution请..谢谢

+0

貌似有你'创建table'语句语法错误。 – yeputons

+0

yup !!创建表缺少右括号:-) –

+0

我更新了..实际上错误是当我插入值 – Jithin

回答

3

您的方式只需要组合id,mobile_numberemail必须是唯一的。

使用的emailmobile_numberid作为主键和设置其他唯一约束:

CREATE TABLE my_db.sample (
    id INT NOT NULL AUTO_INCREMENT, 
    mobile_number BIGINT(20) NULL, 
    email VARCHAR(45) NULL, 
    PRIMARY KEY (id), 
    UNIQUE INDEX mobile_number_UNIQUE (mobile_number ASC), 
    UNIQUE INDEX email_UNIQUE (email ASC)); 
+0

谢谢.. ..任何建议添加唯一的现有表?像alter table – Jithin

+0

['CREATE UNIQUE INDEX ...'](https://dev.mysql.com/doc/refman/5.7/en/create-index.html) –

0
CREATE TABLE sample(id INT(11) AUTO_INCREMENT, 
      mobile BIGINT(20),email VARCHAR(50),PRIMARY KEY(id,mobile,email)); 

您的SQL语句的最后面缺少括号

3

在这里,你正在创建通过使用ID,移动和电子邮件的组合的主键。因此,根据主键的定义,这三个属性(ID,手机,电子邮件)组合用于区分任何两行,并且每行的ID为,因为它被设置为自动递增,所以即使电子邮件和手机两行或更多行的值是相同的,id,mobile和email的组合是唯一的。

为了得到你想要的,你可以像这样

CREATE TABLE sample (
    id INT NOT NULL AUTO_INCREMENT, 
    mobile_number BIGINT(20) NULL UNIQUE, 
    email VARCHAR(50) NULL UNIQUE, 
    PRIMARY KEY(id) 
); 
1

primary key(id,mobile,email)什么意思是这三根柱子的元组是主键。这意味着,所有元组在表应该是不同的,即不能有两排相同idmobileemail。但是,如果两行具有相同的email,而具有不同的id,则完全没问题。

如果你想每列是唯一的,你应该指定一个单独为每列有UNIQUE constraint on a column