1. Apa yang dimaksud dengan transaksi?
Transaksi adalah suatu mekanisme, urutan operasi, yang berisi sekumpulan perintah operasi database, dan semua perintah dikirimkan ke sistem secara keseluruhan
Atau batalkan permintaan operasi, yaitu semua grup database ini akan dieksekusi, atau tidak ada satupun yang akan dieksekusi. Ini sangat cocok untuk sistem database yang dioperasikan oleh banyak pengguna secara bersamaan.
Transaksi adalah serangkaian operasi yang dilakukan sebagai satu unit kerja logis.
Suatu unit kerja yang logis harus mempunyai 4 atribut:
Atomicity: Suatu transaksi adalah operasi yang lengkap, dan elemen-elemen transaksi tidak dapat dibagi lagi. Semua elemen harus dikomit atau dibatalkan secara keseluruhan.
Konsistensi: Ketika transaksi selesai, data harus dalam keadaan konsisten.
Isolasi: Semua transaksi bersamaan diisolasi satu sama lain ketika data diubah.
Daya Tahan: Setelah transaksi selesai, dampaknya pada sistem bersifat permanen.
2. Buat transaksi
Mulai transaksi: memulai transaksi
Komit transaksi: komit transaksi
Transaksi rollback (batalkan): transaksi rollback
kode
gunakan tiang
pergi
jika ada(pilih * dari sysobjects di mana nama = 'bank')
bank meja jatuhkan
membuat bank tabel
(
nama pelanggan char(10), --nama pelanggan
saat iniUang uang --saldo
)
pergi
--Tambahkan batasan cek bahwa saldo akun tidak boleh kurang dari 1
mengubah bank meja
tambahkan batasan cek CK_currentMoney(currentMoney >= 1)
pergi
masukkan ke dalam nilai bank ('Zhang San',1000)
masukkan ke dalam nilai bank('李思',1)
pilih * dari bank
--------------------------------------------------- --------
--------------- * * * * 事* * 事* * * * -------------
--------------------------------------------------- --------
gunakan tiang
pergi
setel nocount on --Jangan tampilkan informasi nomor baris yang terpengaruh
print 'Data sebelum transaksi:'
pilih * dari bank
pergi
memulai transaksi
nyatakan @errorSum int
atur @errorSum=0
perbarui kumpulan bank currentMoney = currentMoney-1000 di mana nama pelanggan='Zhang San'
perbarui kumpulan bank currentMoney = currentMoney+1000 dengan nama pelanggan='李思'
atur @errorSum = @errorSum + 1
print 'Data dalam transaksi:'
pilih * dari bank
jika @errorSum <> 0
mulai
print 'Transaksi gagal, kembalikan transaksi'
transaksi pengembalian
akhir
kalau tidak
mulai
print 'Transaksi berhasil, komit transaksi, tulis ke hard disk, simpan secara permanen'
melakukan transaksi
akhir
pergi
print 'Data setelah transaksi:'
pilih * dari bank
--------------------------------------------------- --------
--------------- * * * * Kutipan* * Kutipan* * * * -------------
--------------------------------------------------- --------
--Indeks: Ini adalah metode internal SQL Server untuk mengatur data
--Indeks dapat dibagi menjadi tiga jenis berikut;
--Indeks unik: dua baris tidak boleh memiliki nilai indeks yang sama
--Indeks kunci utama: Jenis khusus indeks kunci utama yang secara otomatis membuat indeks unik saat menentukan kunci utama untuk sebuah tabel.
--Indeks berkerumun: Urutan fisik baris dalam tabel sama dengan urutan logis (indeks) dari nilai kunci. Tabel hanya dapat berisi satu indeks berkerumun (dapat dipahami sebagai pinyin kamus).
--Indeks yang tidak dikelompokkan: Data dan indeks berisi titik-titik ke lokasi terkait di mana data disimpan. Urutan fisik baris dalam tabel tidak cocok dengan urutan logis dari nilai kunci. (dapat dipahami sebagai PETA)
--Indeks berkerumun lebih cepat daripada indeks yang tidak berkerumun
--Hanya boleh ada satu indeks berkerumun dalam sebuah tabel, namun bisa terdapat beberapa indeks yang tidak berkerumun. Jika Anda menetapkan kolom sebagai kunci utama, kolom tersebut akan menjadi indeks berkerumun secara default.
--Tabel tidak boleh memiliki indeks, dan indeks kunci utama belum tentu merupakan indeks berkerumun.
--Di mana indeks digunakan?
--Kolom ini sering dicari dan digunakan untuk mengurutkan data
--Tipe buruk hanya memiliki beberapa nilai berbeda dan hanya terdapat beberapa baris data dalam tabel, sehingga tidak perlu menggunakan indeks.
--tata bahasa
--buat indeks_nama indeks [unik][clustered|nonclustered] pada nama_tabel (nama_kolom[,nama_kolom]...)
--[
-- dengan faktor pengisian = x --Faktor pengisian x adalah nilai antara 0 dan 100
--]
kode
gunakan tiang
pergi
jika ada (pilih [nama] dari sysindexes di mana [nama]='IX_stuMarks_writeExam')
jatuhkan indeks stuMarks.IX_stuMarks_writeExam --tanyakan apakah indeks sudah ada dan hapus jika sudah ada
buat indeks nonclustered IX_stuMarks_writeExam di stuMarks(writeExam)
dengan fillfactor=30 --Fill factor ruang yang dicadangkan
pergi
--Pertanyaan
pilih * dari stumarks (index=IX_stuMarks_writeExam)
--Sebuah kesalahan akan dilaporkan: Ada kesalahan sintaksis di dekat 'indeks'. Jika ingin menjadi bagian dari petunjuk tabel, harus ada kata kunci WITH dan tanda kurung, seperti:
pilih * dari stumarks dengan(index=IX_stuMarks_writeExam)
pilih * dari stumarks dengan(index=IX_stuMarks_writeExam) di mana ujian tertulis antara 60 dan 90
--------------------------------------------------- --------
--------------- * * * * Lihat* * Gambar* * * * ----------------
--------------------------------------------------- --------
Tampilan: Ini adalah tabel virtual, metode kueri berdasarkan data dari satu tabel atau beberapa tabel.
Fungsi umum: menyaring baris dalam tabel, mencegah pengguna yang tidak sah mengakses data sensitif, mengabstraksi beberapa tabel data fisik ke dalam satu tabel data logis
--tata bahasa:
--buat tampilan nama_tampilan
--sebagai
--<pilih pernyataan>
kode
gunakan tiang
pergi
jika ada(pilih * dari sysobjects di mana nama='view_stuinfo_stumarks')
jatuhkan tampilan view_stuinfo_stumarks
pergi
buat tampilan view_stuinfo_stumarks
sebagai
pilih nama=stuname, nomor siswa=stuinfo.stuno, nilai ujian tertulis=ujian tertulis, nilai ujian komputer=labexam,
skor rata-rata = (writeexam+labexam)/2 dari stuinfo kiri, gabung stumarks di stuinfo.stuno = stumarks.stuno
pergi