一 数据库
(一)数据库种类
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