Jak dodać dwa rekordy do dwóch tabel jednocześnie

0

W jaki sposob moge zrobić insert do dwóch tabel jednocześnie? Mam tabele FILM(Id, Tytul, Rezyser, Rok, Kategoria) oraz PLYTA( Id, Film_Id) chce żeby podczas dodawania filmu dodało mi tez jeden egzemplarz do tabeli PLYTY z tym samym Id co FILM? Poniżej moj kod na dodanie filmu do bazy

{
connection.Open();
using (var cmdDataBase = connection.CreateCommand())
{

cmdDataBase.CommandText = "INSERT INTO film(Tytul, Rezyser, Rok, Kategoria\_filmu) VALUES (@Tytul, @Rezyser, @Rok, @Kategoria\_filmu) ";
cmdDataBase.Parameters.Add(new MySqlParameter("@Tytul", fm.Title));
cmdDataBase.Parameters.Add(new MySqlParameter("@Rezyser", fm.Director));
cmdDataBase.Parameters.Add(new MySqlParameter("@Rok", fm.Year));
cmdDataBase.Parameters.Add(new MySqlParameter("@Kategoria\_filmu",n));



cmdDataBase.ExecuteNonQuery();

}
}

Close();```
0

Mozliwości widzę 2:

  1. Trigger na tabeli film który przy insercie doda dane do tabeli plyty
  2. W kodzie dodanie rekordu do tabeli film odczytanie id i wstawienie tego id do tabelu plyty

Nie da się puścić jednocześnie zapytania na 2 tabelach, można zrobić to oczywiście w transakcji, która zostanie zatwierdzona i wtedy wszystkie wprowadzone zmiany będą na bazie...

0
Panczo napisał(a):

Mozliwości widzę 2:

  1. Trigger na tabeli film który przy insercie doda dane do tabeli plyty
  2. W kodzie dodanie rekordu do tabeli film odczytanie id i wstawienie tego id do tabelu plyty

Nie da się puścić jednocześnie zapytania na 2 tabelach, można zrobić to oczywiście w transakcji, która zostanie zatwierdzona i wtedy wszystkie wprowadzone zmiany będą na bazie...

próbuje zrobić triggera ale wywala mi błąd #1452 - Cannot add or update a child row: a foreign key constraint fails (`filmy`.`plyta`, CONSTRAINT `plyta_ifbk_1` FOREIGN KEY (`Film_Id`) REFERENCES `film` (`Id`)) AFTER INSERT ON film ma sie wykonac INSERT INTO plyta SET plyta.Film_Id = Id;

0

Ja nie wiem czego oczekujesz po takiej składni:

 INSERT INTO plyta SET plyta.Film_Id = Id;

Kiedy w samym trigerze wystarczy:

insert into plyta (film_id)
select id from inserted
0
Panczo napisał(a):

Ja nie wiem czego oczekujesz po takiej składni:

 INSERT INTO plyta SET plyta.Film_Id = Id;

Kiedy w samym trigerze wystarczy:

insert into plyta (film_id)
select id from inserted

No niestety tak to nie działa Table 'filmy.inserted' doesn't exist

0

A gdzie w moim przykładzie masz filmy.inserted? Bo ja takiej nie użyłem...

0
Panczo napisał(a):

A gdzie w moim przykładzie masz filmy.inserted? Bo ja takiej nie użyłem...

Nigdzie pokazałem Ci jaki komunikat błędu mi się pojawia, tak on wyglada insert into plyta (film_id)
select id from inserted piszac tego triggera tez nie uzylem ale phpmyadmin nie widzi takiej funkcji jak inserted

0

Proponuje dawać silnik jakiego używasz, zalozełym, ze dla C# to będzie MsSQL, dly mysql jakoś tak:

insert into plyta (film_id)
values (new.id)

1 użytkowników online, w tym zalogowanych: 0, gości: 1