MySQL基本知識點概述

一 數據庫

(一)數據庫種類

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
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章