UPDATE

Name

UPDATE -- ����һ�����е���

Synopsis

UPDATE [ ONLY ] table SET column = { expression | DEFAULT } [, ...]
    [ FROM fromlist ]
    [ WHERE condition ]

����

UPDATE �ı����������������е������˵���/�ֶε�ֵ�� ֻ��Ҫ���ĵ���/�ֶ���Ҫ�� SET �Ӿ��г��֣�û����ȷ�޸ĵ��ֶα�������ԭ������ֵ��

ȱʡʱ��UPDATE �������������ı�������ӱ�ļ�¼�� �����ϣ��ֻ�����������ı���Ӧ��ʹ�� ONLY �Ӿ䡣

ʹ�ô�����ͬ�����ݿ������������Ϣ������һ���������ַ��������ã� ʹ���Ӳ�ѯ�������� FROM �Ӿ�����������һ���� �ĸ���������ȡ���ھ���Ļ�����

Ҫ���ı�����������UPDATE Ȩ�ޣ� ͬ���� expression ���� condition �������ᵽ���κα�ҲҪ��SELECTȨ�ޡ�

����

table

�ִ������ƣ�������ģʽ���Σ���

column

�� table ���ֶ����� ��Ҫʱ���ֶ������������������������±����Ρ�

expression

������/�ֶε�һ����Ч��ֵ����ʽ�����ʽ����ʹ�ñ�������������ֶεľ���ֵ��

DEFAULT

���ֶ�����Ϊ����ȱʡֵ�����û��ȱʡ���ʽ����������ô���� NULL����

fromlist

һ������ʽ���б����������������е��ֶγ����� WHERE ����� ��������ڿ�����һ�� SELECT ���� FROM �Ӿ� ���������б���ע��Ŀ�����Բ��ܳ����� fromlist � ����������ʹ��һ�������ӣ����ʱ���������� fromlist ��һ����������ʽ���֣���

condition

һ�����ʽ������ boolean ���͡�ֻ��������ʽ���� true ���б����¡�

���

�ɹ���ɺ�UPDATE ���������

UPDATE count

�������ǩ��count �Ǹ��µ������� ��� count �� 0�� ��ôû�з��� condition ���У��������Ϊ�Ǵ��󣩡�

ע��

�ڳ��� FROM �Ӿ��ʱ��ʵ���Ϸ�����������Ŀ���� fromlist ���ᵽ�ı�������һ�𣬲���ÿ����������ж�����һ��Ŀ���ĸ��²����� ��ʹ�� FROM ��ʱ����Ӧ�ñ�֤����Ϊÿ����Ҫ�޸ĵ����������һ������С� ���仰˵��һ��Ŀ���в�Ӧ�úͳ���һ����������������������ӡ� ����������˶���һ���У���ô���������潫��ֻ��һ�����ڸ���Ŀ���У� ����ʹ��������һ������Ԥ�ڵ����顣

��Ϊ�����ȷ���ԣ�ֻ���Ӳ�ѯ���������������ǰ�ȫ�ģ� ����ͨ�����Ѷ����ұ�ʹ������Ҳ����Щ��

����

�ѱ� films ����ֶ� kind ��Ĵ� Drama ��Dramatic ���棺

UPDATE films SET kind = 'Dramatic' WHERE kind = 'Drama';

������ weather �е�һ�е��¶ȼ�¼���Ұѽ�ˮ����Ϊȱʡֵ��

UPDATE weather SET temp_lo = temp_lo+1, temp_hi = temp_lo+15, prcp = DEFAULT
  WHERE city = 'San Francisco' AND date = '2003-07-03';

���Ӹ��� Acme ��˾�ͻ������۵����ۼ�����ʹ�� FROM �Ӿ��﷨��

UPDATE employees SET sales_count = sales_count + 1 FROM accounts
  WHERE accounts.name = 'Acme Corporation'
  AND employees.id = accounts.sales_person;

ִ��ͬ���IJ�����ʹ�� WHERE �Ӿ�����Ӳ�ѯ��

UPDATE employees SET sales_count = sales_count + 1 WHERE id =
  (SELECT sales_person FROM accounts WHERE name = 'Acme Corporation');

��ͼ���ſ��������һ���µĿ������������ڣ������������Ŀ������ Ҫ�����������ֲ�ʹ��������ʧЧ��ʹ�ñ����㣨savepoints����

BEGIN;
-- ��������
SAVEPOINT sp1;
INSERT INTO wines VALUES('Chateau Lafite 2003', '24');
-- �����������Ϊһ��Ψһ����Υ����ʧЧ��
-- ����������Ƿ�����Щ���
ROLLBACK TO sp1;
UPDATE wines SET stock = stock + 24 WHERE winename = 'Chateau Lafite 2003';
-- �����������������
COMMIT;

������

����������ѭ SQL ��׼�� ֻ�� FROM �Ӿ��� PostgreSQL ��չ��

��Щ�������ݿ�ϵͳ�ṩһ�� FROM ѡ� �����ѡ���£���ΪĿ�����ٴ��� FROM ���г��� �ⲻ�� PostgreSQL ���� FROM �ķ�ʽ�� ��ֲʹ��������չ��Ӧ�õ�ʱ��Ҫע�⡣