删除语句
语句的形式如下:
DELETE FROM table [WHERE expression]
此 SQL DELETE 语句会删除指定表中的零行或多行。SmartESQL 的删除操作是“搜索删除”。目前,SmartESQL 不支持“定位删除”(即 WHERE CURRENT OF cursor_name 构造)。这种“搜索删除”会删除满足 WHERE 条件的表中的所有行。
例如,
DELETE FROM Employee
or
DELETE FROM Employee WHERE name LIKE “X%”
注意:SmartEDB 以及由此延伸出的 SmartESQL 并不强制参照完整性。请务必不要删除那些存在一个或多个引用其主键值的外键的行。
LIMIT 子句
SmartESQL 支持在 DELETE 语句中使用 LIMIT 子句。例如:
XSQL>create table foo(x integer primary key);
XSQL>insert into foo values (4),(5),(2),(1),(3);
XSQL>delete from foo limit 1;
XSQL>select * from foo;
x
------------------------------------------------------------------------------
2
3
4
5
Selected records: 4
XSQL>select * from foo where x < 4 limit 2;
x
------------------------------------------------------------------------------
2
3
Selected records: 2
XSQL>delete from foo where x < 4 limit 2;
XSQL>select * from foo;
x
------------------------------------------------------------------------------
4
5
Selected records: 2
请注意,无法保证记录会按照任何特定顺序被删除。优化器的规则如下:
如果查询包含谓词 x<?, x<=?, x>? 或 x>=? 并且“x”字段存在有序(树)索引,则优化器执行索引搜索,并按“x”的升序遍历记录。因此,如果指定了 LIMIT N,则会移除 x 值最低的记录。
在所有其他情况下,顺序未作规定,任何 N 条记录都可以通过带有 LIMIT 子句的 DELETE 语句删除。