Dodanie nowej kolumny jako klucz obcy do istniejącej tabeli

0

Witam,

chcę dodać nową kolumnę w tabeli, która będzie kluczem obcym ale także chcę miec możliwość zostawienie tego pola pustego. Czy ta komenda jest prawidłowa?

ALTER TABLE users ADD grade_id SMALLINT UNSIGNED NULL DEFAULT 0;
0

Pole musi dopuszczać Null, to wystarczy.

0

Czyli probuje do istniejacej tabeli dodać pole, a nastepnie założyć ograniczenie:

ALTER TABLE AllowedCar
ADD COLUMN worker int NULL,
ADD CONSTRAINT FK_Worker_table_WorkerID FOREIGN KEY (worker)
REFERENCES AllowedCar(WorkerID);

błąd:
#1005 - Can't create table 'trackingsystem.#sql-421_ca' (errno: 150)

0

Ten błąd może świadczyć o wielu rzeczach np.

  • typ pól wchodzących do klucza różni się np. jedno pole jest typu int(10) a drugie int(11).
  • pole do którego łączysz nie jest kluczem głównym i/lub nie ma na nim indeksu.
  • istnieje już FK o takiej nazwie
  • tabela jest MyISAM, a nie InnoDB
  • jest ustawiona domyślna wartość na polu na którym próbujesz założyć klucz
  • masz błąd w składni ALTER TABLE

Osobiście zacząłbym od rozbicia zapytania na dwa, ponieważ ADD CONSTAINT może nie widzieć pola worker (tworzenie pola jest w tym samym poleceniu), a następnie sprawdziłbym typ WorkerID i zadeklarował identyczny typ na worker.

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