如何检查插入或更新是否会影响选择查询的结果

时间:2017-09-25 16:11:39

标签: python mysql sql database postgresql

我有sql表:

CREATE TABLE station 
  (title CHAR(256) PRIMARY KEY, 
   city CHAR(20),
   latitude REAL, 
   longitude REAL);

我有一些疑问,例如 Q1

SELECT * FROM station WHERE latitude > 50 AND longitude > 90;

Q2

SELECT * FROM station WHERE latitude > 50 OR longitude > 90;

如何确定下一个插入查询:

INSERT INTO station VALUES ("Station 1", "London", 60, 10)

会改变 Q2 的结果,但不会改变 Q1 的结果吗?

假设选择查询可能无限复杂,有时可能很难回答这个问题,这就是为什么误报是合适的。

换句话说,我该如何编写这样的函数(Python)?

def can_affect(insert_query: str, select_query: str) -> bool:
    """
    Tells if particular insert query can affect results of select query. 

    Returns False if there is no chance that insert will affect select query.
    Otherwise, returns True.
    """

1 个答案:

答案 0 :(得分:1)

编辑:使用Postgres交易。

  1. 执行" BEGIN TRANSACTION READ WRITE;"。
  2. 执行选择。记录返回的行数。
  3. 执行插入。
  4. 再次执行选择。记录返回的行数。
  5. 执行" ROLLBACK;"。这将撤消您对表格所做的任何更改。
  6. 如果选择之间的行数不同,则返回true。不,虚假。