Mysql8初始化新建库

mysql8

安装mysql8

  • 安装完成后,之前的MariaDB就会被覆盖掉
  1. wget -i -c https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
  2. yum -y install mysql80-community-release-el7-3.noarch.rpm
  3. yum -y install mysql-community-server

启动mysql

  1. 启动MySQL服务:systemctl start mysqld.service
  2. 查看MySQL服务:systemctl status mysqld.service
  • 查看MySQL是不是开机自启,可以执行命令查看开机自启列表
    1
    systemctl list-unit-files|grep enabled

进入mysql

  1. 此时如果要进入MySQL得找出root用户的密码,输入命令:grep “password” /var/log/mysqld.log
    1
    2021-05-10T08:10:47.232877Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: [这里是密码]
  2. MySql需要重新设置密码才能操作数据库。:ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘123456’;
    1
    2
    3
    注意:先登录进去:mysql -u root -p
    设置密码的时候需要遵守MySQL密码设置规范,如果不符合规范是不能修改成功的。
    如下图,我将密码设置为123456,它提示我 密码不符合规范

登录后远程连接备注

需要重新创建用户的:

1
2
3
4
5
6
7
8
9
设置允许远程连接。

如果直接使用命令:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456'; 会提示一个语法错误,有人说是mysql8的分配权限不能带密码隐士创建账号了,要先创建账号再设置权限。也有的说8.0.11之后移除了grant 添加用户的功能。

创建新用户 admin

创建用户:CREATE USER 'admin'@'%' IDENTIFIED BY '123456';

允许远程连接:GRANT ALL ON *.* TO 'admin'@'%';

不创建用户:

1
2
3
4
5
6
7
8
mysql8下试验通过的:
use mysql

update mysql.user set host = '%' where user = 'root';

FLUSH PRIVILEGES;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;

创建数据库

  1. CREATE DATABASE [数据库表] 语句创建数据库
  2. SHOW CREATE DATABASE [数据库表] 查询创建的库

导出导出数据库

  1. mysqldump -u root -pmima [数据库表] > dbname.sql
    1
    2
    3
    4
    5
    6
    1. 格式:mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名 
    2. 导出所有库:mysqldump -u root -proot --all-databases >/tmp/all.sql
    3. 导出几个:mysqldump -u root -proot --databases db1 db2 >/tmp/user.sql
    4. 导出一个数据库:mysqldump -u root -proot --skip-add-drop-table nacos_config >d:/nacos_config_db.sql
    5. 只导出结构:加上 -d
    6. --skip-add-drop-table 导出的sql创建表之前都会drop 表.加上该参数会不加drop的sql
  2. 导入数据库
    1
    2
    3
    4
    1. 常用source 命令
    2. 进入mysql数据库控制台:mysql -u root -p
    3. mysql>use 数据库
    4. 然后使用source命令,后面参数为脚本文件(如这里用到的.sql):mysql>source d:/dbname.sql

Mysql事务开启

//查看当前事物级别:
SELECT @@tx_isolation;

//设置read uncommitted级别: 未提交读
set session transaction isolation level read uncommitted;

//设置read committed级别: 已提交读
set session transaction isolation level read committed;

//设置repeatable read级别: 可重复读
set session transaction isolation level repeatable read;

//设置serializable级别: 可串行化
set session transaction isolation level serializable;

  1. 手动开启事务:
    begin;
    select xxx
    commit;

mysql事务理解

mysql知识点

事务的说明探讨

参考:1

mysql知识点

  1. 事务四大特征:原子性,一致性,隔离性和持久性(ACID)

    1
    2
    这 4 条特性,是事务管理的基石,一定要透彻理解。此外还要明确,这四个家伙当中,谁才是最终目标?
    理解:原子性是基础,隔离性是手段,持久性是目的,最终目标就是一致性。数据不一致了,就相当于数据错位了。所以说,这三个小弟都是跟着“一致性”这个老大混,为他全心全意服务。
  2. mysql隔离级别:是为了处理事务中隔离性的工具

    1
    2
    3
    4
    5
    SQL标准定义的四个隔离级别为:
    READ UNCOMMITTED
    READ COMMITTED
    REPEATABLE READ
    SERIALIZABLE

    mysql事务对应

mysql知识点(B/B+数据结构)

mysql知识点

先放出友情链接

事务的说明探讨

参考:1

mysql知识点

  1. mysql事务实现:MVCC概念

  2. 组合索引:innodb 索引会带上当前的索引,同时加上主键Id,order 也会用索引

  3. mysql order by 工作过程:文章1 | 文章2

    1
    2
    3
    4
    5
    上诉排序问题:sql为:select city,name,age from t where city in ('杭州','苏州') order by name limit 1000;这时候怎么办?
    1: 组合索引的排序规则是city_name 这时候city=杭州 但是name排序不对。
    2: 业务上分别拆分成2条:select city,name,age from t where city='杭州' order by name limit 1000;
    and select city,name,age from t where city='苏州' order by name limit 1000; 然后再业务代码中进行name排序取出前1000.
    也是一种方法
  4. mysql explan 中type含义: 文章

  5. B树 B+数区别 :文章

    1
    2
    3
    4
    5
    6
    7
    8
    B树和B+树的区别

    这都是由于B+树和B具有这不同的存储结构所造成的区别,以一个m阶树为例。
    1. 关键字的数量不同;B+树中分支结点有m个关键字,其叶子结点也有m个,其关键字只是起到了一个索引的作用,但是B树虽然也有m个子结点,但是其只拥有m-1个关键字。
    2. 存储的位置不同;B+树中的数据都存储在叶子结点上,也就是其所有叶子结点的数据组合起来就是完整的数据,但是B树的数据存储在每一个结点中,并不仅仅存储在叶子结点上。
    3. 分支结点的构造不同;B+树的分支结点仅仅存储着关键字信息和儿子的指针(这里的指针指的是磁盘块的偏移量),也就是说内部结点仅仅包含着索引信息。
    4. 查询不同;B树在找到具体的数值以后,则结束,而B+树则需要通过索引找到叶子结点中的数据才结束,也就是说B+树的搜索过程中走了一条从根结点到叶子结点的路径。

oracle一些用到的语法总结

用到的工作上一些语法

  1. DECODE语句,”DECODE”(expr, [search, result]*, default) ,全局简介:

    1
    2
    3
    4
    5
    6
    7
    举例说明:
    现定义一table名为output,其中定义两个column分别为monthid(var型)和sale(number型),若sale值=1000时翻译为 D,=2000时翻译为C,=3000时翻译为B,=4000时翻译为A,如是其他值则翻译为Other;
    SQL如下:
    Select monthid , decode (sale,1000,'D',2000,'C',3000,'B',4000,'A',’Other’) sale from output
    特殊情况:
    若只与一个值进行比较
    Select monthid ,decode(sale, NULL,‘---’,sale) sale from output
  2. round() 四舍五入使用,SELECT ROUND(column_name,decimals) FROM table_name

    1
    2
    3
    参数    描述
    column_name 必需。要舍入的字段。
    decimals 非必需,默认0,返回int。规定要返回的小数位数
  3. sql结合以上2点防止生成百分比防止除数是0

    1
    decode(xx, 0, 0, to_char(round(ddd / xxx * 100, 2), 'fm990.99'))

oracle一些用到的语法总结

sql developer

  1. 工具打开多个窗口,工具默认是只能打开一个窗口。在 工具>首选项>数据库>ObjectViewer 中,将自动冻结对象查看器窗口,即可,如下图

mysql-extra字段说明

EXPLAIN字段说明

执行explain中字段extra的含义。执行效率从上到下依次递减

  1. using index :使用覆盖索引的时候就会出现
  2. using where:在查找使用索引的情况下,需要回表去查询所需的数据
  3. using index condition:查找使用了索引,但是需要回表查询数据
  4. using index & using where:查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据
  5. using filesort 是通过相应的排序算法,将取得的数据在内存中进行排序:。
    1
    2
    3
    4
    5
    MySQL需要将数据在内存中进行排序,所使用的内存区域也就是我们通过sort_buffer_size 系统变量所设置的排序区。
    这个排序区是每个Thread 独享的,所以说可能在同一时刻在MySQL 中可能存在多个 sort buffer 内存区域。
    在MySQL中filesort 的实现算法实际上是有两种:
    双路排序:是首先根据相应的条件取出相应的排序字段和可以直接定位行数据的行指针信息,然后在sort buffer 中进行排序。
    单路排序:是一次性取出满足条件行的所有字段,然后在sort buffer中进行排序。

执行explain中字段type的含义。执行效率从上到下依次递减

  1. system:系统表,少量数据,往往不需要进行磁盘IO
  2. const:常量连接
  3. eq_ref:主键索引(primary key)或者非空唯一索引(unique not null)等值扫描
  4. ref:非主键非唯一索引等值扫描
  5. range:范围扫描
  6. index:索引树扫描
  7. ALL:全表扫描(full table scan)