[SQL系列] 从头开始学PostgreSQL Union Null 别名 触发器
-- 创建一个简单的表,包含id和name两个字段
CREATE TABLE simple_table (
id INT PRIMARY KEY,
name TEXT
);
-- 插入一些数据
INSERT INTO simple_table (id, name) VALUES (1, 'Alice'), (2, 'Bob');
-- 创建一个别名表,使用视图的方式来创建别名
CREATE VIEW simple_table_view AS
SELECT id, name FROM simple_table
WHERE name NOT LIKE 'A%';
-- 查询别名表,验证数据是否正确
SELECT * FROM simple_table_view;
-- 创建一个触发器,在插入或更新simple_table时,同步更新一个log表
CREATE TABLE log_table (
id INT PRIMARY KEY,
action TEXT
);
CREATE OR REPLACE FUNCTION log_table_trigger() RETURNS TRIGGER AS $$
BEGIN
IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN
INSERT INTO log_table (id, action) VALUES (NEW.id, TG_OP);
END IF;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS log_table_trigger ON simple_table;
CREATE TRIGGER log_table_trigger
AFTER INSERT OR UPDATE ON simple_table
FOR EACH ROW EXECUTE FUNCTION log_table_trigger();
-- 插入或更新simple_table,验证触发器是否正常工作
INSERT INTO simple_table (id, name) VALUES (3, 'Charlie');
UPDATE simple_table SET name = 'Zed' WHERE id = 1;
-- 查询log表,验证触发器行为是否被记录
SELECT * FROM log_table;
这段代码首先创建了一个简单的表simple_table
,并插入了一些数据。接着,使用视图(CREATE VIEW)定义了一个别名表simple_table_view
。然后,通过查询这个视图验证数据是否正确。
随后,创建了一个log_table
用于记录simple_table
的变更,并定义了一个触发器函数log_table_trigger()
,在simple_table
发生插入或更新操作时,会向log_table
插入记录。最后,通过插入和更新simple_table
来测试触发器是否按预期工作,并通过查询log_table
验证结果。
评论已关闭