zmagam się teraz od 4h z takim problemem:
Mam studenta z group_id
, ale nowo dodany student do tabeli nie musi od razu mieć przydzielonej grupy - korzystam, więc przy group_id
z null default null
. Jeżeli zaś z tabeli z grupami usunę daną grupę to chcę aby wszystkim studentom, którzy mieli group_id
"zreferowany" do tej grupy aby pojawiło im się NULL, a w przypadku modyfikacji aby pole po prostu się uaktualniło. czyli w moim przypadku to będzie opcja on delete set default on update cascade
lub on delete set null on update cascade
(defaultowo przy group_id dałam null więc wyjdzie na to samo. i treaz tak:
/* tworze tabele grupy */
create table if not exists `groups` (
/* klucz podstawowy */
`group_id` int(11) unsigned not null auto_increment primary key,
`name` varchar(30) not null
) ENGINE = InnoDB;
/* tworze tabele studenci */
create table if not exists `students` (
/* klucz podstawowy */
`student_id` int(11) unsigned not null auto_increment primary key,
`name` varchar(30) not null,
`surname` varchar(30) not null,
/* wiek z mozliwym nullem, bo nie bedzie to od razu wymagane */
`age` tinyint null default null,
/* niektorzy studenci nie zostana od razu przydzieleni do odpowiedniej grupy */
`group_id` int(11) unsigned null default null,
/* tworze index na polu group_id */
index `FK_GROUP` (`group_id`),
/* klucz obcy do groupy */
constraint `FK_GROUP` foreign key (`group_id`) references `groups` (`group_id`)
on delete set default on update cascade
) ENGINE = InnoDB;
i niestety po wysłaniu zapytania otrzymuję:
#1005 - Can't create table 'hibernate_przyklad.students' (errno: 150)
jakie są prawidłowe metody tworzenia relacji w takim przypadku jaki opisuję? dodam, że zapytanie zadziała w przypadku opcji on delete cascade on update cascade
.