Pendahuluan

Anda telah menghabiskan 10 hari terakhir belajar hampir semua yang dapat Anda lakukan dengan data dalam database relasional. Misalnya, Anda tahu bagaimana menggunakan SELECT SQL untuk mengambil data dari satu atau lebih tabel berdasarkan beberapa kondisi yang disediakan oleh pengguna. Anda juga memiliki kesempatan untuk menggunakan data laporan modifikasi seperti INSERT, UPDATE, dan DELETE. Pada hari ini, Anda telah menjadi tingkat menengah dan user SQL database. Jika diperlukan, Anda bisa membangun sebuah database dengan tabel yang terkait, yang masing-masing akan berisi beberapa bidang jenis data yang berbeda. Dengan menggunakan teknik desain yang tepat, Anda bisa memanfaatkan informasi yang terkandung dalam database ini menjadi sebuah aplikasi yang kuat.

Tujuan

Jika Anda adalah pengguna biasa SQL yang kadang-kadang perlu untuk mengambil data dari database, topik hari-hari pertama 10 menyediakan sebagian besar informasi yang Anda perlu. Namun, jika Anda berniat untuk (atau sedang diperlukan untuk) mengembangkan aplikasi profesional menggunakan semua jenis database relasional, mencakup topik-topik lanjutan selama empat hari ke depan – kontrol transaksi, keamanan, tertanam pemrograman SQL, dan prosedur database – akan membantu Anda banyak. Kita mulai dengan kontrol transaksi. Pada akhir hari, Anda akan tahu yang berikut:

  • Dasar-dasar transaksi kontrol
  • Bagaimana untuk menyelesaikan dan atau membatalkan transaksi
  • Beberapa perbedaan antara Sybase dan Oracle transaksi

Kontrol Transaksi

Transaksi kontrol, atau manajemen transaksi, mengacu pada kemampuan sistem manajemen database relasional untuk melakukan transaksi database. Transaksi unit kerja yang harus dilakukan dalam urutan logis dan berhasil sebagai kelompok atau tidak sama sekali. Istilah unit kerja berarti bahwa transaksi memiliki awal dan akhir. Jika ada yang tidak beres selama transaksi tersebut, seluruh unit kerja dapat dibatalkan jika diinginkan. Jika semuanya terlihat baik, seluruh unit kerja dapat disimpan ke database.

Dalam bulan-bulan mendatang atau tahun Anda mungkin akan mengimplementasikan aplikasi untuk beberapa pengguna untuk menggunakan di dalam jaringan. Klien / server lingkungan dirancang khusus untuk tujuan ini. Secara tradisional, server (dalam hal ini, server database) mendukung koneksi jaringan ganda untuk itu. Seperti yang sering terjadi dengan teknologi, ini baru ditemukan menambah fleksibilitas tingkat kompleksitas baru terhadap lingkungan. Pertimbangkan aplikasi perbankan yang dijelaskan dalam beberapa paragraf berikutnya.

Aplikasi Perbankan

Anda dipekerjakan oleh First Federal Bank Keuangan untuk membuat sebuah aplikasi yang menangani pemeriksaan transaksi rekening yang terdiri dari debit dan kredit untuk memeriksa rekening nasabah. Anda telah menetapkan suatu database yang bagus, yang telah diuji dan diverifikasi untuk bekerja dengan benar. Setelah menelpon aplikasi Anda, Anda memverifikasi bahwa ketika Anda mengambil 20 dari $ dari account, $ 20 benar-benar hilang dari database. Ketika Anda menambahkan $ 50,25 ke rekening giro, deposito ini muncul seperti yang diharapkan. Anda bangga mengumumkan kepada bos Anda bahwa sistem siap untuk pergi, dan beberapa komputer dibentuk di cabang lokal untuk memulai pekerjaan.

Dalam beberapa menit, Anda melihat situasi yang tidak Anda mengantisipasi: Sebagai salah satu teller adalah deposito cek, kasir lain menarik uang dari account yang sama. Dalam hitungan menit, “deposan banyak saldo tidak benar karena beberapa pengguna mengupdate tabel secara bersamaan. Sayangnya, beberapa pembaruan ini adalah Timpa satu sama lain. Tak lama kemudian, aplikasi Anda ditarik offline untuk perbaikan. Kami akan bekerja melalui masalah ini dengan database yang disebut Memeriksa. Dalam database ini adalah dua tabel, yang ditunjukkan pada Tabel 11.1 dan 11.2.

Tabel 11.1. Tabel PELANGGAN.

Nama Alamat Kota Negara Zip Customer_ID
Bill Turner 725 N. Deal Parkway Washington DC 20.085 1
John Keith 1220 Dr Via De Luna Jacksonville FL 33.581 2
Maria Rosenberg 482 Wannamaker Avenue Williamsburg VA 23.478 3
David Blanken 405 N. Highway Davis Greenville SC 29.652 4
Rebecca Little 7.753 Lane Woods Houston TX 38.764 5

Tabel 11.2. Tabel SALDO.

Average_Bal Curr_Bal Account_id
1.298,53 854,22 1
5.427,22 6.015,96 2
211,25 190,01 3
73,79 25,87 4
1.285,90 1.473,75 5
1.234,56 1.543,67 6
345,25 348,03 7

Asumsikan bahwa program aplikasi sekarang Anda melakukan operasi SELECT dan mengambil data berikut untuk Bill Turner:

OUTPUT:
  NAMA: Bill Turner 
  ALAMAT: 725 N. Parkway Deal 
  KOTA: Washington 
  NEGARA: DC 
  ZIP: 20085 
  CUSTOMER_ID: 1 

Walaupun informasi ini sedang diambil, pengguna lain dengan sambungan ke alamat informasi ini Bill Turner update database:

INPUT:
  SQL> UPDATE NASABAH SET Alamat = "Kingstowne Jalan 11.741" 
       WHERE Nama = "Bill Turner"; 

Seperti yang Anda lihat, informasi yang Anda diambil sebelumnya bisa update tidak sah jika terjadi selama tengah SELECT Anda. Jika permohonan Anda menembakkan surat untuk dikirim kepada Mr Bill Turner, alamat itu digunakan akan salah. Jelas, jika surat itu telah dikirimkan, Anda tidak akan dapat mengubah alamat. Namun, jika Anda telah menggunakan transaksi, perubahan data bisa terdeteksi, dan semua operasi lain Anda bisa telah diperpanjang kembali.

Awal sebuah Transaksi

Transaksi cukup sederhana untuk diimplementasikan. Anda akan memeriksa sintaks yang digunakan untuk melakukan transaksi dengan menggunakan sintaks SQL Oracle RDBMS serta Sybase SQL Server sintaks SQL.

Semua sistem database yang mendukung transaksi harus memiliki cara untuk secara eksplisit memberitahu sistem bahwa transaksi dimulai. (Ingat bahwa transaksi adalah pengelompokan logis dari pekerjaan yang memiliki awal dan akhir Oracle7.) Menggunakan Pribadi, sintaks seperti ini:

Sintaks:
  SET TRANSAKSI (READ ONLY | USE ROLLBACK SEGMEN segmen) 

Menetapkan standar SQL yang setiap database SQL implementasi harus mendukung pernyataan-tingkat membaca konsistensi, yaitu data harus tetap konsisten sementara satu pernyataan yang mengeksekusi. Namun, dalam banyak situasi data harus tetap berlaku di satu unit kerja, bukan hanya dalam pernyataan tunggal. Oracle memungkinkan pengguna untuk menentukan kapan transaksi akan mulai dengan menggunakan pernyataan TRANSAKSI SET berikut. Jika Anda ingin Bill Turner memeriksa informasi dan memastikan bahwa data tidak berubah, Anda bisa melakukan:

INPUT:
  SQL> SET TRANSAKSI READ ONLY; 
  SQL> SELECT * FROM PELANGGAN 
       Bill Turner WHERE NAMA = '; 

  --- --- Apakah Operasi Lainnya 

  SQL> COMMIT; 

Kami membahas laporan COMMIT hari ini. ATUR TRANSAKSI HANYA BACA pilihan memungkinkan Anda untuk secara efektif mengunci satu set catatan sampai transaksi berakhir. Anda dapat menggunakan opsi HANYA BACA dengan perintah berikut:

SELECT

LOCK TABLE

PERAN SET

ALTER SESI

ALTER SYSTEM

Opsi USE ROLLBACK SEGMEN memberitahu segmen database Oracle yang digunakan untuk ruang penyimpanan rollback. Pilihan ini merupakan perpanjangan Oracle dengan syntax SQL standar. Konsultasikan Anda dokumentasi Oracle untuk informasi lebih lanjut tentang cara menggunakan segmen untuk menjaga database Anda.

SQL-SQL server Transact menerapkan TRANSAKSI perintah BEGIN dengan sintaks berikut:

Sintaks:
  (mulai transaksi | tran) [transaction_name] 

Implementasi ini sedikit berbeda dari pelaksanaan Oracle. (Sybase tidak memungkinkan Anda untuk menentukan pilihan HANYA BACA Namun.), Sybase tidak memungkinkan Anda untuk memberikan nama suatu transaksi, selama transaksi tersebut adalah terluar dari serangkaian transaksi bersarang.

Grup berikut laporan ini mengilustrasikan penggunaan transaksi nested menggunakan bahasa SQL yang Transact-Sybase:

INPUT:
  1> mulai new_account transaksi 
  2 "masukkan> NASABAH nilai-nilai (" Parsons Izetta "," 1285 Pineapple Highway, "Greenville", "AL" 32.854, 6) 
  3> jika ada (pilih * dari NASABAH mana Nama = "Izetta Parsons") 
  4> mulai 
  5> mulai transaksi 
  6 8 menyisipkan> SALDO nilai (1250,76, 1431,26,) 
  7> akhir 
  8> lain 
  9 rollback transaksi> 
  10> jika ada (pilih * dari SALDO mana account_id = 8) 
  11> mulai 
  12> mulai transaksi 
  13 6 menyisipkan> AKUN nilai (8,) 
  14> akhir 
  15> yang lain 
  16 rollback transaksi> 
  17> jika ada (pilih * dari AKUN mana 8 = account_id dan Customer_ID = 6) 
  18> melakukan transaksi 
  19> yang lain 
  20 rollback transaksi> 
  21> pergi 

Untuk saat ini, jangan khawatir tentang laporan TRANSAKSI ROLLBACK dan COMMIT TRANSAKSI. Aspek penting dari contoh ini adalah transaksi nested – atau transaksi dalam transaksi.

Perhatikan bahwa transaksi asli (new_account) dimulai pada baris 1. Setelah menyisipkan pertama, Anda memeriksa untuk memastikan INSERT itu dilaksanakan dengan baik. Transaksi lain dimulai pada baris 5. Ini transaksi dalam transaksi disebut transaksi bersarang.

database lain mendukung opsi AUTOCOMMIT. Pilihan ini dapat digunakan dengan perintah SET. Sebagai contoh:

  SET AUTOCOMMIT [ON | OFF] 

Secara default, ON SET AUTOCOMMIT perintah dijalankan pada saat startup. Ini memberitahu SQL untuk secara otomatis melakukan semua pernyataan Anda mengeksekusi. Jika Anda tidak ingin perintah ini akan otomatis dijalankan, atur pilihan AUTOCOMMIT untuk off:

  AUTOCOMMIT SET OFF 

CATATAN: Periksa’s database sistem dokumentasi Anda untuk menentukan bagaimana Anda akan memulai transaksi.

Penyelesaian Transaksi sebuah

Sintaks Oracle untuk mengakhiri transaksi adalah sebagai berikut:

Sintaks:
  COMMIT [KERJA] 
  [COMMENT 'teks' 
  | FORCE '' [teks, integer]]; 

Berikut adalah perintah yang sama menggunakan sintaks Sybase:

Sintaks:
  COMMIT (TRANSAKSI | TRAN | KERJA) (TRANSACTION_NAME) 

Perintah COMMIT menyimpan semua perubahan yang dibuat selama transaksi. Pelaksana pernyataan COMMIT sebelum memulai transaksi memastikan bahwa tidak ada kesalahan dibuat dan tidak ada transaksi sebelumnya yang tersisa menggantung.

Contoh berikut memverifikasi bahwa perintah COMMIT dapat digunakan dengan sendirinya tanpa menerima kesalahan kembali dari sistem database.

INPUT:
  SQL> COMMIT; 
  SQL> SET TRANSAKSI READ ONLY; 
  SQL> SELECT * FROM PELANGGAN 
       Bill Turner WHERE NAMA = '; 

  --- --- Apakah Operasi Lainnya 

  SQL> COMMIT, 

Sebuah SQL menggunakan Oracle laporan COMMIT akan terlihat seperti ini:

INPUT:
  SQL> SET TRANSAKSI; 
  SQL INSERT> INTO PELANGGAN VALUES 
       ("John MacDowell", "2000 Lake Road menyergap", "Chicago", "IL", 42854, 7); 
  SQL> COMMIT; 
  SQL> SELECT * FROM PELANGGAN; 

Tabel PELANGGAN.

Nama Alamat Kota Negara Zip Customer_ID
Bill Turner 725 N. Deal Parkway Washington DC 20.085 1
John Keith 1220 Dr Via De Luna Jacksonville FL 33.581 2
Maria Rosenberg 482 Wannamaker Avenue Williamsburg VA 23.478 3
David Blanken 405 N. Highway Davis Greenville SC 29.652 4
Rebecca Little 7.753 Lane Woods Houston TX 38.764 5
Izetta Parsons 1285 Pineapple Highway Greenville AL 32.854 6
John MacDowell 2000 terjang Lake Road Chicago IL 42.854 7

Sebuah SQL menggunakan Sybase laporan COMMIT akan terlihat seperti ini:

INPUT:
  1> mulai transaksi 
  2 memasukkan> ke dalam nilai-nilai NASABAH 
     ("John MacDowell", "2000 Lake Road menyerang", "Chicago", "IL", 42854, 7) 
  3> melakukan transaksi 
  4> pergi 
  1 * pilih> dari NASABAH 
  2> pergi 

Tabel PELANGGAN.

Nama Alamat Kota Negara Zip Customer_ID
Bill Turner 725 N. Deal Parkway Washington DC 20.085 1
John Keith 1220 Dr Via De Luna Jacksonville FL 33.581 2
Maria Rosenberg 482 Wannamaker Avenue Williamsburg VA 23.478 3
David Blanken 405 N. Highway Davis Greenville SC 29.652 4
Rebecca Little 7.753 Lane Woods Houston TX 38.764 5
Izetta Parsons 1285 Pineapple Highway Greenville AL 32.854 6
John MacDowell 2000 terjang Lake Road Chicago IL 42.854 7

Laporan sebelumnya mencapai hal yang sama seperti yang mereka lakukan dengan menggunakan sintaks Oracle7. Namun, dengan menempatkan perintah COMMIT segera setelah transaksi dimulai, Anda memastikan bahwa transaksi yang baru akan menjalankan dengan benar.


CATATAN: The COMMIT BEKERJA perintah melakukan operasi yang sama seperti perintah COMMIT (atau Sybase’s TRANSAKSI perintah COMMIT). Hal ini disediakan hanya untuk memenuhi sintaks ANSI SQL.

Ingat bahwa setiap perintah COMMIT harus sesuai dengan SET TRANSAKSI TRANSAKSI dilaksanakan sebelumnya atau perintah BEGIN. Catatan kesalahan yang Anda terima dengan pernyataan berikut:

Oracle SQL:

INPUT:
  SQL> INSERT INTO SALDO nilai (18.765,42, 19.073,06, 8); 
  SQL> COMMIT WORK; 

Sybase SQL:

INPUT:
  1> masukkan ke dalam nilai-nilai SALDO (18.765,42, 19.073,06, 8) 
  2> melakukan pekerjaan 

Membatalkan Transaksi

Sementara transaksi yang sedang berlangsung, beberapa jenis pengecekan error biasanya dilakukan untuk menentukan apakah itu berhasil mengeksekusi. Anda dapat membatalkan transaksi Anda bahkan setelah berhasil menyelesaikan dengan mengeluarkan pernyataan ROLLBACK, namun harus dikeluarkan sebelum COMMIT sebuah. Pernyataan ROLLBACK harus dijalankan dari dalam transaksi. Pernyataan gulungan transaksi ROLLBACK kembali ke awal, dalam kata lain, negara database dikembalikan untuk apa itu di transaksi yang awal. Sintaks untuk perintah ini menggunakan Oracle7 adalah sebagai berikut:

Sintaks:
  ROLLBACK [KERJA] 
  [ATAS [savepoint] SAVEPOINT 
  | FORCE "'] teks 

Seperti yang Anda lihat, perintah ini membuat penggunaan savepoint transaksi. Kami membahas teknik ini nanti.

SQL-pernyataan Transact’s ROLLBACK Sybase terlihat sangat mirip dengan perintah COMMIT:

Sintaks:
  (rollback transaksi | tran | kerja) 
    [Transaction_name | savepoint_name] 

Sebuah urutan perintah SQL Oracle akan terlihat seperti ini:

INPUT:
  SQL> SET TRANSAKSI; 
  SQL INSERT> INTO PELANGGAN VALUES 
      ("Bubba MacDowell", "2222 Way Danau Biru", "Austin", "TX", 39874, 8); 
  SQL> ROLLBACK; 
  SQL> SELECT * FROM PELANGGAN; 

Tabel PELANGGAN.

Nama Alamat Kota Negara Zip Customer_ID
Bill Turner 725 N. Deal Parkway Washington DC 20.085 1
John Keith 1220 Dr Via De Luna Jacksonville FL 33.581 2
Maria Rosenberg 482 Wannamaker Avenue Williamsburg VA 23.478 3
David Blanken 405 N. Highway Davis Greenville SC 29.652 4
Rebecca Little 7.753 Lane Woods Houston TX 38.764 5
Izetta Parsons 1285 Pineapple Highway Greenville AL 32.854 6
John MacDowell 2000 terjang Lake Road Chicago IL 42.854 7

Sebuah urutan perintah SQL Sybase akan terlihat seperti ini:

INPUT:
  1> mulai transaksi 
  2 memasukkan> ke dalam nilai-nilai NASABAH 
    ("Bubba MacDowell", "2222 Way Danau Biru", "Austin", "TX", 39874, 8) 
  3 rollback transaksi> 
  4> pergi 
  1 * SELECT> DARI PELANGGAN 
  2> pergi 

Tabel PELANGGAN.

Nama Alamat Kota Negara Zip Customer_ID
Bill Turner 725 N. Deal Parkway Washington DC 20.085 1
John Keith 1220 Dr Via De Luna Jacksonville FL 33.581 2
Maria Rosenberg 482 Wannamaker Avenue Williamsburg VA 23.478 3
David Blanken 405 N. Highway Davis Greenville SC 29.652 4
Rebecca Little 7.753 Lane Woods Houston TX 38.764 5
Izetta Parsons 1285 Pineapple Highway Greenville AL 32.854 6
John MacDowell 2000 terjang Lake Road Chicago IL 42.854 7

Seperti yang dapat Anda lihat, catatan baru tidak ditambahkan karena laporan ROLLBACK digulung masukkan kembali.

Misalkan Anda menulis aplikasi untuk antarmuka pengguna grafis, seperti Microsoft Windows. Anda memiliki kotak dialog yang query database dan memungkinkan pengguna untuk mengubah nilai.Jika pengguna memilih OK, database menyimpan perubahan. Jika pengguna memilih Cancel, perubahan tersebut dibatalkan. Jelas, situasi ini memberi Anda kesempatan untuk menggunakan transaksi.


CATATAN: Daftar kode berikut menggunakan Oracle SQL sintaks; pemberitahuan SQL> prompt dan nomor baris. Daftar berikutnya menggunakan sintaks SQL Sybase, yang tidak memiliki> SQL prompt.

Ketika kotak dialog dimuat, laporan SQL yang dijalankan:

INPUT:
  SQL> SET TRANSAKSI; 
  SQL> SELECT CUSTOMERS.NAME, BALANCES.CURR_BAL, BALANCES.ACCOUNT_ID 
    2 DARI PELANGGAN, SALDO 
    3 WHERE CUSTOMERS.NAME = "Rebecca Little" 
    4 DAN CUSTOMERS.CUSTOMER_ID = BALANCES.ACCOUNT_ID; 

Kotak dialog memungkinkan pengguna untuk mengubah saldo rekening koran, sehingga Anda perlu menyimpan nilai ini kembali ke database.

Ketika pengguna memilih OK, update akan berjalan.

INPUT:
  SQL> UPDATE SET SALDO CURR_BAL = 'baru-nilai' WHERE account_id = 6; 
  SQL> COMMIT; 

Ketika pengguna memilih Batal, pernyataan ROLLBACK dikeluarkan.

INPUT:
  SQL> ROLLBACK; 

Ketika kotak dialog dimuat menggunakan Sybase SQL, laporan SQL dijalankan:

INPUT:
  1> mulai transaksi 
  2 CUSTOMERS.Name pilih>, BALANCES.Curr_Bal, BALANCES.Account_ID 
  3> dari PELANGGAN, SALDO 
  4> mana CUSTOMERS.Name = "Rebecca Little" 
  5> dan CUSTOMERS.Customer_ID = BALANCES.Account_ID 
  6> pergi 

Kotak dialog memungkinkan pengguna untuk mengubah saldo rekening koran, sehingga Anda dapat menyimpan nilai ini kembali ke database.

Di sini lagi, ketika tombol OK dipilih, update akan berjalan.

INPUT:
  1 SALDO update> set Curr_BAL = 'baru-nilai' WHERE account_id = 6 
  2> melakukan transaksi 
  3> pergi 

Ketika pengguna memilih Batal, pernyataan ROLLBACK dikeluarkan.

INPUT:
  1 rollback transaksi> 
  2> pergi 

Pernyataan ROLLBACK membatalkan seluruh transaksi. Ketika Anda transaksi bersarang, laporan sepenuhnya ROLLBACK membatalkan semua transaksi, berguling mereka kembali ke awal transaksi terluar.

Jika tidak ada transaksi yang sedang aktif, mengeluarkan pernyataan ROLLBACK atau perintah COMMIT tidak berpengaruh pada sistem database. (Bayangkan mereka sebagai perintah mati dengan tidak ada tujuan.)

Setelah pernyataan COMMIT telah dieksekusi, semua tindakan dengan transaksi dieksekusi. Pada titik ini terlalu terlambat untuk memutar kembali transaksi.

Menggunakan savepoint Transaksi

Rolling kembali transaksi membatalkan seluruh transaksi. Tapi anggaplah Anda ingin “semicommit” tengah Anda transaksi melalui laporan tersebut. Kedua Sybase dan Oracle SQL memungkinkan Anda untuk menyimpan transaksi dengan sebuah savepoint. Sejak saat itu, jika ROLLBACK adalah dikeluarkan, transaksi yang terguling kembali ke savepoint yang disimpan. Semua pernyataan yang dieksekusi sampai ke titik dari savepoint berada. Sintaks untuk menciptakan savepoint menggunakan Oracle SQL adalah sebagai berikut:

Sintaks:
  SAVEPOINT savepoint_name; 

sintaks Sybase SQL Server untuk menciptakan savepoint adalah sebagai berikut:

Sintaks:
  savepoint_name menyimpan transaksi 

Contoh berikut ini menggunakan sintaks SQL Oracle.

INPUT:
  SQL> SET TRANSAKSI; 
  UPDATE SQL> SET SALDO CURR_BAL = 25000 WHERE 5 = account_id; 
  SQL> SAVEPOINT save_it; 
  SQL> DELETE FROM WHERE SALDO 5 = account_id; 
  SQL> ROLLBACK TO save_it SAVEPOINT; 
  SQL> COMMIT; 
  SQL> * SELECT FROM SALDO; 

Tabel SALDO.

Average_Bal Curr_Bal Account_id
1.298,53 854,22 1
5.427,22 6.015,96 2
211,25 190,01 3
73,79 25,87 4
1.285,90 25.000,00 5
1.234,56 1.543,67 6
345,25 348,03 7
1.250,76 1.431,26 8

Contoh ini menggunakan sintaks SQL Sybase:

INPUT:
  1> mulai transaksi 
  2 SALDO update> set Curr_Bal = 25.000 mana account_id = 5 
  3> menyimpan save_it transaksi 
  4> menghapus dari SALDO mana account_id = 5 
  5> transaksi rollback save_it 
  6> melakukan transaksi 
  7> pergi 
  1 * pilih> dari SALDO 
  2> pergi 

Tabel SALDO.

Average_Bal Curr_Bal Account_id
1.298,53 854,22 1
5.427,22 6.015,96 2
211,25 190,01 3
73,79 25,87 4
1.285,90 25.000,00 5
1.234,56 1.543,67 6
345,25 348,03 7
1.250,76 1.431,26 8

Contoh sebelumnya menciptakan savepoint disebut SAVE_IT. Versi update dibuat ke database yang mengubah nilai kolom dari tabel CURR_BAL SALDO. Anda kemudian disimpan perubahan ini sebagai sebuah savepoint. Berikut ini menyimpan, Anda dieksekusi pernyataan DELETE, tetapi Anda berguling transaksi kembali ke savepoint segera sesudahnya. Kemudian Anda dieksekusiCOMMIT TRANSAKSI, yang melakukan semua perintah sampai dengan savepoint tersebut. Apakah Anda seorang TRANSAKSI ROLLBACK dijalankan setelah perintah savepoint_name TRANSAKSI ROLLBACK, seluruh transaksi akan telah diperpanjang kembali dan tidak ada perubahan yang akan dilakukan.

Contoh ini menggunakan sintaks SQL Oracle:

INPUT:
  SQL> SET TRANSAKSI; 
  UPDATE SQL> SET SALDO CURR_BAL = 25000 WHERE 5 = account_id; 
  SQL> SAVEPOINT save_it; 
  SQL> DELETE FROM WHERE SALDO 5 = account_id; 
  SQL> ROLLBACK TO save_it SAVEPOINT; 
  SQL> ROLLBACK; 
  SQL> SELECT * FROM SALDO; 

Tabel SALDO.

Average_Bal Curr_Bal Account_id
1.298,53 854,22 1
5.427,22 6.015,96 2
211,25 190,01 3
73,79 25,87 4
1.285,90 1.473,75 5
1.234,56 1.543,67 6
345,25 348,03 7
1.250,76 1.431,26 8

Contoh ini menggunakan sintaks SQL Sybase:

INPUT:
  1> mulai transaksi 
  2 SALDO update> set Curr_Bal = 25.000 mana account_id = 5 
  3> menyimpan save_it transaksi 
  4> menghapus dari SALDO mana account_id = 5 
  5> transaksi rollback save_it 
  6 rollback transaksi> 
  7> pergi 
  1 * pilih> dari SALDO 
  2> pergi 

Tabel SALDO.

Average_Bal Curr_Bal Account_id
1.298,53 854,22 1
5.427,22 6.015,96 2
211,25 190,01 3
73,79 25,87 4
1.285,90 1.473,75 5
1.234,56 1.543,67 6
345,25 348,03 7
1.250,76 1.431,26 8

Ringkasan

Sebuah transaksi dapat didefinisikan sebagai suatu unit kerja yang terorganisir. transaksi biasanya melaksanakan serangkaian operasi yang dijalankan tergantung pada operasi sebelumnya. Jika salah satu operasi ini tidak dilaksanakan dengan baik atau jika data diubah untuk beberapa alasan, sisa pekerjaan dalam suatu transaksi harus dibatalkan. Jika tidak, jika semua laporan dijalankan dengan benar, transaksi pekerjaan harus disimpan.

Proses membatalkan transaksi rollback satu disebut. Proses menyimpan karya seorang dijalankan dengan benar transaksi disebut komit. sintaks SQL mendukung kedua proses melalui sintaks mirip dengan pernyataan berikut dua:

Sintaks:
  MULAI TRANSAKSI 
       Pernyataan 1 
       pernyataan 2 
       pernyataan 3 
  ROLLBACK TRANSAKSI 

atau

Sintaks:
  MULAI TRANSAKSI 
       Pernyataan 1 
       pernyataan 2 
       pernyataan 3 
  COMMIT TRANSAKSI
Sumber ; http://www.webbasedprogramming.com