我創建了一個表五列: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