Mysql
 sql >> база данни >  >> RDS >> Mysql

Sql:не може да изпусне външен ключ поради автоматично генерирано ограничение

Вашият проблем е, че не назовавате изрично вашите ограничения. Това оставя всяка база данни да избере име вместо вас. Номерът тук е да посочите изрично вашите ограничения на външния ключ, когато създавате действителните таблици както в MySQL, така и в MariaDB:

CREATE TABLE job_template (
    ...,
    parent_id int NOT NULL,
    CONSTRAINT your_constraint FOREIGN KEY fk_name (parent_id)
        REFERENCES job_template(id) ON DELETE CASCADE
);

Но коригирането на непосредствената ви ситуация ще изисква повече работа. Една от възможностите би била да направите заявка в таблицата на информационната схема за съответната таблица, за да откриете действителните имена на ограничения:

USE INFORMATION_SCHEMA;

SELECT
   TABLE_NAME,
   COLUMN_NAME,
   CONSTRAINT_NAME,
   REFERENCED_TABLE_NAME,
   REFERENCED_COLUMN_NAME
FROM KEY_COLUMN_USAGE
WHERE
    TABLE_SCHEMA = 'your_db' AND
    TABLE_NAME = 'job_template' AND
    REFERENCED_COLUMN_NAME IS NOT NULL;

Това трябва да върне един запис за всяка колона и ограничение. С тази информация трябва да можете да изпълнявате текущите си изрази за промяна.

Това е достатъчно лесно да се направи с помощта на инструмент като Java или нещо подобно. Ако искате да направите това директно от базата данни, тогава ще ви трябва динамичен SQL, което вероятно означава писане на съхранена процедура.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Въведете формат на дата в дд/мм/гггг чрез laravel Eloquent Model

  2. SQL :Използване на целевата таблица в оператор UPDATE във вложена клауза FROM

  3. Как да съхранявате датата в базата данни на MySQL?

  4. Помощ за:ГРЕШКА 1025 (HY000):Грешка при преименуване на .... (errno:150)

  5. laravel красноречив сортиране по отношение