这是表格:
table_test
ID------INT
DETAIL--TEXT
VALUE---INT
STATUS--INT DEFAULT 1
此处列STATUS
的默认值为1,列VALUE
的默认值为1。
此处任何情况下插入或更新,
if column VALUE < 1 , STATUS = 2 else STATUS = 1
如何在MySQL表中保留上层类型的场景?
答案 0 :(得分:1)
您可以通过几个触发器执行此操作:
delimiter //
CREATE TRIGGER table_test_update_tr BEFORE UPDATE ON table_test
FOR EACH ROW
BEGIN
IF NEW.value < 0 THEN
SET NEW.status = 2;
ELSE
SET NEW.status = 1;
END IF;
END;//
delimiter ;
delimiter //
CREATE TRIGGER table_test_insert_tr BEFORE INSERT ON table_test
FOR EACH ROW
BEGIN
IF NEW.value < 0 THEN
SET NEW.status = 2;
ELSE
SET NEW.status = 1;
END IF;
END;//
delimiter ;
编辑:
话虽如此,如果status
始终应根据value
计算,也许它不应该是表格中的列 - 相反,您可以创建一个视图来显示它。
CREATE TABLE table_test (
id INT,
detail TEXT,
value INT DEFAULT 1
);
CREATE VIEW view_test AS
SELECT id,
detail,
value,
CASE value WHEN 1 THEN 1 ELSE 2 END AS status
FROM test_table;
答案 1 :(得分:1)
使用case
:
UPDATE table_test
SET STATUS =
CASE
WHEN VALUE < 1 THEN 2
ELSE 1
END
答案 2 :(得分:0)
您需要在UPDATE和INSERT上创建TRIGGER
DELIMITER $$
CREATE
TRIGGER `Ins_test_table` AFTER INSERT
ON `test_table`
FOR EACH ROW BEGIN
IF (VALUE < 1) THEN
SET STATUS = 2;
ELSE SET STATUS = 1;
END IF;
END$$
CREATE
TRIGGER `Update_test_table` AFTER UPDATE
ON `test_table`
FOR EACH ROW BEGIN
IF (VALUE < 1) THEN
SET STATUS = 2;
ELSE SET STATUS = 1;
END IF;
END$$
DELIMITER;
如果你可以运行其他MYSQL查询 - 你可以运行这个查询。
UPDATE test_table
SET STATUS = IF (VALUE < 1, 2, 1)
但它在所有桌面上都是最大的负荷。