Oracle下演示Nonrepeatable Read 和Phantom Read
Nonrepeatable Read 不可重复读和Phantom Read幻读概念:
Non-repeatable Read不可重复读:在一个事务中,同样的数据被2次读取,得到不同的结果集
Phantom Read幻读:在一个事务中,,同样的sql被2次执行,得到不同的结果集。不可重复读的重点是修改:同样的条件, 你读取过的数据, 再次读取出来发现值不一样了
幻读的重点在于:新增或者删除同样的条件, 第1次和第2次读出来的记录数不一样
从锁的角度来看, 两者的区别就比较大:
对于前者, 只需要锁住满足条件的记录
对于后者, 要锁住满足条件及其相近的记录
首先需要给用户sys.dbms_lock的执行权限,不然会报错。
SQL> conn / as sysdba
Connected.
SQL> grant execute on sys.dbms_lock to bys;
Grant succeeded.
报的错是:
SQL> show error
Errors for PROCEDURE NO_REPEATABLE:
LINE/COL ERROR
-------- -----------------------------------------------------------------
7/3 PL/SQL: Statement ignored
7/3 PLS-00201: identifier 'DBMS_LOCK' must be declared
实验如下: 1.Non-repeatable Read不可重复读 会话1:
SQL> set serveroutput on
SQL> set time on
11:48:16 SQL>
11:49:24 SQL> create or replace procedure aa(interval int)
2 as
3 x varchar2(10);
4 y varchar2(10);
5 begin
6 select a into x from test where rownum=1;
7 dbms_lock.sleep(interval);
8 select a into y from test where rownum=1;
9 dbms_output.put_line('first--'||x);
10 dbms_output.put_line('second--'||y);
11 end aa;
12 /
Procedure created
11:49:25 SQL> exec aa(20);
first--3
second--999
PL/SQL procedure successfully completed
会话2:
11:48:23 SQL> select * from test
A
----------
3
11:48:31 SQL>
11:49:39 SQL> update test set a=999 where a=3;
1 row updated
11:49:42 SQL> commit;
Commit complete
2.Phantom Read幻读:在一个事务中,同样的sql被2次执行,得到不同的结果集。 会话1:
11:18:31 SQL> select count(*) from test;
COUNT(*)
----------
23798
create or replace procedure phantom(interval int)
as
x varchar2(10);
y varchar2(10);
begin
select count(*) into x from test;
dbms_lock.sleep(interval);
select count(*) into y from test;
dbms_output.put_line('first--'||x);
dbms_output.put_line('second--'||y);
end phantom;
/
Procedure created.
11:21:12 SQL> set serveroutput on;
11:21:55 SQL>
11:22:15 SQL> exec phantom(20); ---执行此存储过程,20是赋值给dbms_lock.sleep(interval); 休眠20秒
first--20799
second--17800
PL/SQL procedure successfully completed.
11:22:38 SQL>
会话2:在会话1执行存储过程时删除一部分数据
11:22:10 SQL> select count(*) from test;
COUNT(*)
----------
20799
11:22:12 SQL> delete test where rownum2999 rows deleted.
11:22:22 SQL> commit;
Commit complete.
11:22:25 SQL> select count(*) from test;
COUNT(*)
----------
17800

MySQLviewshavelimitations:1)Theydon'tsupportallSQLoperations,restrictingdatamanipulationthroughviewswithjoinsorsubqueries.2)Theycanimpactperformance,especiallywithcomplexqueriesorlargedatasets.3)Viewsdon'tstoredata,potentiallyleadingtooutdatedinforma

ProperusermanagementinMySQLiscrucialforenhancingsecurityandensuringefficientdatabaseoperation.1)UseCREATEUSERtoaddusers,specifyingconnectionsourcewith@'localhost'or@'%'.2)GrantspecificprivilegeswithGRANT,usingleastprivilegeprincipletominimizerisks.3)

MySQLdoesn'timposeahardlimitontriggers,butpracticalfactorsdeterminetheireffectiveuse:1)Serverconfigurationimpactstriggermanagement;2)Complextriggersincreasesystemload;3)Largertablesslowtriggerperformance;4)Highconcurrencycancausetriggercontention;5)M

Yes,it'ssafetostoreBLOBdatainMySQL,butconsiderthesefactors:1)StorageSpace:BLOBscanconsumesignificantspace,potentiallyincreasingcostsandslowingperformance.2)Performance:LargerrowsizesduetoBLOBsmayslowdownqueries.3)BackupandRecovery:Theseprocessescanbe

Adding MySQL users through the PHP web interface can use MySQLi extensions. The steps are as follows: 1. Connect to the MySQL database and use the MySQLi extension. 2. Create a user, use the CREATEUSER statement, and use the PASSWORD() function to encrypt the password. 3. Prevent SQL injection and use the mysqli_real_escape_string() function to process user input. 4. Assign permissions to new users and use the GRANT statement.

MySQL'sBLOBissuitableforstoringbinarydatawithinarelationaldatabase,whileNoSQLoptionslikeMongoDB,Redis,andCassandraofferflexible,scalablesolutionsforunstructureddata.BLOBissimplerbutcanslowdownperformancewithlargedata;NoSQLprovidesbetterscalabilityand

ToaddauserinMySQL,use:CREATEUSER'username'@'host'IDENTIFIEDBY'password';Here'showtodoitsecurely:1)Choosethehostcarefullytocontrolaccess.2)SetresourcelimitswithoptionslikeMAX_QUERIES_PER_HOUR.3)Usestrong,uniquepasswords.4)EnforceSSL/TLSconnectionswith

ToavoidcommonmistakeswithstringdatatypesinMySQL,understandstringtypenuances,choosetherighttype,andmanageencodingandcollationsettingseffectively.1)UseCHARforfixed-lengthstrings,VARCHARforvariable-length,andTEXT/BLOBforlargerdata.2)Setcorrectcharacters


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

Zend Studio 13.0.1
Powerful PHP integrated development environment

ZendStudio 13.5.1 Mac
Powerful PHP integrated development environment

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),
