root用户密码忘记,重置的操作

#1: 通过任务管理器或者服务管理,关掉mysqld(服务进程)
#2: 通过命令行+特殊参数开启mysqld
mysqld --defaults-file="D:\ProgramFiles\mysql\MySQLServer5.7Data\my.ini" --skip-grant-tables#3: 此时,mysqld服务进程已经打开。并且不需要权限检查
4: mysql -uroot #无密码登陆服务器。另启动一个客户端进行
#5: 修改权限表
use mysql;
update user set authentication_string=password('新密码') where user='root' and Host='localhost';
flush privileges;
#6: 通过任务管理器,关掉mysqld服务进程。
#7: 再次通过服务管理,打开mysql服务。
#8: 即可用修改后的新密码登陆。

修改密码

#修改'root'@'localhost'用户的密码规则和密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'abc123';

查看所有字符集

SHOW VARIABLES LIKE 'character_set_%';

查询语句模板

select
from
where
group by
having
order by

创建新用户

create user jack;    #以‘%’做为host,并且没有密码
creat user ‘jack’@‘lacalhost’ indentifid with mysql_native_password by "123456"  #以localhost做为主机,并且以123456作为登录密码

删除用户

drop user jack;#删除‘jack’@‘%’,如果没有这条记录,删除失败
drop user ‘jack’@'localhost‘; # 删除jack

用户权限

#新用户创建没有任何权限需要手动赋予
show grants for 用户名;
#给用户授权
grant 权限1[,权限2,....] on *.* to 用户@主机;
#赋予所有权限
grant all on *.* to 用户@主机;
#收回用户权限
revoke 同上

库基本命令

create database 库名;  #创建数据库
show databases; #查看所有数据库
show create database 库名;    #查看创建库的命令
drop database 库名;    #删除数据库

创建表基本操作

create table 表名(列名1 类型 约束信息,列名2 类型 约束信息,列名3 类型 约束信息,...列名n 类型 约束信息,
)[options];rename table tablename1 to tablename2; #修改表名
show create table 表名;   #查看建表命令
drop table 表名;
alter table 表名 #子命令alter table 表名 add column_name datatype [默认信息] [约束信息] #添加列alter table 表名 drop column column_name;  #删除列alter table 表名 rename column column_name to new_column_name #修改列明alter table 表名 modify column_name datatype [default value] #修改列的类型

视图

# 创建
create [or replace]  [algorithm = {UNIFINED | merge | temptable}]
view view_name [(column_list)]
asselect_statemrnt
[with [cascade | local] check option]
#备注
#使用时某个普通用户,则需要授予:CREATE view 和drop view权限
#用户要有创建视图的权限 【create view】
#一般用权限管理配合

事务语句

commit
rollback
savepoint
select @@transaction_isolation;   #查看事务的隔离级别
set session transaction isolation level read committed; #修改事务的隔离级别
read uncommitted
read committed
repeatable read
serializable
set autocommit = 0;    #取消事务的自动提交
## 表级锁
lock table 表名 read | write -- 显示调用
unlock #释放表级锁
# 在read模式下,其他事务可以做select操作
# write模式下,其他事务不能做任何操作,完全的串行化
## 行级锁 INNODB数据引擎中才有 #自动分配

索引

索引创建方式

  1. 自动创建

    当我们给表中的列添加了主键约束或唯一性约束时,rambs会自动帮我们创建唯一性索引

    注:只有当我们的查询条件是创建了索引的列时,RDBMS才会帮助我们使用索引进行查询

  2. 手动创建

    -- 语法
    create index index_name on 表名 (列名 [,列名]) [visible]
    
  3. 何时创建索引

    • 列中null太多,不适合
    • 列中的值重复率太高
    • 列经常做更新操作
  4. 有了索引后,rdbms是如何做查询的

    • rdbms会自动判断出你的查询条件列是否加了索引
    • 首先,去查询索引,找到‘’行记录的物理位置‘’
    • 其次,再根据‘’行记录的物理位置‘’去表中定位记录
    • 最后把记录值返回结果集
  5. 索引失效

    • 你的查询条件没有使用添加了索引列
    • 查询条件中使用了表达式或函数
  6. 索引小结

    • 查询条件尽可能使用主键或唯一性键
    • 能不用函数尽量不要在查询条件中使用函数或表达式

函数

基本函数

函数 用法
ABS(x) 返回x的绝对值
SIGN(X) 返回X的符号。正数返回1,负数返回-1,0返回0
PI() 返回圆周率的值
CEIL(x),CEILING(x) 返回大于或等于某个值的最小整数
FLOOR(x) 返回小于或等于某个值的最大整数
LEAST(e1,e2,e3…) 返回列表中的最小值
GREATEST(e1,e2,e3…) 返回列表中的最大值
MOD(x,y) 返回X除以Y后的余数
RAND() 返回0~1的随机值
RAND(x) 返回0~1的随机值,其中x的值用作种子值,相同的X值会产生相同的随机数
ROUND(x) 返回一个对x的值进行四舍五入后,最接近于X的整数
ROUND(x,y) 返回一个对x的值进行四舍五入后最接近X的值,并保留到小数点后面Y位
TRUNCATE(x,y) 返回数字x截断为y位小数的结果
SQRT(x) 返回x的平方根。当X的值为负数时,返回NULL

角度与弧度互换函数

函数 用法
RADIANS(x) 将角度转化为弧度,其中,参数x为角度值
DEGREES(x) 将弧度转化为角度,其中,参数x为弧度值

三角函数

函数 用法
SIN(x) 返回x的正弦值,其中,参数x为弧度值
ASIN(x) 返回x的反正弦值,即获取正弦为x的值。如果x的值不在-1到1之间,则返回NULL
COS(x) 返回x的余弦值,其中,参数x为弧度值
ACOS(x) 返回x的反余弦值,即获取余弦为x的值。如果x的值不在-1到1之间,则返回NULL
TAN(x) 返回x的正切值,其中,参数x为弧度值
ATAN(x) 返回x的反正切值,即返回正切值为x的值
ATAN2(m,n) 返回两个参数的反正切值
COT(x) 返回x的余切值,其中,X为弧度值

指数与对数

函数 用法
POW(x,y),POWER(X,Y) 返回x的y次方
EXP(X) 返回e的X次方,其中e是一个常数,2.718281828459045
LN(X),LOG(X) 返回以e为底的X的对数,当X <= 0 时,返回的结果为NULL
LOG10(X) 返回以10为底的X的对数,当X <= 0 时,返回的结果为NULL
LOG2(X) 返回以2为底的X的对数,当X <= 0 时,返回NULL

进制间的转换

函数 用法
BIN(x) 返回x的二进制编码
HEX(x) 返回x的十六进制编码
OCT(x) 返回x的八进制编码
CONV(x,f1,f2) 返回f1进制数变成f2进制数
mysql> SELECT BIN(10),HEX(10),OCT(10),CONV(10,2,8)-> FROM DUAL;
+---------+---------+---------+--------------+
| BIN(10) | HEX(10) | OCT(10) | CONV(10,2,8) |
+---------+---------+---------+--------------+
| 1010    | A       | 12      | 2            |
+---------+---------+---------+--------------+
1 row in set (0.00 sec)

字符串函数

函数 用法
ASCII(S) 返回字符串S中的第一个字符的ASCII码值
CHAR_LENGTH(s) 返回字符串s的字符数。作用与CHARACTER_LENGTH(s)相同
LENGTH(s) 返回字符串s的字节数,和字符集有关
CONCAT(s1,s2,…,sn) 连接s1,s2,…,sn为一个字符串
CONCAT_WS(x, s1,s2,…,sn) 同CONCAT(s1,s2,…)函数,但是每个字符串之间要加上x
INSERT(str, idx, len, replacestr) 将字符串str从第idx位置开始,len个字符长的子串替换为字符串replacestr
REPLACE(str, a, b) 用字符串b替换字符串str中所有出现的字符串a
UPPER(s) 或 UCASE(s) 将字符串s的所有字母转成大写字母
LOWER(s) 或LCASE(s) 将字符串s的所有字母转成小写字母
LEFT(str,n) 返回字符串str最左边的n个字符
RIGHT(str,n) 返回字符串str最右边的n个字符
LPAD(str, len, pad) 用字符串pad对str最左边进行填充,直到str的长度为len个字符
RPAD(str ,len, pad) 用字符串pad对str最右边进行填充,直到str的长度为len个字符
LTRIM(s) 去掉字符串s左侧的空格
RTRIM(s) 去掉字符串s右侧的空格
TRIM(s) 去掉字符串s开始与结尾的空格
TRIM(s1 FROM s) 去掉字符串s开始与结尾的s1
TRIM(LEADING s1 FROM s) 去掉字符串s开始处的s1
TRIM(TRAILING s1 FROM s) 去掉字符串s结尾处的s1
REPEAT(str, n) 返回str重复n次的结果
SPACE(n) 返回n个空格
STRCMP(s1,s2) 比较字符串s1,s2的ASCII码值的大小
SUBSTR(s,index,len) 返回从字符串s的index位置其len个字符,作用与SUBSTRING(s,n,len)、MID(s,n,len)相同
LOCATE(substr,str) 返回字符串substr在字符串str中首次出现的位置,作用于POSITION(substr IN str)、INSTR(str,substr)相同。未找到,返回0
ELT(m,s1,s2,…,sn) 返回指定位置的字符串,如果m=1,则返回s1,如果m=2,则返回s2,如果m=n,则返回sn
FIELD(s,s1,s2,…,sn) 返回字符串s在字符串列表中第一次出现的位置
FIND_IN_SET(s1,s2) 返回字符串s1在字符串s2中出现的位置。其中,字符串s2是一个以逗号分隔的字符串
REVERSE(s) 返回s反转后的字符串
NULLIF(value1,value2) 比较两个字符串,如果value1与value2相等,则返回NULL,否则返回value1

注意:MySQL中,字符串的位置是从1开始的。

获取日期、时间

函数 用法
CURDATE() ,CURRENT_DATE() 返回当前日期,只包含年、月、日
CURTIME() , CURRENT_TIME() 返回当前时间,只包含时、分、秒
NOW() / SYSDATE() / CURRENT_TIMESTAMP() / LOCALTIME() / LOCALTIMESTAMP() 返回当前系统日期和时间
UTC_DATE() 返回UTC(世界标准时间)日期
UTC_TIME() 返回UTC(世界标准时间)时间

日期与时间戳的转换

函数 用法
UNIX_TIMESTAMP() 以UNIX时间戳的形式返回当前时间。SELECT UNIX_TIMESTAMP() ->1634348884
UNIX_TIMESTAMP(date) 将时间date以UNIX时间戳的形式返回。
FROM_UNIXTIME(timestamp) 将UNIX时间戳的时间转换为普通格式的时间

获取月份、星期、星期数、天数等函数

函数 用法
YEAR(date) / MONTH(date) / DAY(date) 返回具体的日期值
HOUR(time) / MINUTE(time) / SECOND(time) 返回具体的时间值
MONTHNAME(date) 返回月份:January,…
DAYNAME(date) 返回星期几:MONDAY,TUESDAY…SUNDAY
WEEKDAY(date) 返回周几,注意,周1是0,周2是1,。。。周日是6
QUARTER(date) 返回日期对应的季度,范围为1~4
WEEK(date) , WEEKOFYEAR(date) 返回一年中的第几周
DAYOFYEAR(date) 返回日期是一年中的第几天
DAYOFMONTH(date) 返回日期位于所在月份的第几天
DAYOFWEEK(date) 返回周几,注意:周日是1,周一是2,。。。周六是7

流程控制函数

函数 用法
IF(value,value1,value2) 如果value的值为TRUE,返回value1,否则返回value2
IFNULL(value1, value2) 如果value1不为NULL,返回value1,否则返回value2
CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2 … [ELSE resultn] END 相当于Java的if…else if…else…
CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值1 THEN 值1 … [ELSE 值n] END 相当于Java的switch…case…

加密与解密函数

函数 用法
PASSWORD(str) 返回字符串str的加密版本,41位长的字符串。加密结果不可逆,常用于用户的密码加密
MD5(str) 返回字符串str的md5加密后的值,也是一种加密方式。若参数为NULL,则会返回NULL
SHA(str) 从原明文密码str计算并返回加密后的密码字符串,当参数为NULL时,返回NULL。SHA加密算法比MD5更加安全
ENCODE(value,password_seed) 返回使用password_seed作为加密密码加密value
DECODE(value,password_seed) 返回使用password_seed作为加密密码解密value

MySQL信息函数

函数 用法
VERSION() 返回当前MySQL的版本号
CONNECTION_ID() 返回当前MySQL服务器的连接数
DATABASE(),SCHEMA() 返回MySQL命令行当前所在的数据库
USER(),CURRENT_USER()、SYSTEM_USER(),SESSION_USER() 返回当前连接MySQL的用户名,返回结果格式为“主机名@用户名”
CHARSET(value) 返回字符串value自变量的字符集
COLLATION(value) 返回字符串value的比较规则

关键字单词

auto_increment   #自动增长
primary key #主键
CONSTRAINT 外键名 FOREIGN KEY(列名) REFERENCES 要引入的表名(列名)
REGEXP #正则表达式
distinct #去重
join #关联查询  from 表名 别名 join 表名 别名 on 关联条件
left outer join #左外连接 以左边为准,右边不满足以null代替
right outer join #右外连接 以右边为准,左边不满足以null代替
inner join #内连接  两边都满足
IN      #等于列表中的**任意一个**
ANY     #需要和单行比较操作符一起使用,和子查询返回的**某一个**值比较
ALL     #需要和单行比较操作符一起使用,和子查询返回的**所有**值比较
SOME    #实际上是ANY的别名,作用相同,一般常使用ANY
## 事务相关
begin #事务开始
start transaction #事务开始
commit #提交事务
rollback #回滚

约束类型

  1. 主键约束:非空且唯一
  2. 非空约束 NOT NULL
  3. 唯一性约束 unique
  4. 外键约束
  5. 自定义约束 CHECK(条件)

添加约束

  1. 在列定义之前
  2. 在列定义以后约束

数据类型

  1. 数字型

    1. tinyint byte
    2. smaliint 相当于short
    3. mediumint 三个字节
    4. int
    5. bigin 相当于long
    6. float
    7. double
  2. 字符型
    1. char 定长字符
    2. varchar(length) 可变长字符
    3. text 文本类型
    4. json
  3. 日期型
    1. data
    2. time
    3. datatime
    4. timetamp
  4. 枚举
    1. enum
  5. 二进制类型
    1. clob
    2. blob

练习

-- 1) 查询数学分数为65,75,85的同学
select *
from exam
where math in (65,75,85);
-- 2) 查询英语成绩,排除完全相同重复数据
select distinct english
fr om exam;
--3) 对学生成绩按照英语进行降序排序,英语相同学员按照数学降序
select *
from exam
order by math desc,english desc;
-- 4) 统计总分大于220的人数有多少
select count(*)
from exam
where english+chinese+math>220;
-- 5) 统计英语成绩大于90的学生有多少个
select count(*)
from exam
where english>90;
-- 6) 统计一个班级语文、英语、数学的成绩总和
select sum(chinese) 语文,sum(math) 数学,sum(english) 英语
from exam;
-- 7) 求班级最高分和最低分
select max(chinese+math+english) 最高分,min(chinese+math+english) 最低分
from exam;-- (1)求购买了供应商"宝洁"产品的所有顾客;
select distinct customer.*
from purcase left join product on purcase.productId = product.productId left join customer on purcase.customerId = customer.customerId
where product.provider  = '宝洁';
--(2)求购买的商品包含了顾客"Dennis"所购买的所有商品的顾客(姓名)
--  ---------------------------------------------------------------------------------------------------
select namefrom (select customer.name name,count(purcase.productId) numfrom purcase left join customer on purcase.customerId = customer.customerId right join (select distinct productId,namefrom purcase left join customer on purcase.customerId = customer.customerIdwhere name = 'dennis') cus on purcase.productId = cus.productIdgroup by customer.name) a;#(3)求牙膏卖出数量最多的供应商。
select id,max(num)
from (select purcase.productId id,sum(quantity) numfrom purcase left join product on product.productId = purcase.productIdwhere category='牙膏'group by purcase.productId
) a;
-- DML操作
-- (1)将所有的牙膏商品单价增加10%。
update product set unitPrice=unitPrice*1.1 where category='牙膏';
-- (2)删除从未被购买的商品记录。
delete from product where productId not in(select distinct productIdfrom purcase);-- 1) 对订单表中商品归类后,显示每一类商品的总价
select product,sum(price) 总价
from orders
group by product;
-- 2) 查询购买了几类商品,并且每类总价大于100的商品
select *
from (select product,sum(price) 总价from ordersgroup by product) o
where o.总价>100;--------------------------------------------------------------------------------------------------------------------
-- 1) 查询平均成绩大于70分的同学的学号和平均成绩
select *
from (select s.id id ,avg(sc.score) 平均成绩from student s left join studentcource sc on s.id= sc.student_idgroup by s.id
) a
where a.平均成绩>70;-- 2) 查询所有同学的学号、姓名、选课数、总成绩select s.id 学生ID,s.name 学生姓名,选课数,总成绩
from student s left join (select student_id id,count(*) 选课数, sum(score) 总成绩from studentcourcegroup by student_id) a on a.id = s.id
order by s.id;  -- 3) 查询没学过关羽老师课的同学的学号、姓名
select id,name
from student
where id not in (select student_id idfrom studentcource sc right join(select cource.id 课程IDfrom courcewhere cource.teacher_id =(select id 老师IDfrom teacherwhere name = '关羽')) a on a.课程ID = sc.cource_id
)
order by id;
-- 4) 查询学过赵云老师所教的所有课的同学的学号、姓名
select id,name
from student
where id in (select student_id idfrom studentcource sc right join(select cource.id 课程IDfrom courcewhere cource.teacher_id =(select id 老师IDfrom teacherwhere name = '赵云')) a on a.课程ID = sc.cource_id
)
order by id;
-- 5) 查询没有学三门课以上的同学的学号、姓名
select ID,学生姓名
from (select  s.id ID, s.name 学生姓名, count(*) 选课数from studentcource  sc left join student s on sc.student_id=s.idgroup by s.id) a
where a.选课数<=3;
-- 6) 查询各科成绩最高和最低的分
select cource_id,max(sc.score) 最高分, min(sc.score) 最低分
from studentcource sc
group by sc.cource_id;
-- 7) 查询上海和北京学生数量
select city 城市, count(*) 数量
from student
where city='上海' or city='北京'
group by city;-- 8) 统计每门课程的学生选修人数(超过两人的进行统计)
select c.id ,name ,数量
from cource c left join (select cource_id id,count(*) 数量from studentcource scgroup by cource_id) a on c.id = a.id
where a.数量>2;
-- 9) 查询 生物 成绩排名前3的同学
select *
from student
where id in (select *from (select sc.student_idfrom studentcource sc right join(select idfrom courcewhere name='生物' ) a on sc.cource_id = a.idorder by scorelimit 3 offset 0 ) b
);

MySQL常用操作总结相关推荐

  1. mysql 分库分表 建表,mysql 分库分表 建表MySQL常用操作

    通过命令行启动.停止MySQL服务器: start: net start mysql stop: net stop mysql 连接MySQL服务器:\>mysql -h127.0.0.1 -u ...

  2. MySQL常用操作之创建存储过程语法详解

    MySQL常用操作之创建存储过程语法详解 前言 简介 语法 创建结构 变量结构 入参变量和出参变量 流程控制 判断(IF 语句) 判断(CASE 语句) 循环(LOOP 语句) 循环(WHILE 语句 ...

  3. mysql 创建相同数据库_mysql数据库找出相同数据MySQL常用操作

    一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建-> Path=";pathmysqlbin;"其中path为MySQL ...

  4. MYSQL常用操作 知识梳理

    MYSQL常用操作  知识梳理 ==================================增删改查======================================= 创建数据库 ...

  5. MYSQL常用操作(一)之设置ROOT密码,连接,常用命令

    2019独角兽企业重金招聘Python工程师标准>>> 设置更改root密码 /usr/local/mysql/bin/mysql -uroot 更改环境变量PATH,增加mysql ...

  6. Windows平台下MySQL常用操作与命令

    1.导出整个数据库 mysqldump -u 用户名 -p --default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1) mysqld ...

  7. mysql常用操作 mysql备份与恢复

    先登录mysql  ==>mysql -uroot -p  查看数据库的版本 select version(); 查看有哪些库 show datases; 查看当前处于哪个库 select da ...

  8. mysql 3.23_2018-3-23 13周5次课 MySQL常用操作(下)

    13.4 mysql用户管理 ·创建用户:grant all on *.* to 'user1' identified by 'passwd'; 或指定来源ip:grant all on *.* to ...

  9. mysql常用操作(二)

    全文本搜索 两个最常用的引擎为MyISAM和InnoDB,前者支持全文本搜索,而后者不支持. 在使用全文本搜索时,MySQL不需要分别查看每个行,不需要分别分析和处理每个词.MySQL创建指定列中各词 ...

最新文章

  1. 怎样在ROS下实现基于YOLO的px4无人机目标检测?
  2. debian配置集锦
  3. 【Android 内存优化】垃圾回收算法 ( 内存优化总结 | 常见的内存泄漏场景 | GC 算法 | 标记清除算法 | 复制算法 | 标记压缩算法 )
  4. Java集合之Properties
  5. Redis开发运维实践问题处理只内存检查
  6. 深入理解Spark 2.1 Core (八):Standalone模式容错及HA的原理与源码分析
  7. 职场透视:我们都是猪八戒?
  8. php 字符串 替换 最后,php如何替换字符串中的最后一个字符
  9. 查找工具locate和find
  10. python源码中的学习笔记_第12章_编码格式与文件操作
  11. 那根你想顺着去打人的网线是怎么制作的?
  12. D盘下的 msdia80.dll 怎么处理?
  13. 学计算机装机,学习电脑装机全过程 组装台式机图解教程(12)
  14. 李想的理想,不太「理想」
  15. UDP视频流MP2T的分析方法
  16. Python基础(3)——北京市地铁买票问题(思维练习题)
  17. 一套asp.net开发的快递单打印系统源码
  18. idea windows找不到文件chrome
  19. Github上利用win10使用TensorFlow(GPU)上如何去训练一个目标多分类检测的例子
  20. cad.net 属性块(二)

热门文章

  1. 经典PID控制及应用体会总结
  2. ubuntu配置IP地址,网关,DNS和路由
  3. 学编程用什么系统好?
  4. 作为后起之秀的远程控制软件·ToDesk,你安排了没?
  5. Python 基础课程安排
  6. 财务管理----记账凭证
  7. 关于《推背图》,《奇门遁甲》
  8. TextView与EditText
  9. 32位和64位操作系统与System,System32,Syswow64的区别
  10. 耗时3个月整理的网络安全学习路线,非常详细!