sql >> Databasteknik >  >> RDS >> Mysql

SQL:kan inte släppa främmande nyckel på grund av automatiskt genererad begränsning

Ditt problem är att du inte uttryckligen nämner dina begränsningar. Detta låter varje databas välja ett namn åt dig. Tricket här är att namnge dina främmande nyckelbegränsningar uttryckligen när du skapar de faktiska tabellerna på både MySQL och 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
);

Men att fixa din omedelbara situation skulle kräva mer arbete. Ett alternativ skulle vara att fråga informationsschematabellen för den berörda tabellen för att ta reda på de faktiska begränsningsnamnen:

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;

Detta bör returnera en post för varje kolumn och begränsning. Med den här informationen bör du kunna köra dina nuvarande alter-satser.

Detta är lätt nog att göra med hjälp av ett verktyg som Java eller något liknande. Om du vill göra detta direkt från databasen behöver du dynamisk SQL, vilket förmodligen innebär att skriva en lagrad procedur.




  1. PostgreSQL - pg_config -bash:pg_config:kommandot hittades inte

  2. SQL Server:fascinerad av GETDATE()

  3. Hur man skapar och tar bort databaser och tabeller i MySQL

  4. MySQL ALTER TABLE tar lång tid i litet bord