Mysql:为Create Table语句添加触发器

时间:2016-10-17 13:51:54

标签: mysql sql create-table

我在MySql中创建一个数据库,我想添加一些检查约束,但是由于MySQL不支持这些,我看到我需要将它们添加为触发器。不清楚的是在这段代码中的位置。

这是一段代码示例:

DROP SCHEMA IF EXISTS dwh_test;
CREATE SCHEMA dwh_test;
USE dwh_test;

--make Table 1
CREATE TABLE table_1 (
var1 VARCHAR(8) not null,
var2 VARCHAR(50) not null,
var3 VARCHAR(50) not null,
char1 CHAR(1) not null,
var4 VARCHAR(50) not null,
int1 INTEGER(7) not null,
var5 VARCHAR(50) not null,
char2 CHAR(2) not null,
int2 INTEGER(5) not null,
PRIMARY KEY (var1)
);

-- make Table 2

CREATE TABLE table_2 (
var6 VARCHAR(8) not null,
date1 DATE not null,
date2 DATE not null,
var7 VARCHAR(8) not null,   
var8 VARCHAR(8) not null,
date3 DATE,
var9 VARCHAR(10) not null,
float1 FLOAT(2) not null,
int3 INTEGER(7) not null,
char3 CHAR(5),
PRIMARY KEY (var6),
FOREIGN KEY (var7) REFERENCES table_1 (var1),
CONSTRAINT `ck_int3` CHECK (int3 > 0) 
CONSTRAINT `ck_var9` CHECK (var9 IN ("Pending","Denied","Approved"))
);

如何将table_2中的两个约束写为触发器以及它们在整个语句中的位置?

例如,这是ck_int3的正确触发器语句吗?

CREATE TRIGGER ck_int3 BEFORE INSERT ON dwh_test
FOR EACH ROW 
BEGIN 
IF (int3 < 1)THEN 
SET int3=1; 
END IF; 
END

1 个答案:

答案 0 :(得分:2)

关闭。以下是编写触发器的一种方法:

DELIMITER $$

CREATE TRIGGER ck_int3 BEFORE INSERT ON dwh_test
FOR EACH ROW 
BEGIN 
    SET new.int3 = GREATEST(1, new.int3)
END IF; 
END;$$
DELIMITER ;