我正在使用SQLite玩耍并了解更多SQL。我有一个这样填充的SQLite 3数据库:
create table playlist (id integer primary key autoincrement, name text);
create table playlistitem (id integer primary key autoincrement,
playlist_id integer, name text);
insert into playlist (name) values ("Moss");
insert into playlist (name) values ("Jen");
insert into playlistitem (playlist_id, name) values (1, "Roy");
insert into playlistitem (playlist_id, name) values (1, "Richmond");
insert into playlistitem (playlist_id, name) values (2, "Denholm");
太好了,现在播放列表中有两个播放列表项"Moss"
,"Roy"
并且"Richmond"
; 我的"Jen"
播放列表中有一项:"Denholm"
。
我想做的就是"Moss"
用一个查询删除播放列表及其所有项目。
我看到这样的事情,对我来说失败了:
delete playlist, playlistitem from playlist
inner join playlistitem on playlistitem.playlist_id = playlist.id
where playlist.name = "Moss";
失败:
Error: near "playlist": syntax error
我究竟做错了什么?
SQLite不支持join
的delete
说法。您必须使用基于的第二个表中进行删除的单独查询,对playlist_id
进行删除触发playlist
,或者使用以下命令使该引用成为外键on delete cascade
:
create table playlistitem (
id integer primary key autoincrement,
playlist_id integer, name text,
foreign key(playlist_id) references playlist(id) on delete cascade);
然后使用delete from playlist where name='Moss'
。
不要忘记启用外键- pragma foreign_keys=1
(您必须在每个sqlite连接上重新启用它,例如,连接后作为第一个命令)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句