我有两个不同的表,它们的不同列如下:
CREATE TABLE T1(C1 INT)
CREATE TABLE T2(C2 INT)
每个程序员都知道,如果我们用错误的语法编写查询,查询编译器应该给我们一个错误。比如这个:
SELECT C1 FROM T2
--ERROR: Invalid column name 'C1'.
但是如果我们使用这个错误的查询作为内部选择,不幸的是 SQL 会执行它:
SELECT *
FROM T1
WHERE C1 IN (SELECT C1 FROM T2)
--returns all rows of T1
并且以下错误查询也将执行并返回所有行T1
SELECT *
FROM T1
WHERE EXISTS (SELECT C1 FROM T2)
--returns all rows of T1
当我们使用这些错误的查询时,情况会变得更糟,UPDATE
例如:
UPDATE T1
SET C1 = NULL
WHERE C1 IN (SELECT C1 FROM T2)
--updates all rows of T1
现在,我想防止这个错误。我可以强迫我的数据库开发人员小心,但是有没有系统的方法来防止这个错误?