一 數據庫
(一)數據庫種類
MySQL庫從種類上劃分爲兩大類:MySQL默認庫和用戶自定義庫
默認庫有:information_schema,performance_schema,mysql,sys
其中:
information_schema表示與數據庫基礎架構相關的信息,如表信息,字段信息等
performance_schema表示性能相關信息
mysql便是用戶相關信息
sys表示配置相關信息
(二)創建數據庫
創建數據庫時,設置格式爲utf8
CREATE DATABASE databaseName DEFAULT CHARACTER SET utf8
二 權限相關
設置權限有兩種方式:
方式一:
1.添加賬戶的同時,設置權限
GRANT ALL PRIVILEGES ON *.* to 'Alan_beijing'@'%' IDENTIFIED by 'Shanghai2019' WITH GRANT OPTION
a.@後面的%表示允許多客戶端訪問
b.@後面爲localhost,則表示只能本地訪問
c.WITH GRANT OPTION 表示可以賦權限
方式二:
1.先添加賬戶,再設置權限
-- 僅僅創建用戶賬號
-- 結構:CREATE `user` 賬號名@是否遠程登陸 IDENTIFIED by PASSWORD
--僅僅創建用戶Test
CREATE user 'Test'@'%' IDENTIFIED by '123456'
--爲用戶Test賦予所有權限
GRANT ALL PRIVILEGES ON *.* TO Test
相關操作:
-- 重命名
-- RENAME USER Test to Test1
-- 刪除用戶賬號
-- DROP user Test
-- 查看用戶權限
-- SHOW GRANTS FOR Test
-- 賦予權限
-- GRANT SELECT ON mysql.* TO Test
--取消權限
-- REVOKE SELECT on mysql.* FROM Test
--更改口令
更改口令有如下兩種方式:
MySQL5.6前版本
-- SET PASSWORD FOR Test=PASSWORD("123456$")
MySQL5.6以上版本
-- ALTER USER 'Test'@'%' IDENTIFIED by '123456'
方式三
5.6前版本,由於有password字段,故可以採用如下方式
insert into user (host,user,password) values ('%','Test',password('123456'));
三 MySQL執行順序
SQL腳本按照如下順序執行:
FROM
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT
示例:
1.表結構和測試數據
CREATE TABLE `stu_info` (
`class_code` int(6) NOT NULL,
`stu_id` int(8) NOT NULL,
`stu_name` varchar(50) DEFAULT NULL,
`stu_chinese` int(3) DEFAULT '0',
`stu_english` int(3) DEFAULT '0',
`stu_math` int(3) DEFAULT '0',
`stu_age` int(3) NOT NULL,
`stu_sex` int(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
INSERT INTO stu_info(stu_id,stu_name,stu_chinese,stu_english,stu_math)
VALUES
(20190101,'李宏',125,145,130),(20190102,'趙劃',130,140,142),(20190103,'王學武',130,148,144),
(20190201,'張豔',120,123,125),(20190201,'陳濤',120,123,125),(20190201,'萬文學',120,123,125),
(20190301,'白海',1115,133,129),(20190301,'費宏',133,113,135),(20190301,'李博學',138,120,140)
2.查詢語句
SELECT class_code,AVG(stu_math)
FROM stu_info
WHERE stu_age<16
GROUP BY class_code
HAVING AVG(stu_math)>130
四 對單表基本操作
-- 1.查看數據庫
SHOW DATABASES;
-- 2.查看錶
SHOW TABLES;
-- 3.查看錶結構 DDL
SHOW CREATE TABLE stu_info
-- 4.創建表
CREATE TABLE `stu_info` (
`class_code` int(6) NOT NULL,
`stu_id` int(8) NOT NULL,
`stu_name` varchar(50) DEFAULT NULL,
`stu_chinese` int(3) DEFAULT '0',
`stu_english` int(3) DEFAULT '0',
`stu_math` int(3) DEFAULT '0',
`stu_age` int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
-- 5.查看錶簡要描述
DESCRIBE stu_info
-- 6.查詢表中列的註釋信息
SELECT * FROM information_schema.COLUMNS
WHERE table_schema = 'db_test' #表所在數據庫
AND table_name = 'stu_info' ; #你要查的表
-- 7.複製表結構
CREATE TABLE stu_info1 LIKE stu_info
-- 8.複製數據
INSERT INTO stu_info1 SELECT * FROM stu_info
-- 9.修改表結構
ALTER TABLE stu_info ADD COLUMN stu_sex int(1) after stu_age
-- 10.授權
GRANT ALL PRIVILEGES ON *.* TO 'Alan_beijing'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION
五 存儲過程
CREATE PROCEDURE sp_add(in a int,in b int,out c int)
BEGIN
-- 定義變量
DECLARE d int;
-- 設置變量值
SET d=100;
-- 輸出c的值
SET c=a+b-d;
END;
-- 調用過程:
CALL sp_add (1,2,@a);
SELECT @a;
1.創建存儲過程
CREATE PROCEDURE 存儲過程名(參數)
BEGIN
存儲過程體;
END
2.存儲過程參數
存儲過程參數可以分爲三大類:
(1)in 表示輸入
(2)out 表示輸出
(3)inout 表示輸入輸出
3.存儲過程變量
(1)定義變量
結構:declare 變量名 變量類型 DEFAULT 默認值
eg: declare user_name varchar(50) default 'Alan_beijing'
(2)設置變量值
結構:SET 變量名 變量值
eg:SET user_name="Alan";
4.存儲過程調用
CALL 存儲過程名(參數);
5.查看存儲過程
SHOW PROCEDURE 存儲過程名;
6.刪除存錯存儲過程
DROP PROCEDURE 存儲過程名;
六 條件語句
1.IF語句
結構一:
IF(expr1,expr2,expr3),如果expr1爲ture,則返回expr2,否則返回expr3;
eg:SELECT IF(1>2,'大於2','1小於2') AS CompareResult
結構二:IF....ELSE....
-- 定義存儲過程
CREATE PROCEDURE proc_getMathLevel(stu_no INT)
BEGIN
DECLARE math_score float;
SELECT stu_math into math_score from stu_info where stu_id=stu_no ;
IF math_score>=140 then
SELECT math_score,'A' AS '等級';
ELSEIF math_score<140 and math_score>=125 then
SELECT math_score,'B' AS '等級';
ELSEIF math_score<125 and math_score>=110 then
SELECT math_score,'C' AS '等級';
ELSEIF math_score<110 and math_score>=90 then
SELECT math_score,'D' AS '等級';
ELSE
SELECT math_score,'E' AS '等級';
END IF;
END
-- 調用存儲過程
CALL proc_getMathLevel(20190101);
注意:
(1)ELSEIF沒有分開,不是ELSE IF
(2)用END IF ;結束
結構三:IFNULL(expr1,expr2)
expr1 不爲 NULL,則 IFNULL() 的返回值爲 expr1; 否則其返回值爲 expr2
SELECT IFNULL(NULL,'我是第二個值'),IFNULL(1,0);
2.CASE語句
結構一:當滿足某種條件時,執行result
CASE
WHEN when_value THEN
statement_list
ELSE
statement_list
END CASE;
例子:
CREATE PROCEDURE proc_getStuMathLevel1(stuNo INT)
BEGIN
-- 聲明變量
DECLARE math_score INT;
SELECT stu_math INTO math_score FROM stu_info WHERE stu_id=stuNo;
CASE
WHEN math_score>=140 THEN
SELECT math_score,'A' AS '等級' ;
WHEN math_score<140 AND math_score>=125 THEN
SELECT math_score,'B' AS '等級' ;
WHEN math_score<125 AND math_score>=110 THEN
SELECT math_score,'C' AS '等級' ;
WHEN math_score<110 AND math_score>=90 THEN
SELECT math_score,'D' AS '等級' ;
ELSE
SELECT math_score,'E111' AS '等級' ;
END CASE;
END
當case_calue與when_value相等時,執行THEN
CASE case_value
WHEN when_value THEN
statement_list
ELSE
statement_list
END CASE;
CREATE PROCEDURE compareValue(val int)
BEGIN
CASE 1
WHEN 3 THEN
SELECT 'This is 3' AS compare_result;
WHEN 2 THEN
SELECT 'This is 2' AS compare_result;
WHEN 3 THEN
SELECT 'This is 1' AS compare_result;
ELSE
SELECT 'This is 0' AS compare_result;
END CASE;
END
測試結果:
七 循環
1.while
2.repeat
3.loop
版權區
轉載博客,必須註明博客出處
博主網址:http://www.cnblogs.com/wangjiming/
如您有新想法,歡迎提出,郵箱:[email protected]
專業.NET之家技術QQ羣:490539956
專業化Java之家QQ羣:924412846
有問必答QQ羣:2098469527
一對一技術輔導QQ:2098469527