資料庫的交易(Transaction)功能,能確保多個 SQL 指令,全部執行成功,或全部不執行,不會因為一些意外狀況,而只執行一部份指令,造成資料異常。 例如~ 當要轉帳時,會有一個交易資料,要從甲帳戶扣錢,把錢加到乙帳戶。如果這個交易從甲帳戶扣錢成功,結果乙帳戶的帳號錯誤,無法成功存入,怎麼辦? 如果有一個機制,可以把「從甲帳戶扣錢,把錢加到乙帳戶」當成一個完整的交易,只有兩個作業都成功,才進行交易(就是Commit),否則就取消交易(就是Rollback),這樣就不會出現錯誤。 要點 (1) MySQL 常用的兩個資料表類型:MyISAM 不支援交易功能,所以以下的整理,均是針對 InnoDB 的DML指令而言,DDL 的指令就不能 ROLLBACK。 怎麼知道我的資料表是MyISAM還是InnoDB? 請參考 https://www.mysql.tw/2017/06/innodb-foreign-key.html 開始進入交易模式,可以使用 START TRANSACTION 或是 BEGIN ,並等待 COMMIT 或是 ROLLBACK 來確定要不要確認交易。 要點 (2) SET AUTOCOMMIT=1; 表示每次的…
學生資料表(學生編號, 身分證字號, 學生姓名, 科系編號, 年級, 班級) Student(sid, idno, sname, did, syear, sclass) create table Student( sid char(5) not null, idno char(10), sname char(20), did char(5), syear int, sclass int, primary key (sid)); insert into Student(sid, idno, sname, did, syear, sclass) values ('s0001', 'A123456789', 'John01', 'd0001', 1, 1); insert into Student(sid, idno, sname, did, syear, sclass) values ('s0002', 'A123456780', 'John02', 'd0001', 1, 1); insert into Student(sid…
Customer (Name,Country,CreditLimit) Product (Product, Type, Price) Shipper (Name,Country) (1) Theta Join SELECT * FROM (SELECT * FROM Customer CROSS JOIN SELECT Product,Type FROM Product) WHERE CreditLimit > Price (2) Equi Join SELECT * FROM (SELECT * FROM Customer CROSS JOIN SELECT Product,Type FROM Product) WHERE CreditLimit =2500 (3) Equi Join SELECT * FROM Customer, Shipper WHERE Customer.Country=Shipper.Country (4) Natural Join (Inner Join) SELECT * FROM Customer Natural JOIN Shipper (5) Left Out…
EasyPHP的httpd.conf會有兩個,一個放在EasyPHP目錄下binaries\conf_files\httpd.conf,另外一個在EasyPHP目錄下binaries\apache\conf\httpd.conf。 原則上,我們是要編輯 EasyPHP目錄下binaries\conf_files\httpd.conf ,另外一個httpd.conf不要管他,他是系統會自動處理更新的檔案。 httpd.conf設定重點 : (1) ServerRoot "${path}/binaries/apache" 這是指http的伺服器啟動的根目錄,這個不需要去修改。 (2) Listen 127.0.0.1:80 這是指啟動的IP與PORT,如果避免衝到PORT,可以修改為 Listen 127.0.0.1:8080 或是其他的PORT。 (3) ServerName 127.0.0.1:80 這個跟上面一樣。 (4) DocumentRoot "${path}/data/localweb" 這是瀏覽器打開 localhost 之後,網頁的根目錄所在。
資料流圖DFD是描述系統中資料流程的一種圖形工具,它標誌了一個系統的邏輯輸入和邏輯輸出,以及把邏輯輸入轉換邏輯輸出所需的加工處理。 資料流圖是從資料的角度來描述一個系統,他只描述WHAT而不描述HOW。所以資料流圖並不會看到詳細的程序流程,只看到程序與資料流的關係。 如果系統的規模較大,為了降低系統的複雜性,一般採取「逐層分解」的方法,繪製分層的DFD。 DFD的表示法 : DFD的範例 : 訂餐系統 Level 0 DFD (通常不包含 data store) Level 1 DFD (拆解Level 0 的程序) DFD 與 ERD 有何關係呢? 可以透過DFD的實體(Entity)與Data Store,知道應該包含那些資料。 在DFD之後,如果要更清楚的描繪整個系統,就可以使用 UML Diagram 。
(1) 把每個[實體]都做成一個[表單],實體的[屬性]就是[欄位] , 並訂下主鍵(PK)。 例如 : Person (person_id, Name, Lastname, Email, Phone) (2) 當存在多值屬性時(如Phone),該多值屬性也變成一個表格。 例如 : Person (person_id, Name, Lastname, Email) 以及 Phone (person_id, phone_id, phone_number) (3) 當出現弱屬性時,該弱屬性可以由其他屬性得知,則該弱屬性不必成為一個欄位。 例如 : age可以由生日計算得知,age則不必成為一個欄位。 (4) 當實體A與實體B為 1:1 時,A表單加上FK連到B表單PK,或是B表單加上FK連到A表單 PK。 A(aid,a1,a2 …, bid) B(bid,b1,b2 …) 或是 A(aid,a1,a2 …) B(bid,b1,b2 …, aid) 以上A表單的bid為FK連接到B表單的bid (PK) 以上B表單的aid為FK連接到A表單的aid (PK) 例如 顧客 ~ 購物車關聯是1:1 (一個購物車對應一個顧客,一個顧客只能有一個購物車…