ਲੇਖ ਡਾਇਰੈਕਟਰੀ
MySQL ਡਾਟਾਬੇਸਟ੍ਰਾਂਜੈਕਸ਼ਨ ਰੋਲਬੈਕ ਆਈਸੋਲੇਸ਼ਨ/ਓਪਨ ਸੰਕਲਪ/ਲੈਵਲ ਪ੍ਰੋਸੈਸਿੰਗ php ਸਟੇਟਮੈਂਟ
MySQL ਮਾਮਲੇ
MySQL ਟ੍ਰਾਂਜੈਕਸ਼ਨਾਂ ਦੀ ਵਰਤੋਂ ਮੁੱਖ ਤੌਰ 'ਤੇ ਵੱਡੀ ਮਾਤਰਾ ਵਿੱਚ ਓਪਰੇਸ਼ਨਾਂ ਅਤੇ ਉੱਚ ਗੁੰਝਲਤਾ ਵਾਲੇ ਡੇਟਾ ਦੀ ਪ੍ਰਕਿਰਿਆ ਕਰਨ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।ਉਦਾਹਰਨ ਲਈ, ਪਰਸੋਨਲ ਮੈਨੇਜਮੈਂਟ ਸਿਸਟਮ ਵਿੱਚ, ਜੇਕਰ ਤੁਸੀਂ ਕਿਸੇ ਵਿਅਕਤੀ ਨੂੰ ਮਿਟਾਉਂਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਨੂੰ ਉਸ ਵਿਅਕਤੀ ਦੀ ਮੁੱਢਲੀ ਜਾਣਕਾਰੀ ਅਤੇ ਉਸ ਵਿਅਕਤੀ ਨਾਲ ਸਬੰਧਤ ਜਾਣਕਾਰੀ, ਜਿਵੇਂ ਕਿ ਮੇਲਬਾਕਸ, ਲੇਖ, ਆਦਿ ਦੋਵਾਂ ਨੂੰ ਮਿਟਾਉਣ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਇਸ ਤਰ੍ਹਾਂ, ਇਹ ਡੇਟਾਬੇਸ ਓਪਰੇਸ਼ਨ ਸਟੇਟਮੈਂਟ ਇੱਕ ਲੈਣ-ਦੇਣ ਦਾ ਗਠਨ!
- ਲੈਣ-ਦੇਣ MySQL ਵਿੱਚ ਸਿਰਫ਼ ਉਹਨਾਂ ਡੇਟਾਬੇਸ ਜਾਂ ਟੇਬਲਾਂ ਲਈ ਸਮਰਥਿਤ ਹਨ ਜੋ Innodb ਡੇਟਾਬੇਸ ਇੰਜਣ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਨ।
- ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਪ੍ਰੋਸੈਸਿੰਗ ਦੀ ਵਰਤੋਂ ਡੇਟਾਬੇਸ ਦੀ ਇਕਸਾਰਤਾ ਨੂੰ ਬਰਕਰਾਰ ਰੱਖਣ ਲਈ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਕਿ SQL ਸਟੇਟਮੈਂਟਾਂ ਦੇ ਬੈਚ ਜਾਂ ਤਾਂ ਸਾਰੇ ਐਗਜ਼ੀਕਿਊਟ ਕੀਤੇ ਗਏ ਹਨ ਜਾਂ ਉਹਨਾਂ ਵਿੱਚੋਂ ਕੋਈ ਵੀ ਐਗਜ਼ੀਕਿਊਟ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ।
- ਲੈਣ-ਦੇਣ ਦੀ ਵਰਤੋਂ ਸਟੇਟਮੈਂਟਾਂ ਨੂੰ ਸੰਮਿਲਿਤ ਕਰਨ, ਅਪਡੇਟ ਕਰਨ, ਮਿਟਾਉਣ ਦੇ ਪ੍ਰਬੰਧਨ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ
ਆਮ ਤੌਰ 'ਤੇ, ਲੈਣ-ਦੇਣ ਨੂੰ 4 ਸ਼ਰਤਾਂ (ACID) ਨੂੰ ਪੂਰਾ ਕਰਨਾ ਚਾਹੀਦਾ ਹੈ: ਪਰਮਾਣੂ (ਪਰਮਾਣੂ), ਇਕਸਾਰਤਾ (ਸਥਿਰਤਾ), ਆਈਸੋਲੇਸ਼ਨ (ਅਲੱਗ-ਥਲੱਗ), ਟਿਕਾਊਤਾ (ਭਰੋਸੇਯੋਗਤਾ)
- 1,ਲੈਣ-ਦੇਣ ਦੀ ਪਰਮਾਣੂਤਾ:ਲੈਣ-ਦੇਣ ਦਾ ਇੱਕ ਸਮੂਹ ਜੋ ਜਾਂ ਤਾਂ ਸਫਲ ਹੁੰਦਾ ਹੈ ਜਾਂ ਵਾਪਸ ਲੈਂਦਾ ਹੈ।
- 2,ਸਥਿਰਤਾ:ਇੱਥੇ ਗੈਰ-ਕਾਨੂੰਨੀ ਡੇਟਾ ਹੈ (ਵਿਦੇਸ਼ੀ ਮੁੱਖ ਰੁਕਾਵਟਾਂ ਅਤੇ ਹੋਰ), ਅਤੇ ਲੈਣ-ਦੇਣ ਨੂੰ ਵਾਪਸ ਲੈ ਲਿਆ ਜਾਂਦਾ ਹੈ।
- 3,ਇਕਾਂਤਵਾਸ:ਲੈਣ-ਦੇਣ ਸੁਤੰਤਰ ਤੌਰ 'ਤੇ ਚੱਲਦਾ ਹੈ।ਜੇਕਰ ਕਿਸੇ ਲੈਣ-ਦੇਣ ਦਾ ਨਤੀਜਾ ਹੋਰ ਲੈਣ-ਦੇਣ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰਦਾ ਹੈ, ਤਾਂ ਹੋਰ ਲੈਣ-ਦੇਣ ਵਾਪਸ ਲੈ ਲਏ ਜਾਣਗੇ।ਗਤੀ ਦੀ ਕੀਮਤ 'ਤੇ ਲੈਣ-ਦੇਣ ਦਾ 100% ਅਲੱਗ-ਥਲੱਗ।
- 4,ਭਰੋਸੇਯੋਗਤਾ:ਸੌਫਟਵੇਅਰ ਅਤੇ ਹਾਰਡਵੇਅਰ ਕਰੈਸ਼ ਹੋਣ ਤੋਂ ਬਾਅਦ, InnoDB ਡੇਟਾ ਟੇਬਲ ਡਰਾਈਵਰ ਲੌਗ ਫਾਈਲ ਦੀ ਵਰਤੋਂ ਇਸ ਨੂੰ ਪੁਨਰਗਠਨ ਅਤੇ ਸੋਧਣ ਲਈ ਕਰੇਗਾ।ਭਰੋਸੇਯੋਗਤਾ ਅਤੇ ਉੱਚ ਗਤੀ ਦੋਵੇਂ ਨਹੀਂ ਹੋ ਸਕਦੇ ਹਨ, innodb_flush_log_at_trx_commit ਵਿਕਲਪ ਇਹ ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ ਕਿ ਲੌਗ ਵਿੱਚ ਲੈਣ-ਦੇਣ ਨੂੰ ਕਦੋਂ ਸੁਰੱਖਿਅਤ ਕਰਨਾ ਹੈ।
MySQL ਕਮਾਂਡ ਲਾਈਨ ਦੀਆਂ ਡਿਫੌਲਟ ਸੈਟਿੰਗਾਂ ਦੇ ਤਹਿਤ, ਲੈਣ-ਦੇਣ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਵਚਨਬੱਧ ਹੁੰਦੇ ਹਨ, ਯਾਨੀ, COMMIT ਓਪਰੇਸ਼ਨ SQL ਸਟੇਟਮੈਂਟ ਦੇ ਐਗਜ਼ੀਕਿਊਟ ਹੋਣ ਤੋਂ ਤੁਰੰਤ ਬਾਅਦ ਕੀਤਾ ਜਾਵੇਗਾ।ਇਸਲਈ, ਸਪੱਸ਼ਟ ਤੌਰ 'ਤੇ ਇੱਕ ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਨੂੰ ਖੋਲ੍ਹਣ ਲਈ BEGIN ਜਾਂ START TRANSACTION ਕਮਾਂਡ ਦੀ ਵਰਤੋਂ ਕਰਨੀ ਚਾਹੀਦੀ ਹੈ, ਜਾਂ ਮੌਜੂਦਾ ਸੈਸ਼ਨ ਲਈ ਆਟੋਮੈਟਿਕ ਕਮਿਟ ਦੀ ਵਰਤੋਂ ਨੂੰ ਅਯੋਗ ਕਰਨ ਲਈ, SET AUTOCOMMIT=0 ਕਮਾਂਡ ਚਲਾਉਣੀ ਚਾਹੀਦੀ ਹੈ।
ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਕੰਟਰੋਲ ਸਟੇਟਮੈਂਟ:
- ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਸ਼ੁਰੂ ਕਰੋ ਜਾਂ ਸ਼ੁਰੂ ਕਰੋ; ਸਪੱਸ਼ਟ ਤੌਰ 'ਤੇ ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਸ਼ੁਰੂ ਕਰੋ;
- Commit; Commit WORK ਵੀ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ, ਪਰ ਦੋਵੇਂ ਬਰਾਬਰ ਹਨ। COMMIT ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਕਰਦਾ ਹੈ ਅਤੇ ਡੇਟਾਬੇਸ ਵਿੱਚ ਕੀਤੀਆਂ ਸਾਰੀਆਂ ਸੋਧਾਂ ਨੂੰ ਸਥਾਈ ਬਣਾਉਂਦਾ ਹੈ;
- ਰੋਲਬੈਕ; ਰੋਲਬੈਕ ਵਰਕ ਦੀ ਵਰਤੋਂ ਕਰਨਾ ਸੰਭਵ ਹੈ, ਪਰ ਦੋਵੇਂ ਬਰਾਬਰ ਹਨ।ਰੋਲਬੈਕ ਉਪਭੋਗਤਾ ਦੇ ਲੈਣ-ਦੇਣ ਨੂੰ ਖਤਮ ਕਰਦਾ ਹੈ ਅਤੇ ਪ੍ਰਗਤੀ ਵਿੱਚ ਕਿਸੇ ਵੀ ਗੈਰ-ਪ੍ਰਤੀਬੱਧ ਸੋਧਾਂ ਨੂੰ ਰੱਦ ਕਰਦਾ ਹੈ;
- SAVEPOINT ਪਛਾਣਕਰਤਾ; SAVEPOINT ਇੱਕ ਲੈਣ-ਦੇਣ ਵਿੱਚ ਇੱਕ ਸੇਵਪੁਆਇੰਟ ਬਣਾਉਣ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦਾ ਹੈ, ਅਤੇ ਇੱਕ ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਵਿੱਚ ਇੱਕ ਤੋਂ ਵੱਧ SAVEPOINT ਹੋ ਸਕਦੇ ਹਨ;
- ਰੀਲੀਜ਼ ਸੇਵਪੁਆਇੰਟ ਆਈਡੈਂਟੀਫਾਇਰ; ਕਿਸੇ ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਦੇ ਸੇਵਪੁਆਇੰਟ ਨੂੰ ਮਿਟਾਓ, ਜਦੋਂ ਕੋਈ ਨਿਸ਼ਚਿਤ ਸੇਵਪੁਆਇੰਟ ਨਹੀਂ ਹੈ, ਸਟੇਟਮੈਂਟ ਨੂੰ ਚਲਾਉਣਾ ਇੱਕ ਅਪਵਾਦ ਦੇਵੇਗਾ;
- ਪਛਾਣਕਰਤਾ 'ਤੇ ਰੋਲਬੈਕ; ਬਿੰਦੂ 'ਤੇ ਲੈਣ-ਦੇਣ ਨੂੰ ਰੋਲਬੈਕ ਕਰੋ;
- SET TRANSACTION; ਲੈਣ-ਦੇਣ ਦੇ ਅਲੱਗ-ਥਲੱਗ ਪੱਧਰ ਨੂੰ ਸੈੱਟ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। InnoDB ਸਟੋਰੇਜ ਇੰਜਣ READ UNCOMMITTED, READ COMMITTED, REPEATable READ, ਅਤੇ SERIALIZABLE ਦੇ ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਆਈਸੋਲੇਸ਼ਨ ਪੱਧਰ ਪ੍ਰਦਾਨ ਕਰਦਾ ਹੈ।
MYSQL ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਪ੍ਰੋਸੈਸਿੰਗ ਦੇ ਦੋ ਮੁੱਖ ਤਰੀਕੇ ਹਨ:
1. ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ BEGIN, ROLLBACK, COMMIT ਦੀ ਵਰਤੋਂ ਕਰੋ
- BEGIN ਇੱਕ ਲੈਣ-ਦੇਣ ਸ਼ੁਰੂ ਕਰੋ
- ਰੋਲਬੈਕ ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਰੋਲਬੈਕ
- ਕਮਿੱਟ ਲੈਣ-ਦੇਣ ਦੀ ਪੁਸ਼ਟੀ
2. MySQL ਦੇ ਆਟੋ-ਕਮਿਟ ਮੋਡ ਨੂੰ ਬਦਲਣ ਲਈ ਸਿੱਧਾ SET ਦੀ ਵਰਤੋਂ ਕਰੋ:
- ਆਟੋਕਮਿੱਟ = 0 ਸੈੱਟ ਕਰੋ ਆਟੋ-ਕਮਿਟ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ
- ਆਟੋਕਮਿੱਟ = 1 ਸੈੱਟ ਕਰੋ ਆਟੋ-ਕਮਿਟ ਚਾਲੂ ਕਰੋ
ਲੈਣ-ਦੇਣ ਟੈਸਟ
mysql> use chenweiliang; Database changed mysql> CREATE TABLE chenweiliang_transaction_test( id int(5)) engine=innodb; # 创建数据表 Query OK, 0 rows affected (0.04 sec) mysql> select * from chenweiliang_transaction_test; Empty set (0.01 sec) mysql> begin; # 开始事务 Query OK, 0 rows affected (0.00 sec) mysql> insert into chenweiliang_transaction_test value(5); Query OK, 1 rows affected (0.01 sec) mysql> insert into chenweiliang_transaction_test value(6); Query OK, 1 rows affected (0.00 sec) mysql> commit; # 提交事务 Query OK, 0 rows affected (0.01 sec) mysql> select * from chenweiliang_transaction_test; +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.01 sec) mysql> begin; # 开始事务 Query OK, 0 rows affected (0.00 sec) mysql> insert into chenweiliang_transaction_test values(7); Query OK, 1 rows affected (0.00 sec) mysql> rollback; # 回滚 Query OK, 0 rows affected (0.00 sec) mysql> select * from chenweiliang_transaction_test; # 因为回滚所以数据没有插入 +------+ | id | +------+ | 5 | | 6 | +------+ 2 rows in set (0.01 sec) mysql>
PHP ਵਿੱਚ ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਉਦਾਹਰਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨਾ
ਟੈਸਟ ਦੁਆਰਾ MySQL ਕ੍ਰਮ:
<? php $dbhost = 'localhost:3306'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = '123456'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('连接失败: ' . mysqli_error($conn)); } // 设置编码,防止中文乱码 mysqli_query($conn, "set names utf8"); mysqli_select_db( $conn, 'chenweiliang' ); mysqli_query($conn, "SET AUTOCOMMIT=0"); // 设置为不自动提交,因为MYSQL默认立即执行 mysqli_begin_transaction($conn); // 开始事务定义 if(!mysqli_query($conn, "insert into chenweiliang_transaction_test (id) values(8)")) { mysqli_query($conn, "ROLLBACK"); // 判断当执行失败时回滚 } if(!mysqli_query($conn, "insert into chenweiliang_transaction_test (id) values(9)")) { mysqli_query($conn, "ROLLBACK"); // 判断执行失败时回滚 } mysqli_commit($conn); //执行事务 mysqli_close($conn); ?>
ਹੋਪ ਚੇਨ ਵੇਇਲਿਯਾਂਗ ਬਲੌਗ ( https://www.chenweiliang.com/ ) ਨੇ "MySQL ਡੇਟਾਬੇਸ ਟ੍ਰਾਂਜੈਕਸ਼ਨ ਰੋਲਬੈਕ ਆਈਸੋਲੇਸ਼ਨ/ਓਪਨ ਸੰਕਲਪ/PHP ਸਟੇਟਮੈਂਟਾਂ ਦਾ ਪੱਧਰ ਪ੍ਰੋਸੈਸਿੰਗ" ਸਾਂਝਾ ਕੀਤਾ, ਜੋ ਤੁਹਾਡੇ ਲਈ ਮਦਦਗਾਰ ਹੈ।
ਇਸ ਲੇਖ ਦਾ ਲਿੰਕ ਸਾਂਝਾ ਕਰਨ ਲਈ ਸੁਆਗਤ ਹੈ:https://www.chenweiliang.com/cwl-494.html
ਨਵੀਨਤਮ ਅਪਡੇਟਸ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਚੇਨ ਵੇਇਲਿਯਾਂਗ ਦੇ ਬਲੌਗ ਦੇ ਟੈਲੀਗ੍ਰਾਮ ਚੈਨਲ ਵਿੱਚ ਸੁਆਗਤ ਹੈ!
📚 ਇਸ ਗਾਈਡ ਵਿੱਚ ਬਹੁਤ ਵੱਡਾ ਮੁੱਲ ਹੈ, 🌟ਇਹ ਇੱਕ ਦੁਰਲੱਭ ਮੌਕਾ ਹੈ, ਇਸ ਨੂੰ ਨਾ ਗੁਆਓ! ⏰⌛💨
ਜੇ ਚੰਗਾ ਲੱਗੇ ਤਾਂ ਸ਼ੇਅਰ ਅਤੇ ਲਾਈਕ ਕਰੋ!
ਤੁਹਾਡੀ ਸ਼ੇਅਰਿੰਗ ਅਤੇ ਪਸੰਦ ਸਾਡੀ ਨਿਰੰਤਰ ਪ੍ਰੇਰਣਾ ਹਨ!