关于数据库锁机制
1.数据库是如何加锁的,简单的sql语句
SELECT username
,passwd
FROM g_test
LIMIT 1 FOR UPDATE
正常的查询后加上FOR UPDATE 就是给数据库加锁了么?
2.加上FOR UPDATE是对写加锁,这个语句是否对DELETE生效?
3.MYISAM加锁是全表锁?
4.InnoDB是行锁?
新加问题
5.如果数据库开启了事务并加了锁,由于某些原因后续操作未进行彻底,没有commit或rollback,事务是否有超时机制?锁是否有超时机制?到期自动销毁
回复内容:
1.数据库是如何加锁的,简单的sql语句
SELECT username
,passwd
FROM g_test
LIMIT 1 FOR UPDATE
正常的查询后加上FOR UPDATE 就是给数据库加锁了么?
2.加上FOR UPDATE是对写加锁,这个语句是否对DELETE生效?
3.MYISAM加锁是全表锁?
4.InnoDB是行锁?
新加问题
5.如果数据库开启了事务并加了锁,由于某些原因后续操作未进行彻底,没有commit或rollback,事务是否有超时机制?锁是否有超时机制?到期自动销毁
其他答主说的不够全面,我帮你整理一下吧。
首先我认为在谈到数据库各种机制前(尤其是MySQL这种插件式plugin存储引擎的数据库),你一定要声明你使用的存储引擎,不然问题无意义,此处我假定你的第1、2条问题是基于innoDB存储引擎下的,并且我的理论也是基于innoDB引擎。
明确概念,锁分为两种:
读锁->共享锁 (S)
写锁 -> 排它锁 (X)
写操作的为排它锁,读操作的为排它锁,
理论上来说只要被操作对象(例如 id =1这行)出现排它锁,那么除了该事务可以操作这行,其余事务全部无权对这行进行任何操作,无论是读操作还是写操作
对了,selct .. for update并不属于SQL规范,所以实际上应该避免使用。
select ..for update 是进行排它锁操作的,但是这条语句在事务中才有意义,因为在非事务情况下使用,一下子就完成了锁定与解锁的操作,无任何实际意义。
还有一点很重要的是innoDB在隔离级别为REPEATABLE READ和READ COMMITTED的事务操作中,并没有直接使用行级锁,而是使用了乐观机制MVCC,即大多数的读操作都不用加锁,即使是写锁也只是锁必要的行《了解MVCC》
回到你的问题:
1、“SELECT username,passwd FROM g_test LIMIT 1 FOR UPDATE” 是否加锁了?
是的,加了一个行级排它锁。
2、“for update写加锁是否对delete语句有效?”
加上for update是一个写锁(即排它锁),它对delete当然有效(delete无法操作),但还是上面的观点,在REPEATABLE READ和READ COMMITTED的事务操作中,使用了MVCC,所以你可以惊奇的发现即使用了for update这条排它锁语句后,其他事务依旧可以进行读操作。
3、“MyISAM加锁是全表锁吗?”
对的,MyISAM存储引擎只有表级锁(table-level locking)
4、“innoDB是行级锁?”
不全对,innoDB具有行级锁和表级锁,但它默认是行级锁。
5、“事务和锁是否有超时机制”
事务本身是没有超时机制的,但是如果事务是由于锁表而造成的超时原因,是会进行回滚操作。innodb默认锁超时时间为50秒,通过设置变量innodb_lock_wait_timeout来实现。
MYISAM加锁是对整张表的;InnoDB加锁是行锁,针对一行记录
SELECT username,passwd FROM g_test LIMIT 1 FOR UPDATE就是防止多个进程过来同时执行sql查询,加上FOR UPDATE的话,会被锁定,这样另一个进程过来就会排队等待,直到上一个进程执行完毕;也就是并发
最重要的一点是,加锁,要放到事务中去,即执行sql执行先开启事务。
InnoDB 采用的是两阶段锁定协议(two-phase locking protocol)。在事务执行过程中,随时都可执行锁定。锁只有在执行 commit 或 rollback 时才会释放,并且所有的锁是在同一时刻被释放。InnoDB会根据隔离级别在需要时自动加锁。此为隐式锁定;
InnoDB 也支持通过特定语句进行显式锁定:
select ... lock in share mode (shared lock)
select ... for update (exclusive lock)
另外 MySQL在服务器层也支持lock tables 和 unlock tables 语句,这和存储引擎无关。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Buat pangkalan data menggunakan Navicat Premium: Sambungkan ke pelayan pangkalan data dan masukkan parameter sambungan. Klik kanan pada pelayan dan pilih Buat Pangkalan Data. Masukkan nama pangkalan data baru dan set aksara yang ditentukan dan pengumpulan. Sambung ke pangkalan data baru dan buat jadual dalam penyemak imbas objek. Klik kanan di atas meja dan pilih masukkan data untuk memasukkan data.

MySQL adalah sistem pengurusan pangkalan data sumber terbuka. 1) Buat Pangkalan Data dan Jadual: Gunakan perintah Createdatabase dan Createtable. 2) Operasi Asas: Masukkan, Kemas kini, Padam dan Pilih. 3) Operasi lanjutan: Sertai, subquery dan pemprosesan transaksi. 4) Kemahiran Debugging: Semak sintaks, jenis data dan keizinan. 5) Cadangan Pengoptimuman: Gunakan indeks, elakkan pilih* dan gunakan transaksi.

Masa depan PHP akan dicapai dengan menyesuaikan diri dengan trend teknologi baru dan memperkenalkan ciri -ciri inovatif: 1) menyesuaikan diri dengan pengkomputeran awan, kontena dan seni bina microservice, menyokong Docker dan Kubernetes; 2) memperkenalkan pengkompil JIT dan jenis penghitungan untuk meningkatkan prestasi dan kecekapan pemprosesan data; 3) Berterusan mengoptimumkan prestasi dan mempromosikan amalan terbaik.

PHP dan Python masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1.Php sesuai untuk pembangunan web, dengan sintaks mudah dan kecekapan pelaksanaan yang tinggi. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan yang kaya.

MySQL dan SQL adalah kemahiran penting untuk pemaju. 1.MYSQL adalah sistem pengurusan pangkalan data sumber terbuka, dan SQL adalah bahasa standard yang digunakan untuk mengurus dan mengendalikan pangkalan data. 2.MYSQL menyokong pelbagai enjin penyimpanan melalui penyimpanan data yang cekap dan fungsi pengambilan semula, dan SQL melengkapkan operasi data yang kompleks melalui pernyataan mudah. 3. Contoh penggunaan termasuk pertanyaan asas dan pertanyaan lanjutan, seperti penapisan dan penyortiran mengikut keadaan. 4. Kesilapan umum termasuk kesilapan sintaks dan isu -isu prestasi, yang boleh dioptimumkan dengan memeriksa penyataan SQL dan menggunakan perintah menjelaskan. 5. Teknik pengoptimuman prestasi termasuk menggunakan indeks, mengelakkan pengimbasan jadual penuh, mengoptimumkan operasi menyertai dan meningkatkan kebolehbacaan kod.

Anda boleh membuat sambungan MySQL baru di Navicat dengan mengikuti langkah -langkah: Buka aplikasi dan pilih Sambungan Baru (Ctrl N). Pilih "MySQL" sebagai jenis sambungan. Masukkan nama host/alamat IP, port, nama pengguna, dan kata laluan. (Pilihan) Konfigurasikan pilihan lanjutan. Simpan sambungan dan masukkan nama sambungan.

Anda boleh membuka phpmyadmin melalui langkah -langkah berikut: 1. Log masuk ke panel kawalan laman web; 2. Cari dan klik ikon phpmyadmin; 3. Masukkan kelayakan MySQL; 4. Klik "Login".

PHP tidak mati, tetapi sentiasa menyesuaikan diri dan berkembang. 1) PHP telah menjalani beberapa lelaran versi sejak tahun 1994 untuk menyesuaikan diri dengan trend teknologi baru. 2) Ia kini digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan bidang lain. 3) Php8 memperkenalkan pengkompil JIT dan fungsi lain untuk meningkatkan prestasi dan pemodenan. 4) Gunakan OPCACHE dan ikut piawaian PSR-12 untuk mengoptimumkan prestasi dan kualiti kod.
