我是 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
)
);
我应该怎么写那个触发器?