sql >> Database teknologi >  >> RDS >> Mysql

SQL:kan ikke slippe fremmednøgle på grund af autogenereret begrænsning

Dit problem er, at du ikke udtrykkeligt navngiver dine begrænsninger. Dette lader hver database vælge et navn til dig. Tricket her er at navngive dine fremmednøglebegrænsninger eksplicit, når du opretter de faktiske tabeller på både MySQL og 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 at løse din umiddelbare situation ville kræve mere arbejde. En mulighed ville være at forespørge informationsskematabellen for den involverede tabel for at finde ud af de faktiske begrænsningsnavne:

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;

Dette bør returnere én post for hver kolonne og begrænsning. Med disse oplysninger burde du være i stand til at køre dine nuværende ændrede erklæringer.

Dette er nemt nok at gøre ved at bruge et værktøj som Java eller noget lignende. Hvis du vil gøre dette direkte fra databasen, skal du bruge dynamisk SQL, hvilket sandsynligvis betyder at skrive en lagret procedure.




  1. hvordan man udskriver Statement (CallableStatement) i Java?

  2. Sådan grupperes efter med en særlig tilstand

  3. PDO-forbindelse til localhost (ukendt mysql-servervært)

  4. Sådan laver du et tydeligt join med MySQL