资讯详情

mysql进阶

mysql进阶

二进制格式mysql安装

[root@192 src]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz   ///下载二进制格式mysql软件包 --2022-07-27 19:14:07--  https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz Resolving downloads.mysql.com (downloads.mysql.com)... 23.13.191.247, 2600:140e:6:7a7::2e31,  Saving to: ????ysql-5.7.38-linux-glibc2.12-x86_64.tar.gz? ... mysql-5.7.38-linu 100%[==========>] 643.57M  13.9MB/s    in 53s       2022-07-27 19:15:00 (12.2 MB/s) - ???ysql-5.7.38-linux-glibc2.12-x86_64.tar.gz???saved [674830866/674830866]   //创建用户和组 [root@192 src]# groupadd -r mysql [root@192 src]# useradd -M -s /sbin/nologin -g mysql mysql  ////usr/local/ [root@192 src]# tar xf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ [root@192 src]# ls /usr/local/ bin  games    lib    libexec                              sbin   src etc  include  lib64  mysql-5.7.38-linux-glibc2.12-x86_64  share   [root@192 local]# ln -svf mysql-5.7.38-linux-glibc2.12-x86_64/ mysql 'mysql/mysql-5.7.38-linux-glibc2.12-x86_64' -> 'mysql-5.7.38-linux-glibc2.12-x86_64/' [root@192 local]# ll total 0 drwxr-xr-x. 2 root root   6 Jun 22  2021 bin drwxr-xr-x. 2 root root   6 Jun 22  2021 etc drwxr-xr-x. 2 root root   6 Jun 22  2021 games drwxr-xr-x. 2 root root   6 Jun 22  2021 include drwxr-xr-x. 2 root root   6 Jun 22  2021 lib drwxr-xr-x. 3 root root  17 Jul 27 19:23 lib64 drwxr-xr-x. 2 root root   6 Jun 22  2021 libexec lrwxrwxrwx. 1 root root  36 Jul 27 19:42 mysql -> mysql-5.7.38-linux-glibc2.12-x86_64/ drwxr-xr-x. 9 root root 172 Jul 27 19:43 mysql-5.7.38-linux-glibc2.12-x86_64 drwxr-xr-x. 2 root root   6 Jun 22  2021 sbin drwxr-xr-x. 5 root root  49 Jul 27 19:23 share drwxr-xr-x. 2 root root   6 Jun 22  2021 src  //修改两个目录mysql的属主属组 [root@192 ~]# chown -R mysql.mysql /usr/local/mysql [root@192 local]# chown -R mysql.mysql mysql-5.7.38-linux-glibc2.12-x86_64/ [root@192 local]# ll total 0 drwxr-xr-x. 2 root  root    6 Jun 22  2021 bin drwxr-xr-x. 2 root  root    6 Jun 22  2021 etc drwxr-xr-x. 2 root  root    6 Jun 22  2021 games drwxr-xr-x. 2 root  root    6 Jun 22  2021 include drwxr-xr-x. 2 root  root    6 Jun 22  2021 lib drwxr-xr-x. 3 root  root   17 Jul 27 19:23 lib64 drwxr-xr-x. 2 root  root    6 Jun 22  2021 libexec lrwxrwxrwx. 1 mysql mysql  36 Jul 27 19:42 mysql -> mysql-5.7.38-linux-glibc2.12-x86_64/ drwxr-xr-x. 9 mysql mysql 172 Jul 27 19:43 mysql-5.7.38-linux-glibc2.12-x86_64 drwxr-xr-x. 2 root  root    6 Jun 22  2021 sbin drwxr-xr-x. 5 root  root   49 Jul 27 19:23 share drwxr-xr-x. 2 root  root    6 Jun 22  2021 src   //添加环境变量 [root@192 bin]# echo 'export PATH=$PATH:/usr/local/mysql/bin'>/etc/profile.d/mysql.sh [root@192 bin]# source /etc/profile.d/mysql.sh  [root@192 bin]# echo $PATH  /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin  //配置mysql [root@192 mysql]# ln -sv /usr/local/mysql/include/ /usr/include/mysql'/usr/include/mysql' -> '/usr/local/mysql/include/' [root@192 mysql]# vim /etc/ld.so.conf.d/mysql.conf [root@192 mysql]# ldconfig [root@192 mysql]# vim /etc/man_db.conf  [root@192 mysql]# cat /etc/ld.so.conf.d/mysql.conf /usr/local/mysql/lib [root@192 mysql]# cat /etc/man_db.conf MANDATORY_MANPATH   /usr/man MANDATORY_MANPATH   /usr/share/man MANDATORY_MANPATH   /usr/local/share/man MANDATORY_MANPATH   /usr/local/mysql/man  ///建立数据存储目录 [root@192 bin]# cd /usr/local/mysql [root@192 mysql]# mkdir /opt/data [root@192 mysql]# chown -R mysql.mysql /opt/data/ [root@192 mysql]# ll /opt/ total 0 drwxr-xr-x. 2 mysql mysql 6 Jul 27 20:00 data [root@192 mysql]# chown -R mysql.mysql /opt/data/  //改变属主 [root@192 mysql]# mysqld --initialize --user mysql --datadir /opt/data/  ///初始化数据库 [root@192 mysql]# mysqld --initialize --user mysql --datadir /opt/data/ 2022-07-27T12:26:11.444990Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2022-07-27T12:26:11.689803Z 0 [Warning] InnoDB: New log files created, LSN=45790 2022-07-27T12:26:11.713669Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 2022-07-27T12:26:11.718695Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 4cc75d34-0da7-11ed-8c84-000c29d2ae18. 2022-07-27T12:26:11.746162Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. 2022-07-27T12:26:12.052885Z 0 [Warning] A deprecatd TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2022-07-27T12:26:12.052911Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
2022-07-27T12:26:12.053356Z 0 [Warning] CA certificate ca.pem is self signed.
2022-07-27T12:26:12.101059Z 1 [Note] A temporary password is generated for root@localhost: kowTN:upQ1_-
//请注意,这个命令的最后会生成一个临时密码,此处密码是kowTN:upQ1_-
//再次注意,这个密码是随机的,你的不会跟我一样,一定要记住这个密码,因为一会登录时会用到

//生成配置文件
[root@192 ~]# cat /etc/my.cnf 
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
sql-mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

//配置服务启动脚本
[root@localhost ~]# cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@192 ~]# cat /etc/init.d/mysqld
basedir=/usr/local/mysql/
datadir=/opy/data/
[root@192 ~]# service mysqld start
Starting MySQL. SUCCESS! 
[root@192 ~]# ss -anlt
State   Recv-Q  Send-Q   Local Address:Port   Peer Address:Port Process  
LISTEN  0       128            0.0.0.0:22          0.0.0.0:*             
LISTEN  0       128               [::]:22             [::]:*             
LISTEN  0       80                   *:3306              *:*  

//更改密码
[root@192 ~]# mysql -uroot -p'kowTN:upQ1_-'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.38

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set password = password('1');
Query OK, 0 rows affected, 1 warning (0.00 sec)


mysql配置文件

`mysql`的配置文件为`/etc/my.cnf

/etc/my.cnf --> /etc/mysql/my.cnf --> --default-extra-file=/PATH/TO/CONF_FILE --> ~/.my.cnf

mysql常用配置文件参数:

port = 3306 设置监听端口
socket = /tmp/mysql.sock 指定套接字文件位置
basedir = /usr/local/mysql 指定MySQL的安装路径
datadir = /data/mysql 指定MySQL的数据存放路径
pid-file = /data/mysql/mysql.pid 指定进程ID文件存放路径
user = mysql 指定MySQL以什么用户的身份提供服务
skip-name-resolve 禁止MySQL对外部连接进行DNS解析 使用这一选项可以消除MySQL进行DNS解析的时间。 若开启该选项,则所有远程主机连接授权都要使用IP地址方 式否则MySQL将无法正常处理连接请求

数据库免密登录

[root@192 ~]# vi .my.cnf

[client]
user=root
password=ray123!
[root@192 ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.38 MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

数据库密码破解

[root@192 ~]# vi /etc/my.cnf
skip-grant-tables //加入这行
root@192 ~]# service mysqld restart //重启mysql服务
Shutting down MySQL.... SUCCESS! 
Starting MySQL. SUCCESS! 
//修改密码
[root@192 ~]# mysql -e " update mysql.user set authentication_string=password('123456') where user = 'root' and host = 'localhost'; "
[root@192 ~]# vi /etc/my.cnf
skip-grant-tables  //删除添加的这一行
[root@192 ~]# service mysqld restart //重启服务
Shutting down MySQL.... SUCCESS! 
Starting MySQL. SUCCESS!  
[root@192 ~]# mysql -uroot -p123456  //用新密码登录
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.38 MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

多表联合查询

什么是多表联查

前面所讲的查询语句都是针对一个表的,但是在关系型数据库中,表与表之间是有联系的,所以在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表。 在 MySQL 中,多表查询主要有交叉连接、内连接、外连接、分组查询与子查询等5种。

交叉连接(CROSS JOIN)

笛卡尔积

交叉连接(CROSS JOIN):有两种,显式的和隐式的2种,一般用来返回连接表的笛卡尔积。 笛卡尔积(Cartesian product)是指两个集合 X 和 Y 的乘积。 例如,有 A 和 B 两个集合,它们的值如下:

A = {1,2}
B = {3,4,5}

集合 A×B 和 B×A 的结果集分别表示为:

A×B={(1,3), (1,4), (1,5), (2,3), (2,4), (2,5) };
B×A={(3,1), (3,2), (4,1), (4,2), (5,1), (5,2) };

以上 A×B 和 B×A 的结果就叫做两个集合的笛卡尔积。

并且,从以上结果我们可以看出:

  • 两个集合相乘,不满足交换率,即 A×B≠B×A。
  • A 集合和 B 集合的笛卡尔积是 A 集合的元素个数 × B 集合的元素个数。

多表查询遵循的算法就是以上提到的笛卡尔积,表与表之间的连接可以看成是在做乘法运算。在实际应用中,应避免使用笛卡尔积,因为笛卡尔积中容易存在大量的不合理数据,简单来说就是容易导致查询结果重复、混乱。

格式
SELECT <字段名> FROM <表1> CROSS JOIN <表2> [WHERE子句];

或者

SELECT <字段名> FROM <表1>, <表2> [WHERE子句];

语法说明如下:

  • 字段名:需要查询的字段名称。

  • <表1><表2>:需要交叉连接的表名。

  • WHERE 子句:用来设置交叉连接的查询条件。

**注意:**多个表交叉连接时,在 FROM 后连续使用 CROSS JOIN 或,即可。以上两种语法的返回结果是相 同的,但是第一种语法才是官方建议的标准写法。

当连接的表之间没有关系时,我们会省略掉 WHERE 子句,这时返回结果就是两个表的笛卡尔积,返回 结果数量就是两个表的数据行相乘。需要注意的是,如果每个表有 1000 行,那么返回结果的数量就有 1000×1000 = 1000000 行,数据量是非常巨大的。

内连接

内连接(INNER JOIN)主要通过设置连接条件的方式,来移除查询结果中某些数据行的交叉连接。简单 来说,就是利用条件表达式来消除交叉连接的某些数据行。

内连接使用 INNER JOIN 关键字连接两张表,并使用 ON 子句来设置连接条件。如果没有连接条件, INNER JOIN 和 CROSS JOIN 在语法上是等同的,两者可以互换。

内连接的语法格式如下:

SELECT <字段名> FROM <表1> INNER JOIN <表2> [ON子句];

语法说明如下:

  • 字段名:需要查询的字段名称。
  • <表1><表2>:需要内连接的表名。
  • INNER JOIN :内连接中可以省略 INNER 关键字,只用关键字 JOIN。
  • ON 子句:用来设置内连接的连接条件。

INNER JOIN 也可以使用 WHERE 子句指定连接条件,但是 INNER JOIN … ON 语法是官方的标准写法, 而且 WHERE 子句在某些时候会影响查询的性能。

多个表内连接时,在 FROM 后连续使用 INNER JOIN 或 JOIN 即可。

内连接可以查询两个或两个以上的表。

**注意:**当对多个表进行查询时,要在 SELECT 语句后面指定字段是来源于哪一张表。因此,在多表查询 时,SELECT 语句后面的写法是表名.列名。另外,如果表名非常长的话,也可以给表设置别名,这样就 可以直接在 SELECT 语句后面写上表的别名.列名。

内连接的查询结果都是符合连接条件的记录,而外连接会先将连接的表分为基表和参考表,再以基表为 依据返回满足和不满足条件的记录。

外连接可以分为左外连接和右外连接2种,下面根据实例分别介绍左外连接和右外连接。

左外连接又称为左连接,使用 LEFT OUTER JOIN 关键字连接两个表,并使用 ON 子句来设置连接条 件。

SELECT <字段名> FROM <表1> LEFT OUTER JOIN <表2> <ON子句>;

  • 字段名:需要查询的字段名称。
  • <表1><表2>:需要左连接的表名。
  • LEFT OUTER JOIN:左连接中可以省略 OUTER 关键字,只使用关键字 LEFT JOIN。
  • ON 子句:用来设置左连接的连接条件,不能省略。

上述语法中,"表1"为基表,"表2"为参考表。左连接查询时,可以查询出"表1"中的所有记录和"表2"中 匹配连接条件的记录。如果"表1"的某行在"表2"中没有匹配行,那么在返回结果中,"表2"的字段值均为 空值(NULL)。

右外连接又称为右连接,右连接是左连接的反向连接。使用 RIGHT OUTER JOIN 关键字连接两个表,并 使用 ON 子句来设置连接条件。

右连接的语法格式如下:
SELECT <字段名> FROM <表1> RIGHT OUTER JOIN <表2> <ON子句>;

语法说明如下:

  • 字段名:需要查询的字段名称。
  • <表1><表2>:需要右连接的表名。
  • RIGHT OUTER JOIN:右连接中可以省略 OUTER 关键字,只使用关键字 RIGHT JOIN。
  • ON 子句:用来设置右连接的连接条件,不能省略。

与左连接相反,右连接以"表2"为基表,"表1"为参考表。右连接查询时,可以查询出"表2"中的所有记录 和"表1"中匹配连接条件的记录。如果"表2"的某行在"表1"中没有匹配行,那么在返回结果中,"表1"的 字段值均为空值(NULL)。

标签: 53s光纤传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台