MySQL.png
數(shù)據(jù)庫設(shè)計
需求分析
- 需求設(shè)計
- 概要設(shè)計
- 抽取實體:業(yè)務模型->實體模型(類)
- 數(shù)據(jù)庫設(shè)計:業(yè)務模型/實體模型->數(shù)據(jù)模型()硬盤
詳細設(shè)計
類詳細,屬性,方法
三大范式
- 設(shè)計原則:設(shè)計的表盡量遵守三大范式
- 第一范式:表中每個字段必須是不可分割的獨立單元
- 第二范式:在第一范式的基礎(chǔ)上,非主屬性完全函數(shù)依賴于任何一個候選碼
- 第三范式:在第二范式的基礎(chǔ)上,非主屬性既不傳遞依賴于碼,也不函數(shù)依賴于碼
MySQL存儲過程
執(zhí)行效率快,在服務端執(zhí)行
移植性差
創(chuàng)建存儲過程
DELIMITER $ 聲明結(jié)束符
CREATE PROCEDURE proname()
BEGIN
SELECT * FROM table_name;
...
END $
執(zhí)行存儲過程
CALL proname();
參數(shù)
IN 輸入?yún)?shù),可以攜帶數(shù)據(jù)到存儲過程中
OUT 輸出參數(shù),可以從存儲過程中返回結(jié)果
INOUT 輸入輸出參數(shù),既有輸入功能,也有輸出功能
帶有存儲輸入?yún)?shù)的存儲過程
DELIMITER $
CREATE PROCEDURE proin(IN col type)
BEGIN
SELECT * FROM table_name WHERE column=col;
END $
CALL proin(col);
帶有輸出參數(shù)的存儲過程
DELIMITER $
CREATE PROCEDURE proout(OUT col type)
BEGIN
SET col = 'Hello MySQL!';
END $
刪除存儲過程
DROP PROCEDURE proout;
MySQL變量
- 全局變量(內(nèi)置變量)
SHOW varibales; 查看所有全局變量
select @@變量名;查看某個全局變量
set 變量名=新值; 修改全局變量
character_set_client:mysql服務器的接收數(shù)據(jù)的編碼
character_set_results:mysql服務器輸出數(shù)據(jù)的編碼
會話變量:只存在于當前客戶端與數(shù)據(jù)庫服務端的依次連接中,如果連接斷開,那么會話變量全部丟失
SET @var='value';局部變量:在存儲過程中使用的變量
1)定義一個會話變量name
2)使用name會話變量接受存儲過程的返回值
CALL proout(@name);
SELECT @name;
帶有輸入輸出參數(shù)的存儲過程
DELIMITER $
CREATE PROCEDURE proinout(INOUT var type)
BEGIN
SELECT var;
SET var = value;
END $
SET @var=value;
CALL proinout(@var)
帶有條件判斷的存儲過程
輸入整數(shù),返回對應星期天
DELIMITER $
CREATE PROCEDURE proif(IN num INT, OUT str VARCHAR(20))
BEGIN
IF num=1 THEN
SET str='星期一';
IF num=2 THEN
SET str='星期二';
IF num=3 THEN
SET str='星期三';
ELSE
SET str='輸入錯誤';
END IF;
END $
CALL proif(1,@str);
SELECT @str;
帶有循環(huán)功能的存儲過程
輸入數(shù)值,求從一到該數(shù)值的累加和
DELIMITER $
CREATE PROCEDURE prowhile(IN num INT, OUT result INT)
BEGIN
定義一個局部變量
DECLARE i INT DEFAULT 1;
DECLARE vsum INT DEFAULT 0;
WHILE i<=num DO
SET vsum=vsum+i;
SET i=i+1;
END WHILE;
SET result=vsum;
END $
CALL prowhile(122, @result)
SELECT @result;
MySQL觸發(fā)器
當操作某張表時,同時觸發(fā)一些動作
插入數(shù)據(jù)后,同時向日志表中插入
- 創(chuàng)建觸發(fā)器(插入)
CREATE TRIGGER triname AFTER INSERT ON table_name FOR EACH ROW
INSERT INTO log_table_name(clomn,...) VALUES('INSERT');
- 創(chuàng)建觸發(fā)器(修改)
CREATE TRIGGER triname AFTER UPDATE ON table_name FOR EACH ROW
INSERT INTO log_table_name(clomn,...) VALUES('update');
- 創(chuàng)建觸發(fā)器(刪除)
CREATE TRIGGER triname AFTER DELETEON table_name FOR EACH ROW
INSERT INTO log_table_name(clomn,...) VALUES('delete');
MySQL權(quán)限
- 修改密碼
UPDATE USER SET PASSWORD=PASSWORD('new_passwd') WHERE USERN='USErname';
- 分配權(quán)限
GRANT SELECT ON DATABASE.table TO 'USEr'@'accounttype' IDENTIFIED BY 'password';
GRANT DELETE ON DATABASE.table TO 'USEr'@'accounttype' IDENTIFIED BY 'password';
MySQL備份和還原
- 不需要登錄
MYSQLDUMP -u USErname -p DATABASE > path
MYSQL -u USErname -p DATABASE < path
- 復制表
CREATE TABLE table_name LIKE tablename;