asp多表查询并显示_MySQL多表查询与事务
回顧
1. DQL單表高級(jí)查詢條件 where比較運(yùn)算邏輯運(yùn)算符in關(guān)鍵字between關(guān)鍵字if null關(guān)鍵字like關(guān)鍵字% 多個(gè)任意字符_ 單個(gè)任意字符排序 order byascdesc聚合函數(shù)count(*) 統(tǒng)計(jì)行,包括null值maxminavgsum分組 group by 分組字段 having 分組后條件過(guò)濾分頁(yè) limit 開(kāi)始索引,每頁(yè)顯示個(gè)數(shù)公式:索引=(當(dāng)前頁(yè)-1)× 每頁(yè)的個(gè)數(shù) 2. 數(shù)據(jù)庫(kù)約束主鍵約束create table 表名(id int primary key auto_increment,....);唯一 unique非空 not null默認(rèn)值 default3. 表關(guān)系一對(duì)多主表從表(外鍵字段 指向 主表主鍵)多對(duì)多二個(gè)主表創(chuàng)建第三張作為從表(二個(gè)外鍵字段 分別指向 各自主表的主鍵),由多個(gè)一對(duì)多組成一對(duì)一外鍵是唯一主鍵是外鍵外鍵約束保證多表有關(guān)的數(shù)據(jù)進(jìn)行限定,保證他的正確性,有效性和完整性[constraint] [約束性] foreign key(外鍵字段) references 主表(主鍵)4. 數(shù)據(jù)庫(kù)備份與還原MySQL多表查詢與事務(wù)
今日目標(biāo)
1. DQL多表高級(jí)查詢語(yǔ)法笛卡爾積內(nèi)連接外連接子查詢2. 多表綜合案例(四張表),學(xué)習(xí)多表查詢的規(guī)律3. 事務(wù)安全(TCL)轉(zhuǎn)賬案例引入它,解決場(chǎng)景4. 表的范式(數(shù)據(jù)庫(kù)的設(shè)計(jì)規(guī)則)一 多表查詢【重點(diǎn)】
同時(shí)查詢多張表獲取到需要的數(shù)據(jù)組成完整的信息返回給用戶。
準(zhǔn)備數(shù)據(jù)
-- 多表查詢 create database web03_1; use web03_1; -- 創(chuàng)建部門(mén)表(主表) CREATE TABLE dept (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20) );INSERT INTO dept (NAME) VALUES ('開(kāi)發(fā)部'),('市場(chǎng)部'),('財(cái)務(wù)部'),('銷售部');-- 創(chuàng)建員工表(從表) CREATE TABLE emp (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(10),gender CHAR(1), -- 性別(sex)salary DOUBLE, -- 工資join_date DATE, -- 入職日期dept_id INT -- 外鍵字段 );INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('孫悟空','男',7200,'2013-02-24',1); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('豬八戒','男',3600,'2010-12-02',2); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('唐僧','男',9000,'2008-08-08',2); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('白骨精','女',5000,'2015-10-07',3); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('蜘蛛精','女',4500,'2011-03-14',1); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES('沙僧','男',6666,'2017-03-04',null);1.1 笛卡爾積
* 功能二張表的記錄所有字段進(jìn)行了組合,這種現(xiàn)象稱為笛卡爾積,(又稱為交叉連接) * 語(yǔ)法SELECT ... FROM 左表,右表;1.2 內(nèi)連接
* 功能拿左表的記錄去匹配右表的記錄,若匹配上就顯示,匹配不上就不顯示(二張表的交集) * 語(yǔ)法1.隱式內(nèi)連接【了解】SELECT ... FROM 左表,右表 where 條件過(guò)濾;2.顯示內(nèi)連接【推薦】 select ... from 左表 [inner] join 右表 on 條件過(guò)濾; -- 隱式內(nèi)連接 SELECT * FROM emp e,dept d WHERE e.dept_id = d.id; -- 顯示內(nèi)連接 SELECT * FROM emp e INNER JOIN dept d ON e.dept_id = d.id;# 內(nèi)連接 -- 查詢唐僧的 id,姓名,性別,工資和所在部門(mén)名稱 SELECT e.id,e.name,e.gender,e.salary,d.name FROM emp e INNER JOIN dept d ON e.dept_id = d.id WHERE e.name = '唐僧';1.3 外連接
1. 左外連接【掌握】功能展示左表的全部記錄,去匹配右表的記錄,若匹配上顯示數(shù)據(jù),若沒(méi)匹配上顯示NULL語(yǔ)法select ... from 左表 left [outer] join 右表 on 條件過(guò)濾;2. 右外連接【了解】功能展示右表的全部記錄,去匹配左表的記錄,若匹配上顯示數(shù)據(jù),若沒(méi)匹配上顯示NULL語(yǔ)法select ... from 左表 right [outer] join 右表 on 條件過(guò)濾; # 左外連接 -- 查詢所有員工信息(左邊)及對(duì)應(yīng)的部門(mén)名稱(右邊) SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.dept_id = d.id; -- 查詢所有部門(mén)(左邊)及對(duì)應(yīng)的員工信息(右邊) SELECT * FROM dept d LEFT OUTER JOIN emp e ON e.dept_id = d.id;# 右外連接 -- 查詢所有部門(mén)(右邊)及對(duì)應(yīng)的員工信息(左邊) SELECT * FROM emp e RIGHT OUTER JOIN dept d ON d.id = e.dept_id;1.4 子查詢
* 功能一條select語(yǔ)句執(zhí)行結(jié)果,作為另一條select 語(yǔ)法 的一部分,使用需要添加括號(hào) * 語(yǔ)法1. 單值SELECT MAX(salary) FROM emp;2. 單列多行SELECT NAME FROM emp;3. 多列多行SELECT * FROM emp;* 小結(jié)子查詢結(jié)果為單列,作為條件在where后使用select ... from 表名 where 字段 = or in(子查詢);子查詢結(jié)果為多列,作為虛擬表在form后使用select ... from (子查詢) as 表別名.... # 子查詢# 子查詢結(jié)果為單值 -- 1 查詢工資最高的員工是誰(shuí)? SELECT * FROM emp WHERE salary = (SELECT MAX(salary) FROM emp); -- 2 查詢工資小于平均工資的員工有哪些? -- 2.1 先求出平均工資 SELECT AVG(salary) FROM emp; -- 2.2 再查詢小于平均工資的員工 SELECT * FROM emp WHERE salary < (SELECT AVG(salary) FROM emp);# 子查詢結(jié)果為單列多行 -- 1 查詢工資大于5000的員工,來(lái)自于哪些部門(mén)的名字 -- 1.1 查詢工資大于5000的員工 SELECT dept_id FROM emp WHERE salary > 5000; -- 1.2 來(lái)自于哪些部門(mén)的名字 SELECT * FROM dept WHERE id IN(SELECT dept_id FROM emp WHERE salary > 5000);-- 2 查詢開(kāi)發(fā)部與財(cái)務(wù)部所有的員工信息 -- 2.1 查詢開(kāi)發(fā)部與財(cái)務(wù)部 SELECT id FROM dept WHERE NAME IN('開(kāi)發(fā)部','財(cái)務(wù)部'); -- 2.2 對(duì)應(yīng)的的員工信息 SELECT * FROM emp WHERE dept_id IN(SELECT id FROM dept WHERE NAME IN('開(kāi)發(fā)部','財(cái)務(wù)部'));# 子查詢結(jié)果為多列多行 -- 1 查詢出2011年以后入職的員工信息,包括部門(mén)名稱 -- 1.1 查詢出2011年以后入職的員工信息 SELECT * FROM emp WHERE join_date > '2011-1-1'; -- 1.2 作為虛擬表連接部門(mén)表 SELECT * FROM (SELECT * FROM emp WHERE join_date > '2011-1-1') AS e LEFT JOIN dept d ON e.dept_id = d.id;-- 擴(kuò)展 SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.dept_id = d.id WHERE e.join_date > '2011-1-1';二 多表案例【四張表】
我們?cè)谄髽I(yè)開(kāi)發(fā)時(shí),根據(jù)不同的業(yè)務(wù)需求往往需要通過(guò)2張及以上的表中去查詢需要的數(shù)據(jù)。其實(shí)不管是幾張表的查詢,都是有規(guī)律可循的。
準(zhǔn)備數(shù)據(jù)
-- 多表案例 create database web03_2; use web03_2; -- 部門(mén)表 CREATE TABLE dept (id INT PRIMARY KEY auto_increment, -- 部門(mén)iddname VARCHAR(50), -- 部門(mén)名稱loc VARCHAR(50) -- 部門(mén)位置 );-- 添加4個(gè)部門(mén) INSERT INTO dept(id,dname,loc) VALUES (10,'教研部','北京'), (20,'學(xué)工部','上海'), (30,'銷售部','廣州'), (40,'財(cái)務(wù)部','深圳');-- 職務(wù)表 CREATE TABLE job (id INT PRIMARY KEY,jname VARCHAR(20), -- 職務(wù)名稱description VARCHAR(50) -- 職務(wù)描述 );-- 添加4個(gè)職務(wù) INSERT INTO job (id, jname, description) VALUES (1, '董事長(zhǎng)', '管理整個(gè)公司,接單'), (2, '經(jīng)理', '管理部門(mén)員工'), (3, '銷售員', '向客人推銷產(chǎn)品'), (4, '文員', '使用辦公軟件');-- 員工表 CREATE TABLE emp (id INT PRIMARY KEY, -- 員工idename VARCHAR(50), -- 員工姓名job_id INT, -- 職務(wù)id 外鍵mgr INT , -- 上級(jí)領(lǐng)導(dǎo)joindate DATE, -- 入職日期salary DECIMAL(7,2), -- 工資 99999.99bonus DECIMAL(7,2), -- 獎(jiǎng)金 99999.99dept_id INT, -- 所在部門(mén)編號(hào) 外鍵CONSTRAINT emp_jobid_ref_job_id_fk FOREIGN KEY (job_id) REFERENCES job (id),CONSTRAINT emp_deptid_ref_dept_id_fk FOREIGN KEY (dept_id) REFERENCES dept (id) );-- 添加員工 INSERT INTO emp(id,ename,job_id,mgr,joindate,salary,bonus,dept_id) VALUES (1001,'孫悟空',4,1004,'2000-12-17','8000.00',NULL,20), (1002,'盧俊義',3,1006,'2001-02-20','16000.00','3000.00',30), (1003,'林沖',3,1006,'2001-02-22','12500.00','5000.00',30), (1004,'唐僧',2,1009,'2001-04-02','29750.00',NULL,20), (1005,'李逵',4,1006,'2001-09-28','12500.00','14000.00',30), (1006,'宋江',2,1009,'2001-05-01','28500.00',NULL,30), (1007,'劉備',2,1009,'2001-09-01','24500.00',NULL,10), (1008,'豬八戒',4,1004,'2007-04-19','30000.00',NULL,20), (1009,'羅貫中',1,NULL,'2001-11-17','50000.00',NULL,10), (1010,'吳用',3,1006,'2001-09-08','15000.00','0.00',30), (1011,'沙僧',4,1004,'2007-05-23','11000.00',NULL,20), (1012,'李逵',4,1006,'2001-12-03','9500.00',NULL,30), (1013,'小白龍',4,1004,'2001-12-03','30000.00',NULL,20), (1014,'關(guān)羽',4,1007,'2002-01-23','13000.00',NULL,10);-- 工資等級(jí)表 CREATE TABLE salarygrade (grade INT PRIMARY KEY, -- 等級(jí)losalary INT, -- 最低工資hisalary INT -- 最高工資 );-- 添加5個(gè)工資等級(jí) INSERT INTO salarygrade(grade,losalary,hisalary) VALUES (1,7000,12000), (2,12010,14000), (3,14010,20000), (4,20010,30000), (5,30010,99990);練習(xí)
-- 1 查詢所有員工信息。顯示員工編號(hào),員工姓名,工資,職務(wù)名稱,職務(wù)描述 -- 1.1 確定查詢哪些表?【員工 職務(wù)】 SELECT * FROM emp e INNER JOIN job j ; -- 1.2 確定連接條件?【員工(job_id) 指向 職務(wù)(id)】 SELECT * FROM emp e INNER JOIN job j ON e.job_id = j.id; -- 1.3 確定顯示字段?【員工編號(hào),員工姓名,工資,職務(wù)名稱,職務(wù)描述】 SELECT e.id,e.ename, e.salary,j.jname,j.descriptionFROM emp e INNER JOIN job j ON e.job_id = j.id; -- 2 查詢所有員工信息。顯示員工編號(hào),員工姓名,工資,職務(wù)名稱,職務(wù)描述,部門(mén)名稱,部門(mén)位置 -- 2.1 確定查詢的表?【員工、職務(wù)、部門(mén)】 SELECT * FROM emp e INNER JOIN job j INNER JOIN dept d; -- 2.2 確定連接條件?【員工(job_id) 指向 職務(wù)(id)、員工(dept_id) 指向 部門(mén)(id)】 SELECT * FROM emp e INNER JOIN job j INNER JOIN dept dON e.job_id = j.id AND e.dept_id = d.id; -- 了解SELECT * FROM emp e INNER JOIN job j ON e.job_id = j.idINNER JOIN dept d ON e.dept_id = d.id; -- 推薦 -- 2.3 確定顯示字段?【顯示員工編號(hào),員工姓名,工資,職務(wù)名稱,職務(wù)描述,部門(mén)名稱,部門(mén)位置】 SELECT e.id,e.ename, e.salary,j.jname,j.description,d.dname,d.locFROM emp e INNER JOIN job j ON e.job_id = j.idINNER JOIN dept d ON e.dept_id = d.id; -- 推薦 -- 3 查詢所有員工信息。顯示員工姓名,工資,職務(wù)名稱,職務(wù)描述,部門(mén)名稱,部門(mén)位置,工資等級(jí) -- 3.1 確定查詢表?【員工、職務(wù)、部門(mén)、工資等級(jí)】 SELECT * FROM emp eINNER JOIN job jINNER JOIN dept dINNER JOIN salarygrade sg; -- 3.2 確定連接條件?【員工(job_id) 指向 職務(wù)(id)、員工(dept_id) 指向 部門(mén)(id)、員工(salary) 范圍查找 對(duì)應(yīng)工資等級(jí)】 SELECT * FROM emp eINNER JOIN job j ON e.job_id = j.idINNER JOIN dept d ON e.dept_id = d.idINNER JOIN salarygrade sg ON e.salary BETWEEN sg.losalary AND sg.hisalary; -- 3.3 確定顯示字段?【顯示員工姓名,工資,職務(wù)名稱,職務(wù)描述,部門(mén)名稱,部門(mén)位置,工資等級(jí)】 SELECT e.id,e.ename, e.salary,j.jname,j.description,d.dname,d.loc,sg.gradeFROM emp eINNER JOIN job j ON e.job_id = j.idINNER JOIN dept d ON e.dept_id = d.idINNER JOIN salarygrade sg ON e.salary BETWEEN sg.losalary AND sg.hisalary;小結(jié)
1. 多表查詢會(huì)出現(xiàn)笛卡爾積2. 消除笛卡爾積:2張表1個(gè)條件、3張表2個(gè)條件【條件=n-1】3. 步驟3.1 確定查詢幾張表?3.2 確定連接條件?3.3 確定顯示字段?3.4 確定業(yè)務(wù)條件? -- 4 查詢經(jīng)理的信息。顯示員工姓名,工資,職務(wù)名稱,職務(wù)描述,部門(mén)名稱,部門(mén)位置,工資等級(jí) -- 4.1 確定查詢幾張表 SELECT * FROM emp eINNER JOIN job jINNER JOIN dept dINNER JOIN salarygrade sg; -- 4.2 確定連接條件 SELECT * FROM emp eINNER JOIN job j ON e.job_id = j.idINNER JOIN dept d ON e.dept_id = d.idINNER JOIN salarygrade sg ON e.salary BETWEEN sg.losalary AND sg.hisalary; -- 4.3 確定顯示字段 SELECT e.id,e.ename, e.salary,j.jname,j.description,d.dname,d.loc,sg.gradeFROM emp eINNER JOIN job j ON e.job_id = j.idINNER JOIN dept d ON e.dept_id = d.idINNER JOIN salarygrade sg ON e.salary BETWEEN sg.losalary AND sg.hisalary; -- 4.4 確定業(yè)務(wù)條件【經(jīng)理】 SELECT e.id,e.ename, e.salary,j.jname,j.description,d.dname,d.loc,sg.gradeFROM emp eINNER JOIN job j ON e.job_id = j.idINNER JOIN dept d ON e.dept_id = d.idINNER JOIN salarygrade sg ON e.salary BETWEEN sg.losalary AND sg.hisalaryWHERE j.jname = '經(jīng)理'; -- 5 查詢出部門(mén)編號(hào)、部門(mén)名稱、部門(mén)位置、部門(mén)人數(shù) -- 5.1 先查詢部門(mén)人數(shù) SELECT dept_id,COUNT(*) AS total FROM emp GROUP BY dept_id;-- 5.2 查詢結(jié)果作為虛擬表 連接 部門(mén)表 SELECT * FROM (SELECT dept_id,COUNT(*) AS total FROM emp GROUP BY dept_id) AS e INNER JOIN dept d ON e.dept_id = d.id;-- 內(nèi)連接不關(guān)注書(shū)寫(xiě)的順序,誰(shuí)先誰(shuí)后都可以 SELECT d.id,d.dname,d.loc,e.total FROM dept d INNER JOIN (SELECT dept_id,COUNT(*) AS total FROM emp GROUP BY dept_id) AS e ON d.id = e.dept_id;三 事務(wù)安全 TCL
3.1 概述
如果一個(gè)包含多個(gè)步驟的業(yè)務(wù)操作,被事務(wù)管理,那么這些操作要么同時(shí)成功,要么同時(shí)失敗。
準(zhǔn)備數(shù)據(jù)
-- 創(chuàng)建數(shù)據(jù)表 CREATE TABLE account ( -- 賬戶表id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(32),money DOUBLE );-- 添加數(shù)據(jù) INSERT INTO account (NAME, money) VALUES ('片王', 1000), ('剛剛', 1000);模擬轉(zhuǎn)賬
-- 轉(zhuǎn)賬 -- 片王扣錢(qián) -100 UPDATE account SET money=money-100 WHERE id = 1; -- 機(jī)器故障 -- 剛剛收錢(qián) +100 UPDATE account SET money=money+100 WHERE id = 2;3.2 操作
3.2.1 手動(dòng)提交事務(wù)
1. 開(kāi)啟事務(wù)start transaction;2. 提交事務(wù)commit;3. 回滾事務(wù)rollback;轉(zhuǎn)賬成功
-- 1.開(kāi)啟事務(wù) start transaction; -- 2.片王扣錢(qián) UPDATE account SET money=money-100 WHERE id = 1; -- 3.剛剛加錢(qián) UPDATE account SET money=money+100 WHERE id = 2; -- 4.提交事務(wù) commit;轉(zhuǎn)賬失敗
-- 1.開(kāi)啟事務(wù) start transaction; -- 2.片王扣錢(qián) UPDATE account SET money=money-100 WHERE id = 1; -- 機(jī)器故障 -- 3.回滾事務(wù) rollback;3.2.2 自動(dòng)提交事務(wù)
* MySQL數(shù)據(jù)庫(kù)默認(rèn)情況一條DML語(yǔ)句就是一個(gè)獨(dú)立的事務(wù)。* 查看MySQL是否開(kāi)啟自動(dòng)提交show variables like 'autocommit';* 臨時(shí)關(guān)閉自動(dòng)提交set autocommit=OFF;測(cè)試還會(huì)不會(huì)自動(dòng)提交
-- 片王扣錢(qián) UPDATE account SET money=money-100 WHERE id = 1; -- 手動(dòng)提交事務(wù) commit;3.3 事務(wù)原理【理解】
注意:代碼報(bào)錯(cuò)之后必須進(jìn)行rollback處理,如果沒(méi)有執(zhí)行rollback 會(huì)影響到同一個(gè)事務(wù)中下一次提交數(shù)據(jù)。
3.4 回滾點(diǎn)【了解】
* 功能當(dāng)事務(wù)開(kāi)啟后,一部分sql執(zhí)行成功,添加一個(gè)回滾點(diǎn),后續(xù)操作報(bào)錯(cuò)了,直接到回滾點(diǎn),保證之前的操作可以成功提交* 語(yǔ)法:1.添加保存點(diǎn)savepoint 保存點(diǎn)名稱;2.回滾到保存點(diǎn)rollback to 保存點(diǎn)名稱;模擬,插入四條記錄,在前二條插入成功后,設(shè)置保存點(diǎn),后續(xù)操作報(bào)錯(cuò)了,直接到保存點(diǎn),保證前二條記錄可成功提交。
-- 1.開(kāi)啟事務(wù) start transaction; -- 2.插入 小路 insert into account values(null,'小路',1000); -- 3.插入 PGONE insert into account values(null,'pgone',1000); -- 4.設(shè)置保存點(diǎn) savepoint ok; -- 5.插入 薛之謙 insert into account values(null,'謙謙',1000); -- 機(jī)器故障 -- 6.回滾到保存點(diǎn) rollback to ok; -- 7.提交事務(wù) commit;3.5 事務(wù)特性【ACID】【面試題】
1. 原子性:A atomicity如果一個(gè)包含多個(gè)步驟的業(yè)務(wù)操作,被事務(wù)管理,那么這些操作要么同時(shí)成功,要么同時(shí)失敗。2. 一致性:C consistency數(shù)據(jù)在事務(wù)的執(zhí)行前后,保證它的完整一致3. 隔離性:I isolation多個(gè)事務(wù)之間,相互獨(dú)立互不干擾4. 持久性:D durability事務(wù)一旦成功提交,同步到數(shù)據(jù)庫(kù)磁盤(pán)文件,不可逆。3.6 事務(wù)隔離性
* 功能多個(gè)事務(wù)之間隔離的,相互獨(dú)立的。但是如果多個(gè)事務(wù)操作同一批數(shù)據(jù),則會(huì)引發(fā)一些問(wèn)題,設(shè)置不同的隔離級(jí)別就可以解決這些問(wèn)題。1. 臟讀:一個(gè)事務(wù)中,讀取到另一個(gè)事務(wù)未提交的數(shù)據(jù)2. 不可重復(fù)讀:一個(gè)事務(wù)中,二次讀取的內(nèi)容不一致(update)3. 幻讀:一個(gè)事務(wù)中,二次讀取的數(shù)量不一致(insert、delete)MySQL數(shù)據(jù)庫(kù)隔離級(jí)別
| 級(jí)別 | 名字 | 隔離級(jí)別 | 臟讀 | 不可重復(fù)讀 | 幻讀 | 數(shù)據(jù)庫(kù)默認(rèn)隔離級(jí)別 | | ---- | -------- | ---------------- | ---- | ---------- | ---- | ------------------ | | 1 | 讀未提交 | read uncommitted | 是 | 是 | 是 | | | 2 | 讀已提交 | read committed | 否 | 是 | 是 | Oracle和SQL Server | | 3 | 可重復(fù)讀 | repeatable read | 否 | 否 | 是 | MySQL | | 4 | 串行化 | serializable | 否 | 否 | 否 | |
數(shù)據(jù)庫(kù)性能:1>2>3>4
數(shù)據(jù)庫(kù)安全:4>3>2>1
綜合考量:2、3
演示不同隔離級(jí)別產(chǎn)生的問(wèn)題
開(kāi)啟二個(gè)事務(wù):A窗口 B窗口
1. 查看當(dāng)前數(shù)據(jù)庫(kù)隔離級(jí)別show variables like '%isolation%'; 2. 臨時(shí)修改隔離級(jí)別set session transaction isolation level 級(jí)別字符串;update account set money=900 where id = 1; 3. 演示3.1 臟讀 設(shè)置隔離級(jí)別為 read uncommitted;set session transaction isolation level read uncommitted;3.2 解決臟讀 設(shè)置隔離級(jí)別為 read committed;set session transaction isolation level read committed;3.3 解決不可重復(fù)讀 設(shè)置隔離級(jí)別為 repeatable read;set session transaction isolation level repeatable read;4.3 串行化 設(shè)置隔離級(jí)別 serializable;set session transaction isolation level serializable;四 三范式【了解】
4.1 概述
* 范式(Normal Form)設(shè)計(jì)數(shù)據(jù)庫(kù)表的規(guī)則,好的數(shù)據(jù)庫(kù)設(shè)計(jì)對(duì)數(shù)據(jù)的存儲(chǔ)性能和后期的程序開(kāi)發(fā),都會(huì)產(chǎn)生重要的影響。建立科學(xué)的,規(guī)范的數(shù)據(jù)庫(kù)就需要滿足一些規(guī)則來(lái)優(yōu)化數(shù)據(jù)的設(shè)計(jì)和存儲(chǔ) 。* 分類目前關(guān)系數(shù)據(jù)庫(kù)有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF,又稱完美范式)。滿足最低要求的范式是第一范式(1NF)。在第一范式的基礎(chǔ)上進(jìn)一步滿足更多規(guī)范要求的稱為第二范式(2NF),其余范式以次類推。一般說(shuō)來(lái),數(shù)據(jù)庫(kù)只需滿足第三范式(3NF)就行了。4.2 三范式
看圖
1. 第一范式(1NF)要求:每一列不能再拆分 2. 第二范式(2NF)要求:1.一張表只描述一件事情2.表中的每一個(gè)普通列都依賴于主鍵 3. 第三范式(3NF)要求:從表的外鍵必須使用主表的主鍵總結(jié)
以上是生活随笔為你收集整理的asp多表查询并显示_MySQL多表查询与事务的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: excel中空格去不掉java_在Apa
- 下一篇: mysql数据结构_mysql的底层数据