PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 3. ������ | Fast Forward | Next |
�������������ݿ�ϵͳ��һ��������� һ�������Ҫ��������Ѷ�������������һ����һ�ģ����ɹ�����ʵIJ����� ���������������ǿ���������Щ����֮����м�״̬�ģ��������������һЩ���⣬ ���¸���������ɣ���ô������Щ���趼��ȫ����Ӱ�����ݿ⡣
���磬����һ�����е����ݿ�������ֿͻ��ʻ������Լ�ÿ�����е����� ��������Ҫ��¼һ�δ� Alice ���ʻ��� Bob ���ʻ��Ľ��Ϊ $100.00 ��֧����������ô������������ļ������ SQL ��������������
UPDATE accounts SET balance = balance - 100.00 WHERE name = 'Alice'; UPDATE branches SET balance = balance - 100.00 WHERE name = (SELECT branch_name FROM accounts WHERE name = 'Alice'); UPDATE accounts SET balance = balance + 100.00 WHERE name = 'Bob'; UPDATE branches SET balance = balance + 100.00 WHERE name = (SELECT branch_name FROM accounts WHERE name = 'Bob');
��Щ�����ϸ�������������Ҫ����Ҫ��������ǣ�浽�˺ü��������ĸ������������൱�IJ����� ���ǵ����й�Ա��ϣ��Ҫô������Щ���¶���Ч��Ҫôȫ���������á� ���ǵ�Ȼ��ϣ��һ��ϵͳ�����͵��� Bob �յ� 100 �鲻�� Alice ֧����Ǯ�� Ҳ��ϣ�� Alice ���Dz���Ǯ�� Bob �����õ���Ʒ��������Ҫ��֤������ڲ����Ĺ����г��˲�� ��ô������Щ���趼���ᷢ��Ч��������Щ������ϳ�һ�������������������ı�֤�� ������Ϊ��ԭ�ӵ�������������ĽǶ���������Ҫô��ȫ��������Ҫô��ȫ��������
���ǻ���Ҫ��֤��һ��һ��������ɲ��ҵõ����ݿ�ϵͳ���Ͽɣ� ��ô�����뱻�������õش洢�����Ҳ��������ı�������ʧ�� ���磬������Ǽ�¼����һ�� Bob �����Ķ����� ��ô���Dz�ϣ�����������߳����д���֮���һ�α����ͻᵼ�¶������ʻ��Ŀۼ�������ʧ�� һ�����������ݿⱣ֤һ���������������и��������������Ӧ֮ǰ����¼�����õĴ洢�У�Ҳ���Ǵ��̣���
���������ݿ������һ����Ҫ�����ʺ�ԭ�Ӹ��µĸ����ϵ���У� ��������������е�ʱ����ôÿ������Ӧ������������������δ��ɵı仯�� ���磬���һ��������æ�ż������з��е�����ܺͣ� ��ô����Ӧ�ð������� Alice �ķ��еĿ��ʺ����� Bob ���е����ʣ���֮��Ȼ�� ������������Ǻڰ����ģ����������������������ݿ��ϲ���������Ӱ�����������������������תʱ������Ŀ������ϡ� һ�����������ĸ����������֮ǰ�����������������ģ������ύ��ʱ�����и���ͬʱ�ɼ���
�� PostgreSQL �һ��������ͨ���� SQL ������ BEGIN �� COMMIT �����Χʵ�ֵġ� ������ǵ���������ʵ���Ͽ���������������
BEGIN; UPDATE accounts SET balance = balance - 100.00 WHERE name = 'Alice'; -- �ȵ� COMMIT;
����ڸ�����Ĺ����У����Ǿ��������ύ�����������Ǹշ��� Alice ������Ǹ������� ��ô���ǿ��Է��� ROLLBACK ��������� COMMIT �����ô��ĿǰΪֹ���ǵ����и��¶��ᱻȡ����
PostgreSQL ʵ���ϰ�ÿ�� SQL ��䵱����һ��������ִ�е��������� �����û�з��� BEGIN �����ôÿ����������䶼��һ�������� BEGIN �ͣ�����ɹ��Ļ��� COMMIT ����Χ����Χ�� һ���Χ�� BEGIN �� COMMIT ����м�������ʱ�����������
ע��: һЩ�ͻ����Զ����� BEGIN �� COMMIT�� �������ܲ���Ҫ��������Ϳ��Ի�ȡ������Ч�����鿴��ʹ�õĽӿڵ��ĵ���
���ǿ���ͨ��ʹ�� savepoints �ķ�������һ����������Ӿ�ϸ�ؿ������е���䡣 �������������ѡ���Ե����������е�ijЩ���֣����ύ����ʣ�µġ� ���� SAVEPOINT ������һ�������������Ҫ�������ʹ�� ROLLBACK TO �ع����ñ���㡣 ��������ڶ��屣��㵽�ع�����֮����������ݿ���Ķ��������������ڱ����֮ǰ���Ľ���������
�ڻع���һ�������֮������������Ȼ�������䶨�壬��������Իع������λ�úü��Ρ� ��Ȼ�������ȷ���㲻��Ҫ�ٴλع���һ������㣬��ô������ͷ���������ϵͳ�����ͷ�һЩ��Դ�� Ҫ��ס���ͷŻ��ع���һ������㶼���Զ��ͷ������������б���㡣
������Щ��������һ��������ڲ�������������Щ�������ܱ���������Ự������ ���ҽ������ύ���������飬��Щ�ύ�˵Ķ���������һ����Ը�ķ�ʽ�������Ự������ ���ع��Ķ�����ȫ�����ٱ�������
���ǵ����ǵ��������ݿ��𣿼������Ǵ� Alice ���ʻ������� $100.00�� Ȼ��� Bob ���ʻ����д��Ǽӿ�Ժ����Ƿ�������Ӧ�ø� Wally ���˺Ŵ��Ǽӿ ��ô���ǿ��������������ı����������
BEGIN; UPDATE accounts SET balance = balance - 100.00 WHERE name = 'Alice'; SAVEPOINT my_savepoint; UPDATE accounts SET balance = balance + 100.00 WHERE name = 'Bob'; -- ѽ���Ӵ�Ǯ�ˣ�Ӧ���� Wally ���˺� ROLLBACK TO my_savepoint; UPDATE accounts SET balance = balance + 100.00 WHERE name = 'Wally'; COMMIT;
������ӵ�Ȼ��ʵ��̫���ˣ�����ͨ��ʹ�ñ���㣬���ǿ��Զ�������д����Ŀ��ơ� ���ң�ROLLBACK TO �dz�������ȫ���ع�����������֮���Ψһ���õģ� �������¿���һ����������ϵͳ�����˳�״̬�µ�����ķ�����