Sql 更新并选择

Sql 更新并选择,sql,database,select,updates,privileges,Sql,Database,Select,Updates,Privileges,为什么我需要此服务器上的SELECT权限: UPDATE Sailors S SET S.rating = S.rating - 1 虽然我不需要用于此查询: UPDATE Sailors S SET S.rating = 8 在第一个示例中,基本上是设置S.rating=从水手中选择S.rating-1 在第二个查询中,您只需设置S.rating=a值(8)在第一个查询(第二个S.rating)中,您似乎正在从S读取数据在第二个查询中,您只向S写入数据。要读取数据,您将需要SELEC

为什么我需要此服务器上的SELECT权限:

UPDATE Sailors S SET 
S.rating = S.rating - 1
虽然我不需要用于此查询:

 UPDATE Sailors S
 SET S.rating = 8

在第一个示例中,基本上是设置S.rating=
从水手中选择S.rating-1


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

在第一个查询(第二个S.rating)中,您似乎正在从S读取数据在第二个查询中,您只向S写入数据。要读取数据,您将需要SELECT权限。

在第一个“S.rating-1”中,Oracle不知道这一点,Oracle引擎转到表中,通过别名S引用(在您的情况下是它的水手)和
a) 从it和it查询评级
b) 然后从中减去1


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

在您选择的第一个点中

= S.rating - 1
= 8
在第二个选项中,您没有选择

= S.rating - 1
= 8

SELECT=被授权人可以检索一个或多个列的数据

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

UPDATE=受让人可以修改一列或多列的现有数据


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