Bien, finalmente conseguí en una página que tenía ejercicios sobre DELETE en MySQL un script de prueba para el caso, y lo probé.
Funcionó tras unas modificaciones.
El tema pasa por establecer el orden de borrado, y definir específicamente qué tabla es la que se va a borrar, ya que el DELETE puede abarcar todas las tablas, algunas o una sola de las involucradas
El script que usé es este:
Código sql:
Ver originalDROP TABLE IF EXISTS AuthorArticle;
DROP TABLE IF EXISTS Articles;
DROP TABLE IF EXISTS Authors;
CREATE TABLE Articles (
ArticleID SMALLINT NOT NULL PRIMARY KEY,
ArticleTitle VARCHAR(60) NOT NULL,
Copyright YEAR NOT NULL
)
ENGINE=INNODB;
INSERT INTO Articles VALUES (12786, 'How write a paper', 1934),
(13331, 'Publish a paper', 1919),
(14356, 'Sell a paper', 1966),
(15729, 'Buy a paper', 1932),
(16284, 'Conferences', 1996),
(17695, 'Journal', 1980),
(19264, 'Information', 1992),
(19354, 'AI', 1993);
CREATE TABLE Authors (
AuthID SMALLINT NOT NULL PRIMARY KEY,
AuthorFirstName VARCHAR(20),
AuthorMiddleName VARCHAR(20),
AuthorLastName VARCHAR(20)
)
ENGINE=INNODB;
INSERT INTO Authors VALUES (1006, 'Henry', 'S.', 'Thompson'),
(1007, 'Jason', 'Carol', 'Oak'),
(1008, 'James', NULL, 'Elk'),
(1009, 'Tom', 'M', 'Ride'),
(1010, 'Jack', 'K', 'Ken'),
(1011, 'Mary', 'G.', 'Lee'),
(1012, 'Annie', NULL, 'Peng'),
(1013, 'Alan', NULL, 'Wang'),
(1014, 'Nelson', NULL, 'Yin');
CREATE TABLE AuthorArticle (
AuthID SMALLINT NOT NULL,
ArticleID SMALLINT NOT NULL,
PRIMARY KEY (AuthID, ArticleID),
FOREIGN KEY (AuthID) REFERENCES Authors (AuthID),
FOREIGN KEY (ArticleID) REFERENCES Articles (ArticleID)
)
ENGINE=INNODB;
INSERT INTO AuthorArticle VALUES (1006, 14356),
(1008, 15729),
(1009, 12786),
(1010, 17695),
(1011, 15729),
(1012, 19264),
(1012, 19354),
(1014, 16284);
En este ejemplo existe una dependencia entre la tabla AuthorArticle y las otras dos, por lo cual para eliminar cualquiera de los registros ubicados en Author y Article, primero hay que eliminar el registro donde se vinculan en AuthorArticle.
Para lograrlo no podemos hacer:
Código sql:
Ver originalDELETE
FROM Authors a INNER JOIN AuthorArticle ab USING(AuthID)
INNER JOIN Articles b USING(ArticleID)
WHERE AuthorLastName='Elk';
porque eso implicaría que los registros se borren de las tablas en esta secuencia: Authors -> AuthorArticle -> Article , lo que genera un problema de restricción de FK.
Para lograr que se borren, hay que establecer la secuencia de otra forma: AuthorsArticle -> Author -> Article.
Esto sería:
Código sql:
Ver originalDELETE ab, b
FROM Authors a INNER JOIN AuthorArticle ab USING(AuthID)
INNER JOIN Articles b USING(ArticleID)
WHERE AuthorLastName='Elk';
y luego eliminar el tercer registro en la primera tabla:
(todavía no analicé por qué no me deja borrar todos juntos).
En el caso debería funcionar con:
Código sql:
Ver originalDELETE lg
FROM tbllogrosxgrado lxg
INNER JOIN tbllogros lg USING(id_logro)
WHERE lxg.identificacion='1036606448';