【发布时间】:2013-07-23 14:40:00
【问题描述】:
我是 MySQL 和 SQL 新手,我刚刚发现 MySQL 不支持断言。
我有这些表:
create table stagione
(
nome varchar(20),
biennio char(9),
teatro varchar(20),
primary key(nome, biennio),
foreign key (teatro) references teatro(nome)
on update cascade on delete set null
)
ENGINE=InnoDB;
create table produzione
(
produttore varchar(20),
spettacolo varchar(40),
primary key(produttore, spettacolo),
foreign key (produttore) references produttore(nome)
on update cascade on delete cascade,
foreign key (spettacolo) references spettacolo(titolo)
on update cascade on delete cascade
)
ENGINE=InnoDB;
create table proposta
(
nomeStagione varchar(20),
biennioStagione char(9),
spettacolo varchar(40),
primary key(nomeStagione, biennioStagione, spettacolo),
foreign key (nomeStagione, biennioStagione) references stagione(nome, biennio)
on update cascade on delete cascade,
foreign key (spettacolo) references spettacolo(titolo)
on update cascade on delete cascade
)
ENGINE=InnoDB;
使用 mysql 我无法编写断言。是否可以使用一个或多个触发器来模拟以下断言?
crate assertion RA2 check (
not exists (
select stagione.teatro, stagione.nome, stagione.biennio, count(*)
from (stagione join proposta on
(stagione.nome = proposta.nomeStagione) and
(stagione.biennio = proposta.biennioStagione))
join produzione on
(proposta.spettacolo = produzione.spettacolo) and
(stagione.teatro = produzione.produttore)
group by stagione.teatro, stagione.nome, stagione.biennio
having count(*) > 2
)
);
我应该如何编写那个触发器?
【问题讨论】:
-
你能用简单的话解释一下你到底想达到什么目标吗?
-
断言所指的规则是:一个剧院(teatro)在同一剧院季节(stagione)内不能上演超过两部自己制作(produzione)的戏剧(spettacolo)跨度>
标签: mysql sql triggers mysql-workbench assertion