2017-02-16 75 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