我是MySQL和SQL新手,我剛剛發現MySQL不支持斷言。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
)
);
我該怎麼寫這個觸發器?
你能用簡單的話來解釋你到底想要達到什麼目的嗎? – peterm
該斷言所指的規則是:劇院(劇院)不能在同一戲劇季節(劇情)中放映超過兩部戲劇(劇集)的自己製作(劇集) – user2610920