通过 SQL 查询删除记录及其外键


delete a record and its FOREIGN key via a sql query

我想通过此表中的"url"键匹配删除记录:

$sql = "CREATE TABLE IF NOT EXISTS Articls 
        (
            id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,     
            alias INT(10) UNSIGNED NOT NULL,                                 
            title VARCHAR(254) COLLATE utf8_persian_ci NOT NULL,        
            url VARCHAR(2083) COLLATE utf8_persian_ci NOT NULL,                      
            UNIQUE (alias),
            UNIQUE (title),
        )   DEFAULT COLLATE utf8_persian_ci";

但在那之后,我也想删除"标签"表中的所有相对标签名称!

 $sql = "CREATE TABLE IF NOT EXISTS Tags (
            id INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY,  
            alias INT(10) UNSIGNED NOT NULL,    
            name VARCHAR(256) COLLATE utf8_persian_ci NOT NULL, 
            state INT(2) NOT NULL DEFAULT 1, 
            created INT(11) NOT NULL,
            FOREIGN KEY (alias) REFERENCES Articls (alias)      
        ) DEFAULT COLLATE utf8_persian_ci";

我可以只用 mysql 查询来做吗?

我现在用一些php/mysql来做:

1-get 别名,其中 url = Articls 中的"我的网址"。

2-删除标签表中的所有记录。

  1. 删除"Articls"表中的目标记录(其中 URL = "我的 URL")。

你应该使用 2 个查询

DELETE FROM Tags
WHERE alias IN (SELECT id FROM Articls WHERE url = 'myurl.com')
;
DELETE FROM Articls WHERE url = 'myurl.com'
;

或者,您可以使用级联删除。
相反:

FOREIGN KEY (alias) REFERENCES Articls (alias);

你需要:

FOREIGN KEY (alias) REFERENCES Articls (alias) ON DELETE CASCADE

在这种情况下,每次从Articls中删除行时,标签处的相应行将自动删除。