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

时间:2015-06-15 10:50:24

标签: php mysql sql foreign-keys constraints

我希望通过' 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 alias url =' my url'在Articls。

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

  1. 删除目标记录(其中url ='我的网址')' Articls'表。

1 个答案:

答案 0 :(得分:0)

您应该使用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中删除行时,标签上的相应行都将被自动删除。