我想通过此表中的“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表中的所有记录。
- 删除“文章”表中的目标记录(其中 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/