博客说明mysql
文章所涉及的资料来自互联网整理和我的总结,意在于我的学习和经验汇总,若有什么地方侵权,请联系本人删除,谢谢!程序员
Structured Query Language:结构化查询语言sql
SQL 语句能够单行或多行书写,以分号结尾。数据库
可以使用空格和缩进来加强语句的可读性。安全
MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。函数
3 种注释学习
单行注释: -- 注释内容 或 # 注释内容(mysql 特有)code
多行注释: /* 注释 */对象
C(Create):建立排序
R(Retrieve):查询
U(Update):修改
D(Delete):删除
使用数据库
C(Create):建立
语法:
create table 表名( 列名1 数据类型1, 列名2 数据类型2, .... 列名n 数据类型n );
int:整数类型
double:小数类型
date:日期,只包含年月日,yyyy-MM-dd
datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
timestamp:时间错类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
varchar:字符串
C(Create):建立表
create table student( id int, name varchar(32), age int , score double(4,1), birthday date, insert_time timestamp );
复制表:create table 表名 like 被复制的表名;
R(Retrieve):查询
U(Update):修改
D(Delete):删除
语法:
注意:
select * from 表名;
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组以后的条件 order by 排序 limit 分页限定
多个字段的查询
select 字段名1,字段名2... from 表名;
去除重复:
计算列
起别名:
>、< 、<= 、>= 、= 、<>
3. 案例
-- 查询年龄大于20岁 SELECT * FROM student WHERE age > 20; SELECT * FROM student WHERE age >= 20; -- 查询年龄等于20岁 SELECT * FROM student WHERE age = 20; -- 查询年龄不等于20岁 SELECT * FROM student WHERE age != 20; SELECT * FROM student WHERE age <> 20; -- 查询年龄大于等于20 小于等于30 SELECT * FROM student WHERE age >= 20 && age <=30; SELECT * FROM student WHERE age >= 20 AND age <=30; SELECT * FROM student WHERE age BETWEEN 20 AND 30; -- 查询年龄22岁,18岁,25岁的信息 SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25 SELECT * FROM student WHERE age IN (22,18,25); -- 查询英语成绩为null SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=) 判断 SELECT * FROM student WHERE english IS NULL; -- 查询英语成绩不为null SELECT * FROM student WHERE english IS NOT NULL; -- 查询姓马的有哪些? like SELECT * FROM student WHERE NAME LIKE '马%'; -- 查询姓名第二个字是化的人 SELECT * FROM student WHERE NAME LIKE "_化%"; -- 查询姓名是3个字的人 SELECT * FROM student WHERE NAME LIKE '___'; -- 查询姓名中包含德的人 SELECT * FROM student WHERE NAME LIKE '%德%';
语法:order by 子句
排序方式:
注意:
将一列数据做为一个总体,进行纵向的计算。
注意:聚合函数的计算,排除null值。
解决方案:
语法:group by 分组字段;
注意:
分组以后查询的字段:分组字段、聚合函数
where 和 having 的区别?
案例
-- 按照性别分组。分别查询男、女同窗的平均分 SELECT sex , AVG(math) FROM student GROUP BY sex; -- 按照性别分组。分别查询男、女同窗的平均分,人数 SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex; -- 按照性别分组。分别查询男、女同窗的平均分,人数 要求:分数低于70分的人,不参与分组 SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex; -- 按照性别分组。分别查询男、女同窗的平均分,人数 要求:分数低于70分的人,不参与分组,分组以后。人数要大于2我的 SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2; SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;
语法:limit 开始的索引,每页查询的条数;
公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
-- 每页显示3条记录
SELECT * FROM student LIMIT 0,3; -- 第1页 SELECT * FROM student LIMIT 3,3; -- 第2页 SELECT * FROM student LIMIT 6,3; -- 第3页
limit 是一个MySQL"方言"
DBA:数据库管理员
添加用户:
语法:
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
删除用户:
语法:
DROP USER '用户名'@'主机名';
修改用户密码:
UPDATE USER SET PASSWORD = PASSWORD('新密码') WHERE USER = '用户名'; UPDATE USER SET PASSWORD = PASSWORD('abc') WHERE USER = 'lisi'; SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码'); SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');
cmd -- > net stop mysql 中止mysql服务
使用无验证方式启动mysql服务: mysqld --skip-grant-tables
打开新的cmd窗口,直接输入mysql命令,敲回车。就能够登陆成功
use mysql;
update user set password = password('你的新密码') where user = 'root';
关闭两个窗口
打开任务管理器,手动结束mysqld.exe 的进程
启动mysql服务
使用新密码登陆。
查询用户:
-- 1. 切换到mysql数据库 USE myql; -- 2. 查询user表 SELECT * FROM USER;
查询权限:
-- 查询权限 SHOW GRANTS FOR '用户名'@'主机名'; SHOW GRANTS FOR 'lisi'@'%';
授予权限:
-- 授予权限 grant 权限列表 on 数据库名.表名 to '用户名'@'主机名'; -- 给张三用户授予全部权限,在任意数据库任意表上 GRANT ALL ON *.* TO 'zhangsan'@'localhost';
撤销权限:
-- 撤销权限: revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名'; REVOKE UPDATE ON db3.`account` FROM 'lisi'@'%';
感谢
黑马程序员
以及勤劳的本身
关注公众号: 归子莫,获取更多的资料,还有更长的学习计划