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
 

发布了50 篇原创文章 · 获赞 38 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/u010228798/article/details/90115831
今日推荐