mysql进阶
mysql进阶目录
[*]mysql进阶
[*]1.二进制格式mysql安装
[*]2.mysql配置文件
[*]2.1 数据库密码破解
[*]3.多表联合查询
[*]3.1 什么是多表联合查询
[*]3.2 交叉连接(CROSS JOIN)
[*]3.2.1 笛卡尔积
[*]3.2.2 交叉连接
1.二进制格式mysql安装
下载二进制格式的mysql软件包
# cd /usr/src/
# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
--2022-07-27 15:52:00--https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz
Resolving cdn.mysql.com (cdn.mysql.com)... 23.33.16.230
Connecting to cdn.mysql.com (cdn.mysql.com)|23.33.16.230|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 674830866 (644M)
Saving to: 'mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz'
mysql-5.7.38-linux- 100%[=================>] 643.57M1.43MB/s in 4m 25s
2022-07-27 15:56:27 (2.42 MB/s) - 'mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz' saved 创建用户和组
# useradd -M -r -s /sbin/nologin mysql
# id mysql
uid=995(mysql) gid=992(mysql) groups=992(mysql)解压软件到/usr/local/
# tar xf mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
# ls /usr/local/
bingames lib libexec sbin src
etcincludelib64mysql-5.7.38-linux-glibc2.12-x86_64share
# cd /usr/local/
# ln -sv mysql-5.7.38-linux-glibc2.12-x86_64 mysql
'mysql' -> 'mysql-5.7.38-linux-glibc2.12-x86_64'
# ll
total 0
drwxr-xr-x. 2 root root 6 Jun 222021 bin
drwxr-xr-x. 2 root root 6 Jun 222021 etc
drwxr-xr-x. 2 root root 6 Jun 222021 games
drwxr-xr-x. 2 root root 6 Jun 222021 include
drwxr-xr-x. 2 root root 6 Jun 222021 lib
drwxr-xr-x. 3 root root17 Jul 12 21:45 lib64
drwxr-xr-x. 2 root root 6 Jun 222021 libexec
lrwxrwxrwx. 1 root root35 Jul 27 16:06 mysql -> mysql-5.7.38-linux-glibc2.12-x86_64
drwxr-xr-x. 9 root root 129 Jul 27 16:04 mysql-5.7.38-linux-glibc2.12-x86_64
drwxr-xr-x. 2 root root 6 Jun 222021 sbin
drwxr-xr-x. 5 root root49 Jul 12 21:45 share
drwxr-xr-x. 2 root root 6 Jun 222021 src修改目录/usr/local/mysql的属主属组
# chown -R mysql.mysql mysql*
# ll
total 0
drwxr-xr-x. 2 rootroot 6 Jun 222021 bin
drwxr-xr-x. 2 rootroot 6 Jun 222021 etc
drwxr-xr-x. 2 rootroot 6 Jun 222021 games
drwxr-xr-x. 2 rootroot 6 Jun 222021 include
drwxr-xr-x. 2 rootroot 6 Jun 222021 lib
drwxr-xr-x. 3 rootroot 17 Jul 12 21:45 lib64
drwxr-xr-x. 2 rootroot 6 Jun 222021 libexec
lrwxrwxrwx. 1 mysql mysql35 Jul 27 16:06 mysql -> mysql-5.7.38-linux-glibc2.12-x86_64
drwxr-xr-x. 9 mysql mysql 129 Jul 27 16:04 mysql-5.7.38-linux-glibc2.12-x86_64
drwxr-xr-x. 2 rootroot 6 Jun 222021 sbin
drwxr-xr-x. 5 rootroot 49 Jul 12 21:45 share
drwxr-xr-x. 2 rootroot 6 Jun 222021 src添加环境变量
# cd /usr/local/mysql
# ls
LICENSEREADMEbindocsincludelibmansharesupport-files
# cd bin/
# pwd
/usr/local/mysql/bin
# cd /usr/local/mysql
# ls
LICENSEREADMEbindocsincludelibmansharesupport-files
# cd bin/
# pwd
/usr/local/mysql/bin
# echo 'export PATH=$PATH:/usr/local/mysql/bin' > /etc/profile.d/mysql.sh
# source /etc/profile.d/mysql.sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin创建头文件
# cd ..
# ls
LICENSEREADMEbindocsincludelibmansharesupport-files
# ln -sv /usr/local/mysql
mysql/ mysql-5.7.38-linux-glibc2.12-x86_64/
# ln -sv /usr/local/mysql/include/ /usr/include/mysql
'/usr/include/mysql' -> '/usr/local/mysql/include/'
# vim /etc/ld.so.conf.d/mysql.conf
# cat /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib/
# ldconfig
# vim /etc/man_db.conf
#MANDATORY_MANPATH /usr/src/pvm3/man
#
MANDATORY_MANPATH /usr/man
MANDATORY_MANPATH /usr/share/man
MANDATORY_MANPATH /usr/local/share/man
MANDATORY_MANPATH /usr/local/mysql/man //添加一句建立数据存放目录
# mkdir /opt/data
# ll /opt/data/
total 0
# chown -R mysql.mysql /opt/data/初始化数据库
# mysqld --initialze --user mysql --datadir /opt/data/
2022-07-27T08:28:23.607621Z 0 Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2022-07-27T08:28:23.804276Z 0 A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2022-07-27T08:28:23.804304Z 0 A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
2022-07-27T08:28:23.804658Z 0 CA certificate ca.pem is self signed.
2022-07-27T08:28:23.844366Z 1 A temporary password is generated for root@localhost: RIa<P+tD%6qV
//这个命令的最后会生成一个临时密码,此处密码是RIa<P+tD%6qV
//再次注意,这个密码是随机的,你的不会跟我一样,一定要记住这个密码,因为一会登录时会用到2.mysql配置文件
mysql的配置文件为/etc/my.cnf
配置文件查找次序:若在多个配置文件中均有设定,则最后找到的最终生效
# vim /etc/my.cnf
# cat /etc/my.cnf
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//先找到启动脚本文件位置
# cd /usr/local/mysql
# ls
LICENSEREADMEbindocsincludelibmansharesupport-files
# cd support-files/
# ls
magicmysql-log-rotatemysql.servermysqld_multi.server
# file mysql.server
mysql.server: POSIX shell script, ASCII text executable
//在进行启动mysql,发现3306端口已监听
# /usr/local/mysql/support-files/mysql.server start
Starting MySQL.Logging to '/opt/data/localhost.localdomain.err'.
SUCCESS!
# 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 80 *:3306 *:*
LISTEN 0 128 [::]:22 [::]:*
//将脚本加入到系统里去 //使用service控制MySQL启动或关闭
# cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# vim /etc/init.d/mysqld
basedir=/usr/local/mysql/ //添加安装位置
datadir=/opt/data/ //添加数据库存放位置
# service mysqld start
Starting MySQL. SUCCESS!
# 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 80 *:3306 *:*
LISTEN 0 128 [::]:22 [::]:*
# service mysqld stop
Shutting down MySQL.^[[A^[[A. SUCCESS!
# 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 [::]:*
//配置文件被删除后使用不了
# rm -rf /etc/init.d/mysqld
# service mysqld start
Redirecting to /bin/systemctl start mysqld.service
Failed to start mysqld.service: Unit mysqld.service not found.
//使用systemctl管理mysql
# cp /usr/lib/systemd/system/sshd.service .
# ls
anaconda-ks.cfgpasswdsshd.service
# mv sshd.service mysql.service
# ls
anaconda-ks.cfgmysql.servicepasswd
# vim mysql.service
# cat mysql.service
Description=mysql server daemon
After=network.target sshd-keygen.target
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
ExecReload=/bin/kill -HUP $MAINPID
WantedBy=multi-user.target
# mv mysql.service /usr/lib/systemd/system/
# ls
anaconda-ks.cfgpasswd
# systemctl daemon-reload
# systemctl start mysqld
Failed to start mysqld.service: Unit mysqld.service not found. //启动报错需要关闭防火墙和selinux
# systemctl stop firewalld
# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled //修改
# systemctl start mysql
# 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 80 *:3306 *:*
LISTEN 0 128 [::]:22 [::]:* 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将无法正常处理连接请求2.1 数据库密码破解
数据库密码破解:
1、修改/etc/my.cnf配置文件
vim /etc/my.cnf
添加skip-grant-tables
2、重启mysql服务
3、mysql 登入修改密码
update user set authentication_string = password('654321') where User = 'root' and Host = 'localhost';
4、编辑/etc/my.cnf配置文,删除skip-grant-tables,然后重启启动mysql服务
5、使用新密码登入mysql测试
# ls
anaconda-ks.cfgpasswd
# cat passwd
RIa<P+tD%6qV
# mysql -uroot -p'RIa<P+tD%6qV' //登录报错显示需要libncurses.so.5
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
# dnf provides libncurses.so.5 //查看这个在那个软件包里面
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 0:37:59 ago on Wed Jul 27 16:33:32 2022.
ncurses-compat-libs-6.1-9.20180224.el8.i686 : Ncurses compatibility libraries
Repo : base
Matched from:
Provide : libncurses.so.5
# dnf -y install ncurses-compat-libs //下载包
# mysql -uroot -p'RIa<P+tD%6qV'
mysql: 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
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('123456');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> exit
Bye
# mysql -uroot -p123456
mysql: 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 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> 3.多表联合查询
3.1 什么是多表联合查询
前面所讲的查询语句都是针对一个表的,但是在关系型数据库中,表与表之间是有联系的,所以在实际应用中,经常使用多表查询。多表查询就是同时查询两个或两个以上的表。
在 MySQL 中,多表查询主要有交叉连接、内连接、外连接、分组查询与子查询等5种。
3.2 交叉连接(CROSS JOIN)
3.2.1 笛卡尔积
交叉连接(CROSS JOIN):有两种,显式的和隐式的2种,一般用来返回连接表的笛卡尔积。
笛卡尔积(Cartesian product)是指两个集合 X 和 Y 的乘积。
例如,有 A 和 B 两个集合,它们的值如下:
/etc/my.cnf --> /etc/mysql/my.cnf --> --default-extra-file=/PATH/TO/CONF_FILE --> ~/.my.cnf集合 A×B 和 B×A 的结果集分别表示为:
# vim .my.cnf
# cat .my.cnf
user=root
password=123456
# mysql -e 'show databases';
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+以上 A×B 和 B×A 的结果就叫做两个集合的笛卡尔积。
并且,从以上结果我们可以看出:
[*]两个集合相乘,不满足交换率,即 A×B≠B×A。
[*]A 集合和 B 集合的笛卡尔积是 A 集合的元素个数 × B 集合的元素个数。
多表查询遵循的算法就是以上提到的笛卡尔积,表与表之间的连接可以看成是在做乘法运算。在实际应用中,应避免使用笛卡尔积,因为笛卡尔积中容易存在大量的不合理数据,简单来说就是容易导致查询结果重复、混乱。
3.2.2 交叉连接
交叉连接的语法格式如下:
# vim /etc/my.cnf
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
skip-grant-tables //添加一句 表示跳过所有授权表
sql-mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
# systemctl restart mysql
# mysql
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> set password = password('654321');
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> update user set authentication_string = password('654321') where User = 'root' and Host = 'localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1Changed: 1Warnings: 1
//删除添加的那一句
# vim /etc/my.cnf
# cat /etc/my.cnf
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
//测试密码是否能登录
# mysql -uroot -p654321
mysql: 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 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> 或
A = {1,2}
B = {3,4,5}注意:多个表交叉连接时,在 FROM 后连续使用 CROSS JOIN 或,即可。以上两种语法的返回结果是相同的,但是第一种语法才是官方建议的标准写法。
先创建一个名为tb_student_info的表
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) };创建一个名为tb_course的表
SELECT <字段名> FROM <表1> CROSS JOIN <表2> ;使用cross join查询出两张表中的笛卡尔积
SELECT <字段名> FROM <表1>, <表2> ;使用,来查询两张表
mysql> create database zxr;
Query OK, 1 row affected (0.00 sec)
mysql> use zxr;
Database changed
mysql> create table tb_students_info(id int not null primary key auto_increment,name varchar(50),age tinyint,sex varchar(4),height float,course_id int);
Query OK, 0 rows affected (0.01 sec)
mysql> desc tb_students_info;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(50) | YES| | NULL | |
| age | tinyint(4)| YES| | NULL | |
| sex | varchar(4)| YES| | NULL | |
| height | float | YES| | NULL | |
| course_id | int(11) | YES| | NULL | |
+-----------+-------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
mysql> insert tb_students_info(name,age,sex,height,course_id) values('Dany',25,'M',160,1),('Green',23,'M',158,2),('Henry',23,'W',185,1),('Jane',22,'M',162,3),('Jim',24,'W',175,2),('John',21,'W',172,4),('Lily',22,'M',165,4),('Susan',23,'M',170,5),('Thomas',22,'W',178,5),('Tom',23,'W',165,5)
-> ;
Query OK, 10 rows affected (0.00 sec)
Records: 10Duplicates: 0Warnings: 0
mysql> select * from tb_students_info;
+----+--------+------+------+--------+-----------+
| id | name | age| sex| height | course_id |
+----+--------+------+------+--------+-----------+
|1 | Dany | 25 | M | 160 | 1 |
|2 | Green| 23 | M | 158 | 2 |
|3 | Henry| 23 | W | 185 | 1 |
|4 | Jane | 22 | M | 162 | 3 |
|5 | Jim | 24 | W | 175 | 2 |
|6 | John | 21 | W | 172 | 4 |
|7 | Lily | 22 | M | 165 | 4 |
|8 | Susan| 23 | M | 170 | 5 |
|9 | Thomas | 22 | W | 178 | 5 |
| 10 | Tom | 23 | W | 165 | 5 |
+----+--------+------+------+--------+-----------+
10 rows in set (0.01 sec)查询表中学习mysql的人的名字
mysql> create table tb_course(id int not null primary key auto_increment,course_name varchar(50));
Query OK, 0 rows affected (0.02 sec)
mysql> desc tb_course;
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| course_name | varchar(50) | YES| | NULL | |
+-------------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
mysql> select * from tb_course;
+----+-------------+
| id | course_name |
+----+-------------+
|1 | Java |
|2 | MySQL |
|3 | Python |
|4 | Go |
|5 | C++ |
+----+-------------+
5 rows in set (0.00 sec)查询表中id和course_id相同学习mysql的有哪些人
mysql> select * from tb_course cross join tb_students_info;
+----+-------------+----+--------+------+------+--------+-----------+
| id | course_name | id | name | age| sex| height | course_id |
+----+-------------+----+--------+------+------+--------+-----------+
|1 | Java |1 | Dany | 25 | M | 160 | 1 |
|2 | MySQL |1 | Dany | 25 | M | 160 | 1 |
|3 | Python |1 | Dany | 25 | M | 160 | 1 |
|4 | Go |1 | Dany | 25 | M | 160 | 1 |
|5 | C++ |1 | Dany | 25 | M | 160 | 1 |
|1 | Java |2 | Green| 23 | M | 158 | 2 |
|2 | MySQL |2 | Green| 23 | M | 158 | 2 |
|3 | Python |2 | Green| 23 | M | 158 | 2 |
|4 | Go |2 | Green| 23 | M | 158 | 2 |
|5 | C++ |2 | Green| 23 | M | 158 | 2 |
|1 | Java |3 | Henry| 23 | W | 185 | 1 |
|2 | MySQL |3 | Henry| 23 | W | 185 | 1 |
|3 | Python |3 | Henry| 23 | W | 185 | 1 |
|4 | Go |3 | Henry| 23 | W | 185 | 1 |
|5 | C++ |3 | Henry| 23 | W | 185 | 1 |
|1 | Java |4 | Jane | 22 | M | 162 | 3 |
|2 | MySQL |4 | Jane | 22 | M | 162 | 3 |
|3 | Python |4 | Jane | 22 | M | 162 | 3 |
|4 | Go |4 | Jane | 22 | M | 162 | 3 |
|5 | C++ |4 | Jane | 22 | M | 162 | 3 |
|1 | Java |5 | Jim | 24 | W | 175 | 2 |
|2 | MySQL |5 | Jim | 24 | W | 175 | 2 |
|3 | Python |5 | Jim | 24 | W | 175 | 2 |
|4 | Go |5 | Jim | 24 | W | 175 | 2 |
|5 | C++ |5 | Jim | 24 | W | 175 | 2 |
|1 | Java |6 | John | 21 | W | 172 | 4 |
|2 | MySQL |6 | John | 21 | W | 172 | 4 |
|3 | Python |6 | John | 21 | W | 172 | 4 |
|4 | Go |6 | John | 21 | W | 172 | 4 |
|5 | C++ |6 | John | 21 | W | 172 | 4 |
|1 | Java |7 | Lily | 22 | M | 165 | 4 |
|2 | MySQL |7 | Lily | 22 | M | 165 | 4 |
|3 | Python |7 | Lily | 22 | M | 165 | 4 |
|4 | Go |7 | Lily | 22 | M | 165 | 4 |
|5 | C++ |7 | Lily | 22 | M | 165 | 4 |
|1 | Java |8 | Susan| 23 | M | 170 | 5 |
|2 | MySQL |8 | Susan| 23 | M | 170 | 5 |
|3 | Python |8 | Susan| 23 | M | 170 | 5 |
|4 | Go |8 | Susan| 23 | M | 170 | 5 |
|5 | C++ |8 | Susan| 23 | M | 170 | 5 |
|1 | Java |9 | Thomas | 22 | W | 178 | 5 |
|2 | MySQL |9 | Thomas | 22 | W | 178 | 5 |
|3 | Python |9 | Thomas | 22 | W | 178 | 5 |
|4 | Go |9 | Thomas | 22 | W | 178 | 5 |
|5 | C++ |9 | Thomas | 22 | W | 178 | 5 |
|1 | Java | 10 | Tom | 23 | W | 165 | 5 |
|2 | MySQL | 10 | Tom | 23 | W | 165 | 5 |
|3 | Python | 10 | Tom | 23 | W | 165 | 5 |
|4 | Go | 10 | Tom | 23 | W | 165 | 5 |
|5 | C++ | 10 | Tom | 23 | W | 165 | 5 |
+----+-------------+----+--------+------+------+--------+-----------+
50 rows in set (0.00 sec)
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]