用戶表
CREATE TABLE `USERS` (
`ID` char(255) COLLATE utf8_unicode_ci NOT NULL,
`NAME` char(255) COLLATE utf8_unicode_ci NOT NULL,
`EMAIL` char(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`CREATED_IN` datetime NOT NULL,
`SIGNED_IN` datetime NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
觸發
CREATE TRIGGER `ABC` BEFORE INSERT ON `USERS` FOR EACH ROW
IF NEW.ID = "" OR NEW.NAME = "" OR
NEW.CREATED_IN = "" OR NEW.CREATED_IN = "0000-00-00 00:00:00" OR
NEW.SIGNED_IN = "" OR NEW.SIGNED_IN = "0000-00-00 00:00:00"
THEN SIGNAL SQLSTATE "45000"; END IF
標識欄
- 我怎樣才能讓它不接受空值?
("", " ", " ", " ", etc...) -> Should return an error - 如果已經有一個值,如何從中洗掉所有空格?
("bf9 d 34 c9 08" = "bf9d34c908")
名稱欄
- 我怎樣才能讓它不接受空值?
("", " ", " ", " ", etc...) -> Should return an error
EMAIL 列
- 我怎樣才能讓它不接受空值?
("", " ", " ", " ", etc...) -> Should return an error - 如果已經有一個值,如何從中洗掉所有空格?
("nkr owks lpehqp jmgdb @ gm ail. com" = "[email protected]")
CREATED_IN 和 SIGNED_IN 列
- 我怎樣才能讓它不接受無效值?當插入無效值(如字母、數字或無效格式)時,應回傳錯誤,而不是輸入 0000-00-00 00:00:00。
MySQL版本是5.7
在 USERS 表上處理這些要求的最佳方法是什么?
uj5u.com熱心網友回復:
觸發器可能如下所示:
CREATE TRIGGER process_input
BEFORE INSERT ON USERS
FOR EACH ROW
BEGIN
SET NEW.id = REPLACE(NEW.id, ' ', '');
IF NEW.id = '' THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '`id` cannot be empty.';
END IF;
SET NEW.name = TRIM(NEW.name);
IF NEW.name = '' THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '`name` cannot be empty.';
END IF;
SET NEW.email = REPLACE(NEW.email, ' ', '');
IF NEW.email = '' THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '`email` cannot be empty.';
END IF;
IF STR_TO_DATE(created_in, '%Y-%m-%d %H:%i:%s') IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Incorrect `created_in` datetime value.';
END IF;
IF STR_TO_DATE(signed_in, '%Y-%m-%d %H:%i:%s') IS NULL THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Incorrect `signed_in` datetime value.';
END IF;
END
請注意 - 此觸發器允許任何值為 NULL(但只有 email 可以為 NULL,所有其他列都定義為 NOT NULL)。
您可以重新劃分塊并將最有可能的條件放在首位。執行 SIGNAL 后,觸發器不會執行以下代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484575.html
上一篇:在where子句中使用時,distinct關鍵字非常慢。任何可以加快查詢速度的替代品?
下一篇:MySQL合并兩個不相關表的結果
