在我的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));
虽然描述它显示为所有三个的主键..
我哪里出错了...请给我一个解决方案..谢谢
答案 0 :(得分:4)
在这里,您将使用ID,移动设备和电子邮件的组合创建主键。因此,根据主键的定义,这三个属性(id,mobile,email)组合用于区分任意两行,每行的 id是唯一的,因为它设置为自动增量所以甚至如果两行或多行的电子邮件和移动设备值相同,则ID,移动设备和电子邮件的组合是唯一的。
为了得到你想要的东西,你可以这样做
CREATE TABLE sample (
id INT NOT NULL AUTO_INCREMENT,
mobile_number BIGINT(20) NULL UNIQUE,
email VARCHAR(50) NULL UNIQUE,
PRIMARY KEY(id)
);
答案 1 :(得分:3)
您拥有它的方式,只有id
,mobile_number
和email
的组合必须是唯一的。
使用id
作为主键,并在email
和mobile_number
列上设置其他唯一约束:
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));
答案 2 :(得分:1)
primary key(id,mobile,email)
表示这三列的元组是主键。这意味着表中的所有元组应该是不同的,即您不能有两行具有相同的id
和 mobile
和< / em> email
。但是,如果两行具有相同的email
而具有不同的id
,则完全没有问题。
如果您希望每列都是唯一的,则应为UNIQUE
constraint on a column
答案 3 :(得分:0)
CREATE TABLE sample(id INT(11) AUTO_INCREMENT,
mobile BIGINT(20),email VARCHAR(50),PRIMARY KEY(id,mobile,email));
你的sql的最后一面缺少括号