我创建了一个表五列:mysql为column1或column2插入唯一值?
userID,name,mobile_num,telphone_num,count
无论手机或电话号码或两个字段必须填写,它应该是唯一的。我如何在mysql中创建这样的行?
我创建了一个表五列:mysql为column1或column2插入唯一值?
userID,name,mobile_num,telphone_num,count
无论手机或电话号码或两个字段必须填写,它应该是唯一的。我如何在mysql中创建这样的行?
CREATE TABLE information (
userID INT NOT NULL,
name varchar(255),
mobile_num INT UNIQUE,
telphone_num INT UNIQUE,
count INT,
PRIMARY KEY (userID)
)
的UNIQUE
属性强制值是唯一的,但是这可能是你一个问题,因为如果两个用户GIVE你他的手机,但不给不是自己家的电话,你会不会能够拥有两个值为NULL的用户,所以我认为您要求的解决方案可能不是您的最佳选择。
执行此操作的最简单方法是在应用程序代码中强制执行插入行到数据库的要求。
This question表明无法通过表约束强制两列中的一列不为空。
您可以创建一个后插入trigger来检查需求,但假设数据库在您的应用程序的控制之下,只是在应用程序中强制执行此要求才是最有意义的。编码和错误处理将会更简单。
当你说电话号码“必须是唯一的”时,你的意思并不清楚,但我可能会重新考虑这个要求。
两个用户可在同一地点(例如,在同一个家庭),并且具有相同的电话号码。所以用户之间可能会有重复的电话号码。
将其手机号码用作主电话的用户可能会在两个字段中输入相同的电话号码。我没有看到任何好处,防止这种情况。实际上,当发生这种情况时,如果您阻止了这些信息,您将获得更多有用的信息。并试图阻止它可能会导致数据输入界面,使用户混淆。
CREATE TABLE information (
userID INT NOT NULL,
name varchar(255),
mobile_num INT,
telphone_num INT,
count INT,
PRIMARY KEY (userID,mobile_num,telephone_num)
)
使用下面的查询时遇到的情况,插入或者任何一个数字
insert into information(UserID,name,mobile_num,count)
values(3,'andrew',23443546,5);
或
insert into information(UserID,name,phone_num,count)
values(3,'andrew',23443546,5);
默认情况下,MySQL将插入其他数字的值在这种情况下为0重刑,
所以,你可以为其他使用数量0时,你要插入使用
insert into information
values(3,'andrew',0,23443546,5);
insert into information
values(3,'andrew',23443546,0,5);
只有一个号码,您可以使用触发器:
DELIMITER //
CREATE TRIGGER checkPhoneNumbers
BEFORE INSERT ON tableName
FOR EACH ROW
BEGIN
SET @exists = (SELECT *
FROM tableName
WHERE mobile_num = NEW.mobile_num
|| mobile_num = NEW.telphone_num
|| telphone_num = NEW.telphone_num
|| telphone_num = NEW.telphone_num);
IF(@exists IS NOT NULL) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Telephone or mobile number already present!';
END IF;
END
//
DELIMITER ;
这样你会如果您插入手机或电话号码已存在的移动电话号码或电话号码,则会出现数据库错误
为了将来的参考,您应该确定哪些是您最需要的第一个和咕噜声回答一个问题。 – Jhecht
您一次只能提出一个问题,所以我编辑以删除第二个问题(如何执行自动增量列应该可以通过Google搜索轻松找到)。 – 2016-04-23 06:07:17
但是如果两个人共享相同的电话号码呢? – Strawberry