mysql - 1

构建MySQL服务器

步骤一//安装提供服务和命令软件

[root@mysql50 ~]# yum -y install mysql-server mysql

软件已安装

[root@mysql50 ~]# rpm -q mysql-server mysql

mysql-server-8.0.26-1.module+el8.4.0+652+6de068a7.x86_64

mysql-8.0.26-1.module+el8.4.0+652+6de068a7.x86_64

[root@mysql50 ~]#

//查看软件信息

[root@mysql50 ~]# rpm -qi mysql-server

Name : mysql-server

Version : 8.0.26

Release : 1.module+el8.4.0+652+6de068a7

Architecture: x86_64

Install Date: 2023年03月13日 星期一 12时09分38秒

Group : Unspecified

Size : 126674945

License : GPLv2 with exceptions and LGPLv2 and BSD

Signature : RSA/SHA256, 2021年09月22日 星期三 07时27分14秒, Key ID 15af5dac6d745a60

Source RPM : mysql-8.0.26-1.module+el8.4.0+652+6de068a7.src.rpm

Build Date : 2021年09月22日 星期三 07时06分32秒

Build Host : ord1-prod-x86build005.svc.aws.rockylinux.org

Relocations : (not relocatable)

Packager : infrastructure@rockylinux.org

Vendor : Rocky

URL : http://www.mysql.com

Summary : The MySQL server and related files

Description :

MySQL is a multi-user, multi-threaded SQL database server. MySQL is a

client/server implementation consisting of a server daemon (mysqld)

and many different client programs and libraries. This package contains

the MySQL server and some accompanying files and directories.

[root@mysql50 ~]# systemctl start mysqld //启动服务

[root@mysql50 ~]# systemctl enable mysqld //开机运行

步骤二:查看端口号和进程名

命令操作如下所示:

[root@mysql50 ~]# ps -C mysqld //仅查看mysqld进程

PID TTY TIME CMD

21912 ? 00:00:00 mysqld

[root@mysql50 ~]#

[root@mysql50 ~]# ss -utnlp | grep 3306 查看端口

tcp LISTEN 0 70 *:33060 *:* users:(("mysqld",pid=21912,fd=22))

tcp LISTEN 0 128 *:3306 *:* users:(("mysqld",pid=21912,fd=25))

[root@mysql50 ~]#

[root@mysql50 ~]# netstat -utnlp | grep mysqld //仅查看mysqld进程

tcp6 0 0 :::33060 :::* LISTEN 21912/mysqld

tcp6 0 0 :::3306 :::* LISTEN 21912/mysqld

说明:

MySQL 8中的3306端口是MySQL服务默认使用的端口,主要用于建立客户端与MySQL服务器之间的连接。

MySQL 8中的33060端口是MySQL Shell默认使用的管理端口,主要用于执行各种数据库管理任务。远程管理MySQL服务器:使用MySQL Shell连接到MySQL服务,并在远程管理控制台上执行各种数据库管理操作,例如创建、删除、备份和恢复数据库等。

[root@mysql50 ~]#

步骤三:连接服务。

说明: 数据库管理员本机登陆默认没有密码

命令操作如下所示:

[root@mysql50 ~]# mysql //连接服务

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 8

Server version: 8.0.26 Source distribution

Copyright (c) 2000, 2021, 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> exit //断开连接

Bye

[root@mysql50 ~]#

练习必备命令的使用(在mysql50主机完成练习)

命令操作如下所示:

[root@mysql50 ~]# mysql //连接服务

mysql> select version() ; //查看数据库软件版本

+-----------+

| version() |

+-----------+

| 8.0.26 |

+-----------+

1 row in set (0.00 sec)

mysql> select user() ; //查看登陆的用户和客户端地址

+----------------+

| user() |

+----------------+

| root@localhost | 管理员root本机登陆

+----------------+

1 row in set (0.00 sec)

mysql> show databases; //查看已有的库

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

+--------------------+

4 rows in set (0.00 sec)

mysql>

说明:

默认4个库 不可以删除,存储的是 服务运行时加载的不同功能的程序和数据。

information_schema:是MySQL数据库提供的一个虚拟的数据库,存储了MySQL数据库中的相关信息,比如数据库、表、列、索引、权限、角色等信息。它并不存储实际的数据,而是提供了一些视图和存储过程,用于查询和管理数据库的元数据信息。

mysql:存储了MySQL服务器的系统配置、用户、账号和权限信息等。它是MySQL数据库最基本的库,存储了MySQL服务器的核心信息。

performance_schema:存储了MySQL数据库的性能指标、事件和统计信息等数据,可以用于性能分析和优化。

sys:是MySQL 8.0引入的一个新库,它基于information_schema和performance_schema视图,提供了更方便、更直观的方式来查询和管理MySQL数据库的元数据和性能数据。

mysql> select database(); //查看当前在那个库里 null 表示没有在任何库里

+------------+

| database() |

+------------+

| NULL |

+------------+

1 row in set (0.00 sec)

mysql> use mysql ; //切换到mysql库

mysql> select database(); // 再次显示所在的库

+------------+

| database() |

+------------+

| mysql |

+------------+

1 row in set (0.00 sec)

mysql> show tables; //显示库里已有的表

+------------------------------------------------------+

| Tables_in_mysql |

+------------------------------------------------------+

| columns_priv |

| component |

| db |

| default_roles |

| engine_cost |

| func |

| general_log |

| global_grants |

| gtid_executed |

| help_category |

| help_keyword |

| help_relation |

| help_topic |

| innodb_index_stats |

| innodb_table_stats |

| password_history |

| plugin |

| procs_priv |

| proxies_priv |

| replication_asynchronous_connection_failover |

| replication_asynchronous_connection_failover_managed |

| replication_group_configuration_version |

| replication_group_member_actions |

| role_edges |

| server_cost |

| servers |

| slave_master_info |

| slave_relay_log_info |

| slave_worker_info |

| slow_log |

| tables_priv |

| time_zone |

| time_zone_leap_second |

| time_zone_name |

| time_zone_transition |

| time_zone_transition_type |

| user |

+------------------------------------------------------+

37 rows in set (0.00 sec)

mysql> exit ; 断开连接

Bye

[root@mysql50 ~]#

密码管理

 在192.168.88.50主机做如下练习:

  1. 设置root密码为tarena

  2. 修改root密码为123qqq…A

  3. 破解root密码为NSD2024…a

步骤一:设置root密码为tarena

设置连接密码

[root@mysql50 ~]# mysqladmin -uroot -p password "tarena"

Enter password:   密码   //敲回车

mysqladmin: [Warning] Using a password on the command line interface can be insecure.

Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

无密码连接被拒绝

[root@mysql50 ~]# mysql

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

连接时输入密码

[root@mysql50 ~]# mysql -uroot –ptarena

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 14

Server version: 8.0.26 Source distribution

Copyright (c) 2000, 2021, 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密码为123qqq…A

修改密码

[root@mysql50 ~]# mysqladmin -uroot -ptarena password "123qqq...A"

mysqladmin: [Warning] Using a password on the command line interface can be insecure.

Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.

旧密码无法登陆

[root@mysql50 ~]# mysql -uroot –ptarena

mysql: [Warning] Using a password on the command line interface can be insecure.

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

新密码登陆

[root@mysql50 ~]# mysql -uroot -p123qqq...A

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 18

Server version: 8.0.26 Source distribution

Copyright (c) 2000, 2021, 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密码为NSD2024…a

说明:在mysql50主机做此练习

修改主配置文件

[root@mysql50 ~]# vim /etc/my.cnf.d/mysql-server.cnf

[mysqld]

skip-grant-tables //手动添加此行 作用登陆时不验证密码

……

……

:wq

[root@mysql50 ~]# systemctl restart mysqld //重启服务 作用让服务以新配置运行

连接服务

[root@mysql50 ~]# mysql

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 7

Server version: 8.0.26 Source distribution

Copyright (c) 2000, 2021, 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> desc mysql.user ;

删除不知道的密码

mysql> update mysql.user set authentication_string="" where user="root" and host="localhost";

删除后的效果

mysql> select host , user , authentication_string from mysql.user where user="root";

+-----------+------+-------------------------------------------+

| host | user | authentication_string |

+-----------+------+-------------------------------------------+

| localhost | root |                                          |

+-----------+------+-------------------------------------------+

1 row in set (0.01 sec)

mysql> exit; 断开连接

编辑配置文件

[root@mysql50 ~]# vim /etc/my.cnf.d/mysql-server.cnf

[mysqld]

#skip-grant-tables //注释添加的行

:wq

[root@mysql50 ~]# systemctl restart mysqld //重启服务 作用让注释生效

无密码登陆

[root@localhost ~]# mysql

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 8

Server version: 8.0.26 Source distribution

Copyright (c) 2000, 2021, 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.

设置root用户本机登陆密码

mysql> alter user root@"localhost" identified by "NSD2024...a";

Query OK, 0 rows affected (0.00 sec)

mysql> exit 断开连接

不输密码无法登陆

[root@localhost ~]# mysql

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

使用破解的密码登陆

[root@localhost ~]# mysql -uroot -pNSD2024...a

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 10

Server version: 8.0.26 Source distribution

Copyright (c) 2000, 2021, 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> 登陆成功

mysql> show databases; 查看已有的库

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

+--------------------+

4 rows in set (0.01 sec)

筛选条件

 问题

  1. 准备练习环境

  2. 练习数值比较

  3. 练习范围匹配

  4. 练习模糊匹配

  5. 练习正则匹配

  6. 练习逻辑比较

  7. 练习字符比较/空/非空

  8. 练习别名/去重/合并

步骤一:准备练习环境

//拷贝tarena.sql 拷贝到 mysql50主机的/root 下  //自行准备

[openeuler@server1 ~]$ scp /linux-soft/s3/tarena.sql root@192.168.88.50:/root/

root@192.168.88.50's password:

tarena.sql 100% 284KB 171.9MB/s 00:00

[root@mysql50 ~]# mysql -uroot -pNSD2024...a < /root/tarena.sql

mysql: [Warning] Using a password on the command line interface can be insecure.

//连接服务

[root@mysql50 ~]# mysql -uroot -pNSD2024...a

mysql> show databases; //查看库

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

| tarena | 恢复的库

+--------------------+

5 rows in set (0.00 sec)

mysql> use tarena; //进入库

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> show tables; //查看表

+------------------+

| Tables_in_tarena |

+------------------+

| departments | 部门表

| employees | 员工表

| salary | 工资表

| user | 用户表

+------------------+

4 rows in set (0.00 sec)

使用user 表做查询练习

user表里存储的是 系统用户信息( 就是 /etc/passwd 文件的内容)

mysql> desc tarena.user; //查看表头

+----------+-------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+----------+-------------+------+-----+---------+----------------+

| id | int(11) | NO | PRI | NULL | auto_increment |行号

| name | char(20) | YES | | NULL | |用户名

| password | char(1) | YES | | NULL | |密码占位符

| uid | int(11) | YES | | NULL | | uid号

| gid | int(11) | YES | | NULL | | gid号

| comment | varchar(50) | YES | | NULL | | 描述信息

| homedir | varchar(80) | YES | | NULL | | 家目录

| shell | char(30) | YES | | NULL | | 解释器

+----------+-------------+------+-----+---------+----------------+

8 rows in set (0.00 sec)

select命令格式演示

语法格式1 SELECT 字段列表 FROM 库名.表名;

语法格式2 SELECT 字段列表 FROM 库名.表名 where 筛选条件;

mysql> select name from tarena.user;        //查看name一个表头

mysql> select name ,uid from tarena.user;    //查看name,uid多个表头

mysql> select * from tarena.user;        //查看所有表头

加筛选条件

mysql> select * from tarena.user where name = “root”;        //查找root用户信息

+----+------+----------+------+------+---------+---------+-----------+

| id | name | password | uid | gid | comment | homedir | shell |

+----+------+----------+------+------+---------+---------+-----------+

| 1 | root | x | 0 | 0 | root | /root | /bin/bash |

+----+------+----------+------+------+---------+---------+-----------+

1 row in set (0.00 sec)

mysql>

mysql> select * from tarena.user where id = 2 ;        //查找第2行用户信息

+----+------+----------+------+------+---------+---------+--------------+

| id | name | password | uid | gid | comment | homedir | shell |

+----+------+----------+------+------+---------+---------+--------------+

| 2 | bin | x | 1 | 1 | bin | /bin | /sbin/nologin |

+----+------+----------+------+------+---------+---------+--------------+

1 row in set (0.00 sec)

步骤二:练习数值比较

比较符号:

=  !=  >  >=  <  <=

相等 不相等 大于 大于等于 小于 小于等于

符号两边要是数字或数值类型的表头 符号左边与符号右边做比较

//查看第3行的行号、用户名、uid、gid 四个表头的值

mysql> select id,name,uid,gid from tarena.user where id = 3;

+----+--------+------+------+

| id | name | uid | gid |

+----+--------+------+------+

| 3 | daemon | 2 | 2 |

+----+--------+------+------+

1 row in set (0.00 sec)

//查看前2行的行号用户名、uid、gid 四个表头的值

mysql> select id,name,uid,gid from tarena.user where id < 3;

+----+------+------+------+

| id | name | uid | gid |

+----+------+------+------+

| 1 | root | 0 | 0 |

| 2 | bin | 1 | 1 |

+----+------+------+------+

2 rows in set (0.00 sec)

//查看前3行的行号、用户名、uid、gid 四个表头的值

mysql> select id,name,uid,gid from tarena.user where id <= 3;

+----+--------+------+------+

| id | name | uid | gid |

+----+--------+------+------+

| 1 | root | 0 | 0 |

| 2 | bin | 1 | 1 |

| 3 | daemon | 2 | 2 |

+----+--------+------+------+

3 rows in set (0.00 sec)

//查看前uid号大于6000的行号、用户名、uid、gid 四个表头的值

mysql> select id,name,uid,gid from tarena.user where uid > 6000;

+----+-----------+-------+-------+

| id | name | uid | gid |

+----+-----------+-------+-------+

| 22 | nfsnobody | 65534 | 65534 |

+----+-----------+-------+-------+

1 row in set (0.00 sec)

//查看前uid号大于等于1000的行号、用户名、uid、gid 四个表头的值

mysql> select id,name,uid,gid from tarena.user where uid >= 1000;

+----+-----------+-------+-------+

| id | name | uid | gid |

+----+-----------+-------+-------+

| 22 | nfsnobody | 65534 | 65534 |

| 24 | plj | 1000 | 1000 |

+----+-----------+-------+-------+

2 rows in set (0.00 sec)

//查看uid号和gid号相同的行 仅显示行号、用户名、uid、gid 四个表头的值

mysql> select id,name,uid,gid from tarena.user where uid = gid;

+----+-----------------+-------+-------+

| id | name | uid | gid |

+----+-----------------+-------+-------+

| 1 | root | 0 | 0 |

| 2 | bin | 1 | 1 |

| 3 | daemon | 2 | 2 |

| 13 | nobody | 99 | 99 |

| 14 | systemd-network | 192 | 192 |

| 15 | dbus | 81 | 81 |

| 17 | sshd | 74 | 74 |

| 18 | postfix | 89 | 89 |

| 20 | rpc | 32 | 32 |

| 21 | rpcuser | 29 | 29 |

| 22 | nfsnobody | 65534 | 65534 |

| 23 | haproxy | 188 | 188 |

| 24 | plj | 1000 | 1000 |

| 25 | apache | 48 | 48 |

| 26 | mysql | 27 | 27 |

+----+-----------------+-------+-------+

15 rows in set (0.00 sec)

//查看uid号和gid号不一样的行 仅显示行号、用户名、uid、gid 四个表头的值

mysql> select id,name,uid,gid from tarena.user where uid != gid;

+----+----------+------+------+

| id | name | uid | gid |

+----+----------+------+------+

| 4 | adm | 3 | 4 |

| 5 | lp | 4 | 7 |

| 6 | sync | 5 | 0 |

| 7 | shutdown | 6 | 0 |

| 8 | halt | 7 | 0 |

| 9 | mail | 8 | 12 |

| 10 | operator | 11 | 0 |

| 11 | games | 12 | 100 |

| 12 | ftp | 14 | 50 |

| 16 | polkitd | 999 | 998 |

| 19 | chrony | 998 | 996 |

+----+----------+------+------+

11 rows in set (0.00 sec)

mysql>

练习字符比较:符号两边必须是字符 或字符类型的表头

= 相等比较

!= 不相等比较。

查看表里是否有名字叫apache的用户

mysql> select name from tarena.user where name="apache" ;

+--------+

| name |

+--------+

| apache |

+--------+

1 row in set (0.00 sec)

输出解释器不是/bin/bash的用户名 及使用的解释器

mysql> select name , shell from tarena.user where shell != "/bin/bash";

+-----------------+----------------+

| name | shell |

+-----------------+----------------+

| bin | /sbin/nologin |

| daemon | /sbin/nologin |

| adm | /sbin/nologin |

| lp | /sbin/nologin |

| sync | /bin/sync |

| shutdown | /sbin/shutdown |

| halt | /sbin/halt |

| mail | /sbin/nologin |

| operator | /sbin/nologin |

| games | /sbin/nologin |

| ftp | /sbin/nologin |

| nobody | /sbin/nologin |

| systemd-network | /sbin/nologin |

| dbus | /sbin/nologin |

| polkitd | /sbin/nologin |

| sshd | /sbin/nologin |

| postfix | /sbin/nologin |

| chrony | /sbin/nologin |

| rpc | /sbin/nologin |

| rpcuser | /sbin/nologin |

| nfsnobody | /sbin/nologin |

| haproxy | /sbin/nologin |

| apache | /sbin/nologin |

| mysql | /bin/false |

+-----------------+----------------+

24 rows in set (0.00 sec)

mysql>

步骤三:练习范围匹配

in (值列表) //在…里

not in (值列表) //不在…里

between 数字1 and 数字2 //在…之间

命令操作如下所示:

//uid号表头的值 是 (1 , 3 , 5 , 7) 中的任意一个即可

mysql> select name , uid from tarena.user where uid in (1 , 3 , 5 , 7);

+------+------+

| name | uid |

+------+------+

| bin | 1 |

| adm | 3 |

| sync | 5 |

| halt | 7 |

+------+------+

//shell 表头的的值 不是 "/bin/bash"或"/sbin/nologin" 即可

mysql> select name , shell from tarena.user where shell not in ("/bin/bash","/sbin/nologin");

+----------+----------------+

| name | shell |

+----------+----------------+

| sync | /bin/sync |

| shutdown | /sbin/shutdown |

| halt | /sbin/halt |

| mysql | /bin/false |

+----------+----------------+

//id表头的值 在 10 到 20 之间即可 包括 10 和 20 本身

mysql> select id , name , uid from tarena.user where id between 10 and 20 ;

+----+-----------------+------+

| id | name | uid |

+----+-----------------+------+

| 10 | operator | 11 |

| 11 | games | 12 |

| 12 | ftp | 14 |

| 13 | nobody | 99 |

| 14 | systemd-network | 192 |

| 15 | dbus | 81 |

| 16 | polkitd | 999 |

| 17 | sshd | 74 |

| 18 | postfix | 89 |

| 19 | chrony | 998 |

| 20 | rpc | 32 |

+----+-----------------+------+

11 rows in set (0.00 sec)mysql>

步骤四:练习模糊匹配

where 字段名 like "表达式";

通配符

  1. _ 表示 1个字符
  2. % 表示零个或多个字符

命令操作如下所示:

//找名字必须是3个字符的 (没有空格挨着敲)

mysql> select name from tarena.user where name like "___";

+------+

| name |

+------+

| bin |

| adm |

| ftp |

| rpc |

| plj |

| bob |

+------+

6 rows in set (0.00 sec)

//找名字必须是4个字符的(没有空格挨着敲)

mysql> select name from tarena.user where name like "_ _ _ _";

+------+

| name |

+------+

| root |

| sync |

| halt |

| mail |

| dbus |

| sshd |

| null |

+------+

7 rows in set (0.00 sec)

//找名字以字母a开头的(没有空格挨着敲)

mysql> select name from tarena.user where name like "a%";

//查找名字至少是4个字符的表达式

mysql> select name from tarena.user where name like "%_ _ _ _%";(没有空格挨着敲)

mysql> select name from tarena.user where name like "_ _%_ _";(没有空格挨着敲)

mysql> select name from tarena.user where name like "_ _ _ _%";(没有空格挨着敲)

步骤五:练习正则匹配

格式:select 字段名列表 from 库名.表名 where字段名 regexp '正则表达式';

回顾shell课程学过的元字符(正则符号)

  1. ^ 匹配行首
  2. $ 匹配行尾
  3. [] 匹配范围内任意一个
  4. * 前边的表达式出现零次或多次
  5. | 或者
  6. . 任意一个字符

命令操作如下所示:

//添加有数字的名字

insert into tarena.user(name)values("yaya9");

insert into tarena.user(name)values("6yaya");

insert into tarena.user(name)values("ya7ya");

insert into tarena.user(name)values("yay8a");

//查看名字里有数字的

mysql> select name from tarena.user where name regexp "[0-9]";

+-------+

| name |

+-------+

| yaya9 |

| 6yaya |

| ya7ya |

| yay8a |

+-------+

4 rows in set (0.00 sec)

//查看名字以数字开头

mysql> select name from tarena.user where name regexp "^[0-9]";

+-------+

| name |

+-------+

| 6yaya |

+-------+

1 row in set (0.00 sec)

//查看名字以数字结尾

mysql> select name from tarena.user where name regexp "[0-9]$";

+-------+

| name |

+-------+

| yaya9 |

+-------+

1 row in set (0.00 sec)

mysql>

//查看名字以r开头

mysql> select name from tarena.user where name regexp "^r";

+---------+

| name |

+---------+

| root |

| rpc |

| rpcuser |

+---------+

3 rows in set (0.00 sec)

//查看名字以t结尾

mysql> select name from tarena.user where name regexp "t$";

+------+

| name |

+------+

| root |

| halt |

+------+

2 rows in set (0.00 sec)

mysql>

//查看名字以r开头或t结尾

mysql> select name from tarena.user where name regexp "^r|t$";

+---------+

| name |

+---------+

| root |

| halt |

| rpc |

| rpcuser |

+---------+

4 rows in set (0.00 sec)

//名字r开头t结尾

mysql> select name from tarena.user where name regexp "^r.*t$";

+------+

| name |

+------+

| root |

+------+

1 row in set (0.00 sec)

mysql>

步骤六:练习逻辑比较

多个判断条件

  1. 逻辑与 and (&&) 多个判断条件必须同时成立
  2. 逻辑或 or (||) 多个判断条件其中某个条件成立即可
  3. 逻辑非 not (!) 取反

命令操作如下所示:

//逻辑非例子,查看解释器不是/bin/bash 的

mysql> select name,shell from tarena.user where shell != "/bin/bash";

//not 也是取反 要放在表达式的前边

mysql> select name,shell from tarena.user where not shell = "/bin/bash";

//id值不在 10 到 20 之间

mysql> select id , name from tarena.user where not id between 10 and 20 ;

//逻辑与 例子

mysql> select name , uid from tarena.user where name="root" and uid = 1;

Empty set (0.00 sec)

mysql> select name , uid from tarena.user where name="root" and uid = 0;

+------+------+

| name | uid |

+------+------+

| root | 0 |

+------+------+

1 row in set (0.00 sec)

//逻辑或 例子

mysql> select name , uid from tarena.user where name = "root" or name = "bin" or uid = 1;

+------+------+

| name | uid |

+------+------+

| root | 0 |

| bin | 1 |

+------+------+

mysql>

() 提高优先级

mysql> select 2 + 3 * 5 ; //使用默认计算顺序 先乘除后加减

+------------+

| 2 + 3 * 5 |

+------------+

| 17 |

+------------+

1 row in set (0.00 sec)

mysql> select (2 + 3 ) * 5 ; //先加法再乘法

+---------------+

| (2 + 3 ) * 5 |

+---------------+

| 25 |

+---------------+

1 row in set (0.00 sec)

mysql>

  1. 逻辑匹配什么时候需要加()
  2. 逻辑与and 优先级高于逻辑或 or
  3. 如果在筛选条件里既有and 又有 or 默认先判断and 再判断or

//没加() 的查询结果

select name , uid from tarena.user

where name = "root" or name = "bin" and uid = 1 ;

+------+------+

| name | uid |

+------+------+

| root | 0 |

| bin | 1 |

+------+------+

2 rows in set (0.00 sec)

//加()的查询结果

select name , uid from tarena.user

where (name = "root" or name = "bin") and uid = 1 ;

+------+------+

| name | uid |

+------+------+

| bin | 1 |

+------+------+

1 row in set (0.00 sec)

mysql>

步骤七:练习空/非空

  1. 空 is null 表头下没有数据
  2. 非空 is not null 表头下有数据

mysql服务 使用关键字 null 或 NULL 表示表头没有数据

添加新行, 仅给行中的id 表头和name表头赋值

mysql> insert into tarena.user(id,name) values(71,""); //零个字符

mysql> insert into tarena.user(id,name) values(72,"null");//普通字母

mysql> insert into tarena.user(id,name) values(73,NULL); //表示空

mysql> insert into tarena.user(id,name) values(74,null); //表示空

查看id表头值大于等于70 的行 仅显示行中 id表头 和 name 表头的值

mysql> select id , name from tarena.user where id >= 71;

+----+------+

| id | name |

+----+------+

| 71 | |

| 72 | null |

| 73 | NULL |

| 74 | NULL |

+----+------+

查看name 表头没有数据的行 仅显示行中id表头 和 naeme 表头的值

mysql> select id , name from tarena.user where name is null;

+----+------+

| id | name |

+----+------+

| 28 | NULL |

| 29 | NULL |

| 73 | NULL |

| 74 | NULL |

+----+------+

查看name 表头是0个字符的行, 仅显示行中id表头 和 naeme 表头的值

mysql> select id , name from tarena.user where name="";

+----+------+

| id | name |

+----+------+

| 71 | |

+----+------+

1 row in set (0.00 sec)

查看name 表头值是null的行, 仅显示行中id表头 和 naeme 表头的值

mysql> select id , name from tarena.user where name="null";

+----+------+

| id | name |

+----+------+

| 72 | null |

+----+------+

1 row in set (0.00 sec)

查看name 表头有数据的行, 仅显示行中id表头 和 name 表头的值

mysql> select id , name from tarena.user where name is not null;

+----+-----------------+

| id | name |

+----+-----------------+

| 1 | root |

| 2 | bin |

| 3 | daemon |

| 4 | adm |

| 5 | lp |

....

....

| 27 | bob |

| 71 | |

| 72 | null |

+----+-----------------+

步骤八:练习别名/去重/合并

定义别名使用 as 或 空格

mysql> select name , homedir from tarena.user;

mysql> select name as 用户名 , homedir 家目录 from tarena.user;

拼接 concat()

mysql> select concat(name,"-",uid) as 用户信息 from tarena.user where uid <= 5;

+--------------+

| 用户信息 |

+--------------+

| root-0 |

| bin-1 |

| daemon-2 |

| adm-3 |

| lp-4 |

| sync-5 |

+--------------+

6 rows in set (0.00 sec)

//拼接

mysql> select concat(name , "-" , uid) as 用户信息 from tarena.user where uid <= 5;

多列拼接

mysql> select concat(name , "-" , uid , "-" , gid) as 用户信息 from tarena.user where uid <= 5;

+--------------+

| 用户信息 |

+--------------+

| root-0-0 |

| bin-1-1 |

| daemon-2-2 |

| adm-3-4 |

| lp-4-7 |

| sync-5-0 |

+--------------+

去重显示 distinct 字段名列表

//去重前输出

mysql> select shell from tarena.user where shell in ("/bin/bash","/sbin/nologin") ;

+---------------+

| shell |

+---------------+

| /bin/bash |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /sbin/nologin |

| /bin/bash |

| /sbin/nologin |

+---------------+

22 rows in set (0.00 sec)

//去重后查看

mysql> select distinct shell from tarena.user where shell in ("/bin/bash","/sbin/nologin") ;

+---------------+

| shell |

+---------------+

| /bin/bash |

| /sbin/nologin |

+---------------+

2 rows in set (0.01 sec)

mysql>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值