php - 通过 sql 查询删除记录及其外键

标签 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 where url = 'my url' in Articls.

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

  1. 删除“文章”表中的目标记录(其中 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

在这种情况下,每次从文章中删除行时,标签中的相应行都会自动删除。

关于php - 通过 sql 查询删除记录及其外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30843291/

相关文章:

javascript - (Web应用程序)如何通过输入网址来限制用户访问某些文件夹

php - 将值添加到 MySQL 结果数组

php - 从 Mysql 中删除元素

MySQL:如果满足条件则排除匹配项

java - Stackoverflow 和 Hibernate 使用 sql IN (id, id, id, id..id)

php - 通过 cron 作业时未执行 Bash 命令 - PHP

php - 如何在 Eloquent Laravel 中对三个表进行咨询

php - 从 php 字符串到 mysql 日期

sql - 比较 varchar 值 postgresql

sql - postgresql 中奇怪的间隔