Java學習總結(十七)——MySQL數據庫(3)存儲過程,觸發器,數據庫權限,數據庫設計三大範式
1.概念:帶有邏輯的sql語句,之前的sql語句中沒有條件判斷,沒有循環,存儲過程中帶上流程控制語句。
2.特點:
(1)執行效率非常快,存儲過程是在 數據庫的服務端執行的;
(2)移植性很差,不同的數據庫存儲過程不能一直;
3.存儲過程的語法:
例(我們以employee表為例):
(1)不帶參數的存儲過程:
創建存儲過程:
存儲過程創建成功,調用執行:
顯示結果:
(2)帶參數的存儲過程:
#1.創建帶輸入存儲過程(利用員工編號查詢員工信息):
存儲過程創建成功,調用執行:
顯示結果:
#2.創建帶輸出參數的儲存過程(輸出hello word):
存儲過程創建成功
刪除存儲過程:
前:後:
#3.帶輸出參數的存儲過程調用
1)全局變量(內置變量):mysql數據庫內置的變量 (所有連接都起作用)
2)會話變量: 只存在於當前客戶端與數據庫服務器端的一次連接當中。如果連接斷開,那麽會話變量全部丟失!
3)局部變量: 在存儲過程中使用的變量就叫局部變量。只要存儲過程執行完畢,局部變量就丟失!!
首先建立存儲過程:
建立成功,現在調用,定義一個會話變量a:
調用成功,訪問變量a:
顯示結果:
#4.帶有輸入輸出參數的存儲過程:
創建存儲過程:
創建成功,開始調用:
*輸入參數
顯示結果:
輸出參數:
顯示結果:
(3)帶有條件判斷的存儲過程
根據需求完成存儲過程建立(輸入一個整數,如果1,則返回“星期一”,如果2,返回“星期二”,如果3,返回“星期三”。其他數字,返回“錯誤輸入”):
調用存儲過程:
顯示結果:
(4)帶循環功能的存儲過程:
註意:循環控制 leave 相當於break,iterate相當於contiune;
根據需求建立存儲過程(輸入一個整數,求和。例如,輸入100,統計1-100的和):
存儲過程創建完成,開始調用:
顯示結果:
(5)帶循環控制功能的存儲過程
存儲過程建立成功,開始調用:
顯示結果:
二.觸發器
1.觸發器的作用:當操作了某張表時,希望同時觸發一些動作/行為,可以使用觸發器完成;
2.語法:
例1:( 當向員工表插入一條記錄時,希望同時往日誌表插入數據)
建立日誌表:
創建觸發器:
向表中插入新的數據:
查看日誌表:
顯示結果:
例2.(修改表時觸發日誌表)
創建修改觸發器:
修改表中數據:
查看日誌表:
例3.(表數據時觸動日誌表)
建立刪除觸發器:
刪除表中一條數據:
查詢日誌表數據:
三.MySQL的權限
1.mysql數據庫權限問題:root :擁有所有權限(可以幹任何事情)
(1)權限賬戶,只擁有部分權限(CURD)例如,只能操作某個數據庫的某張表
(2)如何修改mysql的用戶密碼?
2.mysql數據庫,用戶配置 : user表
3.分配權限賬戶
(1)權限: select insert delete update drop create/ 或,all
(2)@ 後面可以是localhost 也可以是ip 也可以給% 那%代表任意一臺計算機都可以連接上來
(3)語法:
4.數據庫備份和還原 註意備份還原不需要登陸數據庫
四.數據的設計
1.遵循三大範式:
(1)第一大範式:要求表的每個字段必須是不可分割的獨立單元
(2)第二大範式:在第一範式的基礎上,要求每張表只表達一個意思。表的每個字段都和表的主鍵有依賴。
(3)第三大範式: 在第二範式基礎,要求每張表的主鍵之外的其他字段都只能和主鍵有直接決定依賴關系。
例:
工程號 工程名稱 職工號 姓名 職務 薪水 工時
A1 花園大廈 1001 楊國明 工程師 65 13
A1 花園大廈 1002 班建斌 技術員 60 16
A1 花園大廈 1004 伍嶽林 律師 100 19
A2 立交橋 1001 楊國明 工程師 65 13
A2 立交橋 1003 鞠明亮 工人 55 17
A3 臨江飯店 1002 班建斌 技術員 60 18
A3 臨江飯店 1004 伍嶽林 律師 100 14
假設某建築公司要設計一個數據庫。公司的業務規則概括說明如下:
?公司承擔多個工程項目,每一項工程有:工程號、工程名稱、施工人員等
?公司有多名職工,每一名職工有:職工號、姓名、性別、職務(工程師、技術員)等
?公司按照工時和小時工資率支付工資,小時工資率由職工的職務決定(例如,技術員的小時工資率與工程師不同)
正確解析:
【本次總結完畢】
Java學習總結(十七)——MySQL數據庫(3)存儲過程,觸發器,數據庫權限,數據庫設計三大範式