日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【JavaWeb】数据库基础复习

發布時間:2024/7/5 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【JavaWeb】数据库基础复习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 MySQL

數據庫特點:

  • 持久化存儲數據,數據庫就是一個文件系統
  • 便于存儲和管理數據
  • 使用統一的方式操作數據庫

  • 啟動MySQL服務:
    管理員cmd:net start mysql

    停止MySQL服務:
    管理員cmd:net stop mysql

    打開服務窗口
    win+R+services.msc

    登錄mysql:

  • mysql -u root -p
  • mysql -h[ip地址] -u root -p
  • mysql --host=ip --user=root --password=密碼
  • mysql退出登錄:exit / quit


    mysql的目錄結構

  • 安裝目錄:
    • bin【可執行文件】
    • data【日志文件、數據文件】
    • include【頭信息】
    • lib【jar包 庫文件】
    • share【錯誤信息】
    • my.ini:配置文件
  • 數據目錄
    • 數據庫:文件夾
    • 表:文件
    • 數據:文件存儲的內容

    2 SQL

    SQL:Structured Ouery Language:結構化查詢語言

    SQL分類

    • DDL:操作數據庫、表
    • DML:增刪改表中數據
    • DQL:查詢表中數據
    • DCL:授權

    2.1 DDL:CRUD —> 數據庫、表

    操作數據庫:CRUD —> 數據庫

  • create:創建
    • 創建數據庫并設置字符集
    mysql> create database db2 character set gbk; mysql> create database if not exists db2 character set gbk;
  • retrieve:查詢
    • 查詢所有數據庫名稱
    mysql> show databases;
    • 查詢某個數據庫的字符集;查詢數據庫的創建語句
    mysql> show create database mysql; +----------+----------------------------------------------------------------+ | Database | Create Database | +----------+----------------------------------------------------------------+ | mysql | CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET utf8 */ | +----------+----------------------------------------------------------------+
  • update:修改
    • 修改數據庫的字符集
    mysql> alter database db1 character set gbk;
  • delete:刪除
    • 刪除數據庫
    mysql> drop database db3; mysql> drop database if exists db3; drop database if exists db3;
  • 使用數據庫
    • 查詢正在使用的數據庫
    mysql> select database();
    • 使用數據庫
    mysql> use db3;

    操作表:CURD —> 表

  • Create
    • 創建表
      常用數據類型int、double、date(yyyy-MM-dd)、datetime(yyyy-MM-dd HH:mm:ss)、timestamp(插入時間)、varchar(x[個字符])
    mysql> create table student(-> id int,-> name varchar(255),-> age int,-> score double(4,1),-> birthday date,-> insert_time timestamp);
    • 復制表
    create table student_copy like student;
  • Retrieve
    • 查詢所有表名稱
    mysql> show tables; mysql> show tables; +---------------+ | Tables_in_db1 | +---------------+ | student | +---------------+
    • 查詢表結構
    desc student; +-------------+--------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+-------------------+-----------------------------+ | id | int(11) | YES | | NULL | | | name | varchar(255) | YES | | NULL | | | age | int(11) | YES | | NULL | | | score | double(4,1) | YES | | NULL | | | birthday | date | YES | | NULL | | | insert_time | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | +-------------+--------------+------+-----+-------------------+-----------------------------+
  • Update
    • 修改表名
    alter table student_copy rename to student2;
    • 修改表的字符集
    --mysql> show create table student;查看表的數據集 mysql> alter table student2 character set gbk;
    • 添加一列
    mysql> alter table student add gender varchar(2);
    • 修改列名和類型
    --列名和類型同時修改 mysql> alter table student change gender sex int(1); --只修改類型 mysql> alter table student modify sex varchar(1);
    • 刪除列
  • Delete
  • --列名和類型同時修改 mysql> drop table student2;
    • 刪除表
    mysql> drop table student_copy; mysql> drop table if exists student_copy;

    2.2 DML:CUD —> 數據

  • Create
    • 插入語句
    --插入全部字段 可以省略列名 但要給所有值添加值 否則報錯 mysql> insert into student(id,name,age) values(1,"張三",20);
  • Update
    • where條件修改
    mysql> update student set name="王五" where id = 4; mysql> update student set name="王五",age="19" where id = 4; --如果沒有where條件則會修改表中所有數據
  • Delete
    • where條件刪除
    mysql> delete from student where name="李四";
    • 刪除表中所有記錄
    delete from student;--效率低 不推薦使用有多少記錄就會刪除多少次 delete*n truncate table student; --先刪除表 再創建一個一模一樣的空表 drop+create

    2.3 DQL:R —> 數據

    基礎查詢

  • 查詢表中所有記錄/某字段的記錄
  • select * from tablename select name, age from tablename
  • 完整的select語法
  • -select 字段 from 表 where 條件 group by分組 having 分組后的條件 order by排序 limit 分頁限定

  • 查詢并去重
  • mysql> select distinct address from scores;
  • 查詢并計算列之和
  • IFNULL(需要判斷null的字段, null的替換值)
    AS 起別名 【AS可省略】

    --如果null參與運算 運算結果是0 mysql> SELECT NAME, chinese, math, english, chinese+math+english FROM scores; --如果出現null替換為*值 mysql> SELECT NAME, chinese, math, english, IFNULL(chinese,0)+math+english AS sumScore FROM scores;

    條件查詢

  • where子句+條件
  • 運算符:
    • >、<、<=、>=、=、<>
      -select [查詢字段] where [條件字段] [運算符] [比較條件]
    • BETWEEN…AND
      -select [查詢字段] where [條件字段] between [比較條件1] and [比較條件2]
    • IS NULL
      -select [查詢字段] where [條件字段] is null
    • and 或 &&
    • -select [查詢字段] where [條件字段] [比較條件1] and [比較條件2]
    • or 或 ||
    • -select [查詢字段] where [條件字段] [比較條件1] and [比較條件2]
    • not 或 !
    • -select [查詢字段] where [條件字段] is not null
    • LIKE 【模糊查詢】:like的占位符 "_"單個字段 "%"多個字段
    • mysql> select * from scores where name like "%張%"; 包含張
    • mysql> select * from scores where name like "張%" ;第二個字是張
    • mysql> select * from scores where name like "_張" ;第一個字是張

    排序查詢
    order by [排序字段] [排序方法]
    ASC:升序 默認 DESC:降序

    --如果字段1一樣,則比較字段2。` mysql> select * from scores order by math DESC,chinese DESC;

    聚合函數
    count:計算個數
    max:最大值
    min:最小值
    sum:計算和
    avg:計算平均值
    將一列作為整體進行縱向運算,會排除null值

    mysql> select count(name) from scores; --select max/min/sum/avg(name) from scores;

    分組查詢
    分組之后查詢的字段只能是【分組字段】或者【聚合函數】

    mysql> select gender,avg(math),count(id) from scores group by gender; +--------+-----------+-----------+ | gender | avg(math) | count(id) | +--------+-----------+-----------+ || 89.20000 | 6 | || 93.00000 | 3 | +--------+-----------+-----------+ -- where在分組之前加條件進行限定 -- 成績大于 90才參與分組 mysql> select gender,avg(math),count(id) from scores where math > 90 group by gender; +--------+-----------+-----------+ | gender | avg(math) | count(id) | +--------+-----------+-----------+ || 96.50000 | 2 | || 97.00000 | 2 | +--------+-----------+-----------+ --having分組之后進行限定 不滿足則不會被查詢出來 --人數要大于2人 mysql> select gender,avg(english) avg,count(id) count from scores where english > 80 group by gender having count > 3; +--------+--------------+-----------+ | gender | avg(english) | count(id) | +--------+--------------+-----------+ || 90.60000 | 5 | +--------+--------------+-----------+ --where后不可以加聚合函數 having后可以加聚合函數

    分頁查詢
    limit [開始索引] [每頁條數] 只能用在mysql里
    開始索引 =(當前頁碼 - 1)* 每頁顯示條數

    2.4 DCL:管理用戶授權

  • 添加用戶
  • 刪除用戶
  • 修改密碼
  • 查詢用戶
  • -- 1. 切換到mysql數據庫 USE mysql; -- 2. 查詢user表 SELECT * FROM `user`; -- 通配符%表示可以在任意主機使用用戶登錄數據庫 -- 3.創建用戶 CREATE USER "zhangsan"@"localhost" IDENTIFIED BY "password"; CREATE USER "zhangsan"@"%" IDENTIFIED BY "password"; SELECT * FROM `user`; -- 4.刪除用戶 DROP USER "zhangsan"@"localhost"; DROP USER "zhangsan"@"%"; SELECT * FROM `user`; -- 5.修改密碼 UPDATE USER SET PASSWORD = PASSWORD('新密碼') WHERE USER='用戶名'; SET PASSWORD FOR "zhangsan"@"locahost" = PASSWORD("123");

    如果忘記了root用戶密碼
    解決方案:

  • cmd —> net stop mysql
  • 使用無驗證方法啟動mysql:mysqld --skip-grant-tables
  • cmd輸入mysql進入數據庫修改密碼
  • 打開任務管理器 結束mysqld服務
  • cmd —> net start mysql
  • 用戶權限管理

    • 授予權限
    • 查看權限
    • 撤銷權限
    -- CREATE USER "zhangsan"@"%" IDENTIFIED BY "password"; SHOW GRANTS FOR "zhangsan"@"%";GRANT SELECT,UPDATE ON db2.account TO "zhangsan"@"%"; SHOW GRANTS FOR "zhangsan"@"%";-- 所有權限 ALL 和所有表 *.* 使用通配符 GRANT ALL ON *.* TO "zhangsan"@"%"; SHOW GRANTS FOR "zhangsan"@"%";-- 撤銷權限 REVOKE UPDATE ON db2.account FROM "zhangsan"@"%"; REVOKE ALL ON *.* FROM "zhangsan"@"%"; SHOW GRANTS FOR "zhangsan"@"%";

    3 約束

    對表中的數據進行限定,保證數據的正確性、有效性、完整性

    3.1 非空約束

  • 創建表時添加非空約束
  • mysql> create table stu(-> id int,-> name varchar(20) not null); --刪除非空約束alter+modify mysql> alter table stu modify name varchar(20); --創建表后添加非空約束 mysql> alter table stu modify name varchar(20) not null;

    3.2 唯一約束

  • 唯一約束unique
  • 可以有null值 但null值只能在一條里存在

    mysql> create table stu(-> id int,-> phone varchar(20) unique);--刪除唯一約束alter+drop index mysql> alter table stu drop index phone; -- 建表后添加唯一約束 mysql> alter table stu modify phone int(20) unique;

    3.3 主鍵約束

  • 主鍵約束
    非空且唯一
  • mysql> create table stu(-> id int primary key,-> name varchar(20)); --刪除逐漸約束alter+drop alter table stu drop primary key; -- 建表后添加主鍵約束 mysql> alter table stu modify phone int(20) primary key;

    【補充】自動增長
    如果某一列是數值類型,使用auto_increment可以完成值的自動增長

    --創建表時添加主鍵約束并完成主鍵的自動增長 mysql> create table stu(-> id int primary key auto_increment,-> name varchar(20)); --刪除自動增長 mysql> alter table stu modify id int;--主鍵還存在 --建表后添加自動增長 mysql> alter table stu modify id int auto_increment;

    3.4 外鍵約束+級聯操作

  • 外鍵約束+級聯操作
    減少數據冗余,進行表的拆分
    原表:員工表(工號,姓名,年齡,部門,部門地址)
    部門和部門地址會出現冗余
    拆分:
    員工表員工表(工號,姓名,年齡,部門號)
    【級聯操作謹慎使用】
  • mysql> create table emp(-> emp_id int primary key auto_increment,-> name varchar(255) not null,-> age int not null,-> dep_id int,-> constraint emp_dep_fk foreign key (dep_id) references dep(dep_id));--刪除外鍵 alter table emp drop foreign key emp_dep_fk; --添加外鍵 alter table emp add constraint emp_dep_fk foreign key (dep_id) references dep(dep_id);--添加外鍵 級聯更新 alter table emp add constraint emp_dep_fk foreign key (dep_id) references dep(dep_id) on update cascade;--添加外鍵 級聯刪除 alter table emp add constraint emp_dep_fk foreign key (dep_id) references dep(dep_id) on delete cascade;--同時添加 alter table emp add constraint emp_dep_fk foreign key (dep_id) references dep(dep_id) on update cascade on delete cascade;

    部門表(部門號,部門,部門地址)

    mysql> create table dep(-> dep_id int primary key auto_increment,-> name varchar(255) not null,-> address varchar(255));

    存在外鍵約束,刪除外鍵關聯表中的記錄會報錯:

    ERROR 1451 (23000): Cannot delete or update a parent row: a foreign
    key constraint fails (db1.emp, CONSTRAINT emp_dep_fk FOREIGN KEY
    (dep_id) REFERENCES dep (dep_id))

    存在外鍵約束,在主表中插入關聯表中不存在的記錄會報錯

    ERROR 1452 (23000): Cannot add or update a child row: a foreign key
    constraint fails (db1.emp, CONSTRAINT emp_dep_fk FOREIGN KEY
    (dep_id) REFERENCES dep (dep_id))

    4 數據庫的設計

    4.1 多表之間的關系

  • 一對一
    身份證和人:一人只有一個身份證 一個身份證只屬于一個人
  • 一對多
    部門和員工:一個員工只屬于一個部門 一個部門有多個員工
  • 多對多
    一個學生可以選擇很多課程,一個課程可以被很多學生選擇
  • 一對多關系的實現
    在多的一方(員工)建立外鍵,指向一的一方(部門)的主鍵
    多對多關系的實現
    需要建立中間表記錄兩張表的主鍵,這兩個字段作為外鍵指向兩張表
    一對一關系的實現:任意一方添加唯一外鍵,指向另一方的主鍵。或者讓兩表的主鍵相同,一般情況合成一張表。

    4.2 范式

    數據庫設計時遵循的規范

  • 第一范式(1NF):每一列都是不可分割的原子項
  • 第二范式(2NF):在1NF的基礎上,消除非主屬性對主屬性的部分依賴
    • 函數依賴:A—>B:如果通過A屬性(屬性組)的值,可以唯一確定B屬性組中的值。
      【學號 —> 姓名】【學號+課程名稱 —> 分數】
    • 完全函數依賴:A—>B:如果A是一個屬性組,則B屬性值的確定需要依賴于A屬性的所有屬性值。【學號+課程名稱 —> 分數】
    • 部分屬性依賴:A—>B:如果A是一個屬性組,則B屬性值的確定只需要依賴于A屬性的部分屬性值。【學號+課程名稱 —> 姓名】
    • 傳遞函數依賴:A—>B—>C:通過A可以確定B,通過B可以確定C,則稱C傳遞依賴于A。【學號 —> 系名 系名 —> 系主任】
    • 碼:如果表中一個屬性或屬性組,被其他屬性完全依賴則稱這個屬性為該表的碼。
    • 主屬性:碼屬性組中的所有屬性
    • 非主屬性:除了碼屬性組的屬性
  • 第三范式(3NF):在2NF的基礎上,任何非主屬性不依賴于其它主屬性(消除傳遞依賴)
  • 5 數據庫的備份和還原

  • 命令行
    • 備份: mysqldump -u用戶名 -p密碼 數據庫名稱> 保存路徑
    • 還原:
      a.登錄數據庫
      b.創建數據庫
      c.使用數據庫
      d.執行文件 source 文件路徑
  • 圖形化工具
  • 6 多表查詢

    6.1 笛卡爾積

    有兩個集合A和B,取兩個集合的所有組合情況,多表查詢需要消除無用數據

    mysql> select * from emp,dep;

    6.2 內連接查詢

    從哪些表中查詢,條件是什么,查詢哪些字段

    • 隱式內連接:
    mysql> select * from emp,dep where emp.dep_id=dep.dep_id;mysql> select t1.name, t1.gender, t2.name-> from emp t1, dep t2-> where t1.dep_id = t2.dep_id;
    • 顯式內連接:
    --結果同隱式內連接 mysql> select * from emp inner join dep on emp.dep_id=dep.dep_id;

    6.3 外連接查詢

    • 左外連接:左表所有數據 以及 兩張表的交集部分
    • 右外連接:右表所有數據 以及 兩張表的交集部分
    mysql> select * from dep left outer join emp on dep.dep_id=emp.dep_id; +--------+-----------+--------+-----------+--------+--------+---------+------------+ | dep_id | name | emp_id | name | gender | dep_id | salary | join_data | +--------+-----------+--------+-----------+--------+--------+---------+------------+ | 1 | 開發部 | 1 | 孫悟空 || 1 | 7200.00 | 2013-02-24 | | 1 | 開發部 | 2 | 趙六 || 1 | 3600.00 | 2018-01-02 | | 2 | 市場部 | 3 | 唐僧 || 2 | 8999.00 | 2019-01-23 | | 2 | 市場部 | 4 | 張三 || 2 | 8000.00 | 2019-01-22 | | 3 | 財務部 | 5 | 蜘蛛精 || 3 | 9000.00 | 2018-12-12 | | 3 | 財務部 | 6 | 白骨精 || 3 | 8222.00 | 2017-12-10 | +--------+-----------+--------+-----------+--------+--------+---------+------------+ 6 rows in set (0.00 sec)mysql> select * from dep right outer join emp on dep.dep_id=emp.dep_id; +--------+-----------+--------+-----------+--------+--------+----------+------------+ | dep_id | name | emp_id | name | gender | dep_id | salary | join_data | +--------+-----------+--------+-----------+--------+--------+----------+------------+ | 1 | 開發部 | 1 | 孫悟空 || 1 | 7200.00 | 2013-02-24 | | 1 | 開發部 | 2 | 趙六 || 1 | 3600.00 | 2018-01-02 | | 2 | 市場部 | 3 | 唐僧 || 2 | 8999.00 | 2019-01-23 | | 2 | 市場部 | 4 | 張三 || 2 | 8000.00 | 2019-01-22 | | 3 | 財務部 | 5 | 蜘蛛精 || 3 | 9000.00 | 2018-12-12 | | 3 | 財務部 | 6 | 白骨精 || 3 | 8222.00 | 2017-12-10 | | NULL | NULL | 7 | 小白龍 || NULL | 10000.00 | NULL | +--------+-----------+--------+-----------+--------+--------+----------+------------+

    6.4 子查詢

    嵌套的select就是子查詢

    子查詢的不同情況:
    單行單列

    --子查詢作為條件 用運算符去判斷 mysql> select * from emp where emp.salary = (select max(salary) from emp); mysql> select * from emp where emp.salary < (select avg(salary) from emp);

    多行單列

    -- 單列dep_id 但是存在多個 即多行 可以用 【字段 in (子查詢)】 mysql> select * from emp where dep_id in (select dep_id from dep where name="財務部" or name="市場部");

    多行多列

    -- 子查詢的結果是多行多列的情況下 ,子查詢可以作為一張虛擬表進行表的查詢 mysql> select * from dep t1,(select * from emp where emp.join_date>"2018-01-01") t2-> where t1.dep_id = t2.dep_id; --相當于普通的內連接 mysql> select * from dep inner join emp on dep.dep_id=emp.dep_id where join_date>"2018-01-01";

    6.5 綜合練習

    -- 練習1 SELECT emp.id,-- 員工號emp.ename,-- 員工名emp.salary,-- 員工工資job.jname,-- 職務名job.description -- 職務描述 FROM emp,-- 員工表job -- 職務表 WHERE emp.job_id=job.id;-- 練習2 SELECT emp.ename,-- 員工名emp.salary,-- 員工工資job.jname,-- 職務名job.description,-- 職務描述dept.dname,-- 部門名dept.loc -- 部門位置 FROM emp,-- 員工表job,-- 職務表dept -- 部門表 WHERE emp.job_id=job.id AND emp.dept_id=dept.id;-- 練習3 SELECTemp.ename,-- 員工名emp.salary,-- 員工薪資salarygrade.grade-- 員工薪資等級 FROMemp,-- 員工表salarygrade-- 薪資登記表 WHEREemp.salary>=salarygrade.losalary AND emp.salary<=salarygrade.hisalary;-- 練習4 SELECTemp.ename,job.jname,job.description,dept.dname,dept.loc,salarygrade.grade FROMemp,job,dept,salarygrade WHEREemp.dept_id=dept.id ANDemp.job_id=job.id ANDemp.salary BETWEEN salarygrade.losalary AND salarygrade.hisalary;-- 練習5 重點! 分組查詢 + 子查詢多列多行 SELECTt1.id,t1.dname,t1.loc,t2.totalnum FROMdept t1,(SELECTemp.dept_id, COUNT(id) totalnumFROMempGROUP BY dept_id) t2WHERE t1.id=t2.dept_id;-- 練習6 一張表的自關聯 可以用重命名 用兩次 SELECTt1.ename employee,t2.ename manager FROMemp t1, emp t2 WHEREt1.mgr=t2.id-- 練習6的升級版 沒有管理者的也要在表中 -- 左表為員工 右邊用來找管理者 顯示所有員工的管理者 為空則null顯示 SELECTt1.ename employee,t2.ename manager FROMemp t1 LEFT JOIN emp t2 ONt1.mgr=t2.id;

    7 事務

    7.1 事務的基本介紹

    如果一個包含多個步驟的業務操作,被事務管理,那么這些操作要么同時成功,要么同時失敗。

    操作

  • 開啟事務 start transaction
  • 回滾 rollback
  • 提交 commit
  • MySQL數據庫中事務默認自動提交,一條DML提交一次
    Oracle默認手動提交
    開啟事務 則為手動提交

    修改事務的默認提交方式

    SELECT @@autocommit -- 1代表自動提交 -- 0代表手動提交 SET @@autocommit=1;

    7.2 事務的四大特征

    ACID
    原子性:事務不可分割 要么同時成功 要么同時失敗
    持久性:事務一旦提交或回滾 數據庫會持久化的保存數據
    隔離性:多個事務之間相互獨立
    一致性:事務操作前后數據總量不變

    7.3 事務的隔離級別

    多個事務之間是隔離的,相互獨立
    如果多個事務操作同一批數據則會引發一些問題
    設置不同的隔離級別可以解決這些問題

    存在問題

    • 臟讀:一個事務讀到另一個事務中沒有提交的數據
    • 不可重復讀:在同一個事務中,兩次讀取的數據不一樣
    • 幻讀:一個事務操作(DML)數據表中的所有記錄,另一個事務添加了一條數據,則第一個事務查詢不到自己的修改

    隔離級別:級別越高 安全性越高 效率越低

    • read uncommitted:讀未提交:臟讀、不可重復讀、幻讀
    • read committed:讀已提交:不可重復讀、幻讀【Oracle默認的】
    • repeatable read:可重復度:幻讀【MySQL默認的】
    • serializable:串行化:可以解決所有問題

    選擇合適的隔離級別
    設置隔離級別

    select @@tx_isolation; set global transaction isolation level [級別字符串];

    臟讀和不可重復讀的演示
    設置隔離級別為 讀未提交
    set global transaction isolation level read uncommitted;
    開啟事務
    start transaction;
    轉賬:
    update account set balance = balance - 500 where id = 1;
    update account set balance = balance + 500 where id = 2;

    窗口1 執行事務 但未提交

    窗口2 讀到臟數據

    在窗口1 回滾后

    窗口2 顯示 【同時出現了不可重復讀的問題】

    設置隔離級別為 讀已提交
    set global transaction isolation level read committed;
    在commit之后可以才在窗口2讀到更改
    但是對于同一個事務兩次查詢結果不一致 出現不可重復讀的問題


    設置隔離級別為可重復讀
    窗口1 開啟事務
    窗口2 開啟事務
    窗口1 轉賬 不提交
    窗口2 查詢賬務 結果1
    窗口1 提交
    窗口2 查詢賬務 結果2
    窗口2 提交
    窗口2 查詢賬務 結果3

    結果1 和 結果2 一致 在窗口2的一次事務中可重復度
    結果3和結果1和不一致 因為窗口2的事務已提交


    設置隔離級別為串行化
    類似于鎖機制
    只有在窗口1提交之后 窗口2才可以查詢

    總結

    以上是生活随笔為你收集整理的【JavaWeb】数据库基础复习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。