我有以下三个表格,分别是艺术家,舞台和活动。我试图找出是否有办法像(artist.popularity * stage.reputation)这样设置 event.cost 的默认值。 可以这样做吗?还是在插入时必须手动设置成本值?
答案 0 :(得分:0)
计算所得的列无法引用其他表中的列(它所看到的只是其自己的表行中的值)。
相反,您可以使用触发器来触发event
上的每个插入,并为其他表/列中的cost
分配默认值:
delimiter |
create trigger trg_event_price
before insert on event
for each row
begin
if new.cost is null then
set new.cost =
(select popularity from artist where id = new.artist_id)
* (select reputation from stage where id = new.stage_id)
;
end if;
end
|
delimiter ;
有了此触发器,您就可以在cost
进入insert
时忽略列event
,并由触发器处理它:
insert into event (artist_id, stage_id) values(1, 5);
-- "cost" will be computed from the popularity of artist 1 and the reputation of stage 5
答案 1 :(得分:0)
首先,您必须将表艺术家和舞台的ID都定义为主键,然后在事件表中输入数据时,才能使用外键tutorialspoint分别为每个ID导入两个ID值
SQL-外键 广告
上一页下一页
外键是用于将两个表链接在一起的键。有时也称为引用密钥。
外键是一列或列的组合,其值与另一个表中的主键匹配。
两个表之间的关系将其中一个表中的主键与第二个表中的外键相匹配。
如果表在任何字段上定义了主键,则不能有两条记录具有与该字段相同的值。
示例 考虑以下两个表的结构。
客户表
创建表客户(
ID INT NOT NULL,
NAME VARCHAR(20)NOT NULL,
AGE INT NOT NULL,
地址字符(25),
SALARY DECIMAL(18,2),
主键(ID)
);
订单表
创建表顺序( ID INT NOT NULL, DATE DATETIME, CUSTOMER_ID INT引用CUSTOMERS(ID), AMOUNT倍, 主键(ID) ); 如果已经创建了ORDERS表,但尚未设置外键,则使用通过更改表来指定外键的语法。
更改表顺序 添加外键(Customer_ID)参考客户(ID);