【问题标题】:UPDATE and SELECT更新和选择
【发布时间】:2016-07-28 18:53:58
【问题描述】:

为什么我需要 SELECT 权限:

UPDATE Sailors S SET 
S.rating = S.rating - 1

虽然这个查询不需要它:

 UPDATE Sailors S
 SET S.rating = 8

【问题讨论】:

  • 我猜这取决于数据库(实际上,任何具有更新权限的人都有选择权限)。但是第一个查询必须读取一个值,所以这可能就是原因。
  • 您使用的是哪个 DBMS?

标签: sql database select updates privileges


【解决方案1】:

首先,您实际上是在设置 S.rating = SELECT S.rating - 1 FROM Sailors S

在第二个中,您只需设置 S.rating = 一个值 (8)

【讨论】:

    【解决方案2】:

    看起来您是在第一个查询(第二个 S.rating)中从 S 读取数据,而在第二个查询中您只是向 S 写入数据。要读取数据,您需要 SELECT 权限。

    【讨论】:

      【解决方案3】:

      在第一个“S.rating -1”中,这对于 Oracle 是未知的,并且 Oracle 引擎通过别名 S(在您的情况下为它的水手)访问表引用,并且
      a) 从中查询评级和
      b) 然后从中减去 1

      对于点 a,它需要选择权限。

      【讨论】:

        【解决方案4】:

        在你选择的第一个

        = S.rating - 1
        

        在你没有选择的那一秒

        = 8
        

        sp_table_privileges

        SELECT = GRANTEE 可以检索一列或多列的数据。

        INSERT = GRANTEE 可以为一列或多列的新行提供数据。

        UPDATE = GRANTEE 可以修改一个或多个列的现有数据。

        【讨论】:

          猜你喜欢
          • 2017-02-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-16
          • 2018-09-22
          • 2019-08-25
          • 1970-01-01
          相关资源
          最近更新 更多