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

Sql:nie można usunąć klucza obcego z powodu automatycznie wygenerowanego ograniczenia

Twój problem polega na tym, że nie nazywasz wyraźnie swoich ograniczeń. Dzięki temu każda baza danych wybierze dla Ciebie nazwę. Sztuczka polega na tym, aby jawnie nazwać ograniczenia kluczy obcych podczas tworzenia rzeczywistych tabel zarówno w MySQL, jak i 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
);

Ale naprawienie twojej bezpośredniej sytuacji wymagałoby więcej pracy. Jedną z opcji byłoby zapytanie tabeli schematu informacji dla danej tabeli, aby znaleźć rzeczywiste nazwy ograniczeń:

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;

Powinno to zwrócić jeden rekord dla każdej kolumny i ograniczenia. Dzięki tym informacjom powinieneś być w stanie uruchomić swoje bieżące instrukcje alter.

Jest to dość łatwe przy użyciu narzędzia takiego jak Java lub coś podobnego. Jeśli chcesz to zrobić bezpośrednio z bazy danych, potrzebujesz dynamicznego SQL, co prawdopodobnie oznacza napisanie procedury składowanej.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybierz wiersze z tabeli MySQL, gdzie wartość jest tablicą?

  2. Zwróć wartość null dla date_format, gdy input w mysql ma wartość null

  3. operacje arytmetyczne w konstruktorze zapytań laravel

  4. Jaka jest długość ciągu identyfikatora sesji PHP?

  5. Błąd połączenia MediaWiki DB podczas próby aktualizacji do wersji 1.22