sql >> Databáze >  >> RDS >> Mysql

SQL:nelze zahodit cizí klíč kvůli automaticky generovanému omezení

Váš problém je v tom, že svá omezení výslovně nepojmenujete. To umožňuje každé databázi vybrat si jméno za vás. Trik je v tom pojmenovat svá omezení cizích klíčů explicitně, když vytváříte skutečné tabulky na MySQL 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 náprava vaší okamžité situace by vyžadovala více práce. Jednou z možností by bylo dotazovat se na tabulku informačních schémat pro příslušnou tabulku, abyste zjistili skutečné názvy omezení:

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;

To by mělo vrátit jeden záznam pro každý sloupec a omezení. S těmito informacemi byste měli být schopni spustit své aktuální změny příkazů.

To je snadné udělat pomocí nástroje, jako je Java nebo něco podobného. Pokud to chcete udělat přímo z databáze, budete potřebovat dynamické SQL, což pravděpodobně znamená napsat uloženou proceduru.




  1. htaccess url rewrite (db access)?

  2. Jak ručně vložit hodnotu do sloupce identity v tabulce SQL Server - SQL Server / Výukový program T-SQL, část 41

  3. Jak mohu odstranit zablokování transakce?

  4. Jak vložím hodnotu ze zaškrtávacího políčka do MySQL?