Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak używać klucza podstawowego o automatycznej inkrementacji jako klucza obcego?

Wygląda na to, że masz odwrócone tabele z odniesieniami i odniesieniami. Możesz zrobić:

ALTER TABLE `child ` ADD FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`);

Możesz także zdefiniować klucz obcy w CREATE TABLE oświadczenie w następujący sposób:

CREATE TABLE `parent` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `data` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

CREATE TABLE `child` (
  `parent_id` int(11) DEFAULT NULL,
  `related_ids` int(11) DEFAULT NULL,
  KEY `parent_id` (`parent_id`),
  KEY `related_ids` (`related_ids`),
  FOREIGN KEY (`parent_id`) REFERENCES `parent`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Przypadek testowy:

INSERT INTO parent (`data`) VALUES ('test data 1');
Query OK, 1 row affected (0.01 sec)

INSERT INTO parent (`data`) VALUES ('test data 2');
Query OK, 1 row affected (0.01 sec)

INSERT INTO child (`parent_id`, `related_ids`) VALUES (1, 100);
Query OK, 1 row affected (0.01 sec)

INSERT INTO child (`parent_id`, `related_ids`) VALUES (2, 100);
Query OK, 1 row affected (0.01 sec)

INSERT INTO child (`parent_id`, `related_ids`) VALUES (3, 100);
ERROR 1452 (23000): Cannot add or update a child row: 
  a foreign key constraint fails 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Serwer szyn WEBrick nie uruchamia się

  2. przechowywać liczbę wierszy lub po prostu policzyć wiersze?

  3. MySQL wyszukaj wartość json według klucza w tablicy

  4. Wykonaj procedurę składowaną MySQL za pomocą wiersza poleceń

  5. Polecenie mysql nie jest zsynchronizowane podczas wykonywania wstawiania z selera