查看原文
其他

MySQL | MySQL 数据库系统(二)- SQL语句的基本操作

JackTian 杰哥的IT之旅 2022-06-06
点击上方“杰哥的IT之旅”,选择“置顶公众号”
干货、福利第一时间送达!

前言

在前面的文章中,我们熟悉了如何搭建及登录 MySQL 数据库系统,文章《MySQL | MySQL 数据库系统(一)》那么,接下来,将通过本篇文章学习如何使用 MySQL 数据库系统的基本操作使用,也是我们在今后的工作中会有所运用的。

1.查看当前服务器中有哪些库

show databases 语句:用于查看当前 MySQL 数据库系统中包含哪些库。


初始化后的 MySQL 数据库,默认有四个库分别是:


1information_schema
2mysql
3performance_schema
4test
5(mysql库中包含了用户认证的相关表)


mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.01 sec)
1.1 查看当前使用的库中有哪些表

show tables 语句:用于查看当前所在的库中所包含的表。


操作前,需先使用 use 语句来切换到所要使用的库。


若你想要知道自己当前所使用的 mysql 库中包含哪些表,即可切换到 mysql 的目标库中,执行语句:show tables; 来进行查看 mysql 库中的表。


mysql> use mysql;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| user                      |
+---------------------------+
24 rows in set (0.00 sec)


1.2 查询表的结构

describe 语句:用于显示表的结构,组成表的各字段信息。


需指定“库名,表名”来作为参数,指定表名时,需先使用 use 语句来切换到所要使用的库。


若查询表结构时,可通过如下语句来进行查看 mysql 库中的 user 表结构,同时也可以执行语句:describe mysql.user; 查看,所输出的结构是一致的。


mysql> describe user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field                  | Type                              | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
|
 Host                   | char(60)                          | NO   | PRI |         |       |
| User                   | char(16)                          | NO   | PRI |         |       |
|
 Password               | char(41)                          | NO   |     |         |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N       |       |
|
 Insert_priv            | enum('N','Y')                     | NO   |     | N       |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0       |       |
|
 plugin                 | char(64)                          | YES  |     |         |       |
| authentication_string  | text                              | YES  |     | NULL    |       |
+------------------------+-----------------------------------+------+-----+---------+-------+
42 rows in set (0.00 sec)
1.3 查看当前数据库版本

select version(); 语句用于查看当前 mysql 数据库版本;


mysql> select version();
+------------+
| version()  |
+------------+
5.5.22-log |
+------------+
1 row in set (0.02 sec)
1.4 查看当前所在哪个库

select database(); 语句:用于查看当前所在哪个库;


mysql> select database();
+------------+
| database() |
+------------+
| mysql      |
+------------+
1 row in set (0.00 sec)
1.5 以列的格式进行显示

在 MySQL 数据库中,执行 SQL 语句后面加 \G 表示将查询结果按列打印。


默认情况下,MySQL 数据库的查询结果是横向输出的。


第一行代表的是列头,第二列代表的是记录集;


mysql> select * from db\G
*************************** 1. row ***************************
                 Host: %
                   Db: test
                 User: 
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
           Grant_priv: N
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: N
         Execute_priv: N
           Event_priv: Y
         Trigger_priv: Y
*************************** 2. row ***************************
                 Host: %
                   Db: test\_%
                 User: 
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: Y
            Drop_priv: Y
           Grant_priv: N
      References_priv: Y
           Index_priv: Y
           Alter_priv: Y
Create_tmp_table_priv: Y
     Lock_tables_priv: Y
     Create_view_priv: Y
       Show_view_priv: Y
  Create_routine_priv: Y
   Alter_routine_priv: N
         Execute_priv: N
           Event_priv: Y
         Trigger_priv: Y
2 rows in set (0.00 sec)


2.创建库

create database 语句:用于创建一个新库,需指定新的数据库名称来作为参数;


auth 将作为本次新建库的库名,其中该数据库不包含任何表。


mysqlcreate database auth;
Query OK, 1 row affected (0.45 sec)

在刚刚新建库的 /usr/local/mysql/data 目录下会自动生成一个与新建库名所相同的文件夹。
[root@localhost ~]# cd /usr/local/mysql/data
[root@localhost data]# ls
auth     ib_logfile0  localhost.err  mysql             mysql-bin.000002  mysql-bin.000004  mysql.error.log     test
ibdata1  ib_logfile1  localhost.pid  mysql-bin.000001  mysql-bin.000003  mysql-bin.index   performance_schema

3.创建表

create table 语句:用于在当前 auth 库中创建新的表,指定数据表名称作为创建新表的参数,并定义该创建新表的所使用的字段;


在创建表之前,需明确你所要建立表结构,字段名称,类型等信息。


创建表的基本语法格式


create table 表名 (字段1名称 类型,字段2名称 类型,......, PRIMARY KEY (主键名))


创建好的 users 表,将字段定义部分的 default 语句用于设置默认的密码字符,primary 语句用于设置主键字段名;


mysql> use auth;
Database changed
mysql> create table users (user_name char(16not null, user_passwd char(48) default '', primary key (user_name));
Query OK, 0 rows affected (0.66 sec)
4.删除数据表及数据库

drop table 语句:用于删除库的表,需指定“库名,表名” 作为参数;


若要指定表名参数,先执行 “use” 语句切换到目标库;


执行以下操作可以删除 auth 库中的 users 表。


mysqldrop table auth.users;
Query OK, 0 rows affected (0.09 sec)


drop database 语句:用于删除指定的库,需指定库名来作为参数;


执行以下操作可以删除 auth 库。


mysqldrop database auth;
Query OK, 0 rows affected (0.02 sec)
5.管理表中的数据记录

在前面的步骤中介绍了创建库及表,下面我们将基于 auth 库来管理表中的数据。(插入、查询、修改及删除数据库中的记录);


插入数据


insert into 语句:用于向目标表中插入新的数据。


语句基本格式


insert into 表名(字段 1 ,字段 2 ,···) values(字段 1 的值,字段 2 的值,···)


如下操作,将向 auth 库中的 user 表插入一条记录,user_name(用户名)为:'jacktian', 所对应的 user_passwd(密码)为:'666666' 。


需要注意的是,在 values 所插入的值必须与前面指定的各字段所对应。


mysql> use auth;
Database changed
mysql> show tables;
+----------------+
| Tables_in_auth |
+----------------+
| servers        |
| users          |
+----------------+
2 rows in set (0.00 sec)
mysql> INSERT INTO users(user_name,user_passwd) VALUES('jacktian', PASSWORD('666666'));                                                                                                        
Query OK, 1 row affected (0.00 sec)


查看表结构是否建立正确;


mysql> describe users;
+-------------+----------+------+-----+---------+-------+
| Field       | Type     | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
|
 user_name   | char(16) | NO   | PRI | NULL    |       |
| user_passwd | char(48| YES  |     |         |       |
+-------------+----------+------+-----+---------+-------+
2 rows in set (0.01 sec)


插入新的数据记录,如果这条记录完整包括表中所有字段的值,则所插入的语句中指定字段的部分字段可省略。


mysql> insert into users values ('jake' , password('888888'));
Query OK, 1 row affected (0.01 sec)


查看数据


select 语句:用于查看当前所指定的表中查看符合条件的数据记录;


语句基本格式


select 字段名 1,字段名 2,··· from 表名 where 条件表达式


若要查询所有字段时,可使用通配符“*”,来显示所有的数据记录,同时将省略 where 条件。执行如下操作时,将可以查看 auth 库中的 users 表内的所有数据,其中 user_passwd 字串是加密的,因此将不显示出实际的密码内容。


mysql> select * from auth.users;
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
|
 jacktian  | *B2B366CA5C4697F31D4C55D61F0B17E70E5664EC |
| jake      | *DA28842831B3C40F4BC1D3C76CF9AD8CBFDAE1CB |
+-----------+-------------------------------------------+
2 rows in set (0.07 sec)


当需要根据指定的条件查询数据时,可使用 where 条件来进行查询。比如你只想查询 auth 库中的 users 表中的 user_name(用户名)为:'jacktian' 的记录,其显示出的数据包括:用户名及密码字段信息。


mysql> select user_name,user_passwd from auth.users where user_name='jacktian';
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| jacktian  | *B2B366CA5C4697F31D4C55D61F0B17E70E5664EC |
+-----------+-------------------------------------------+
1 row in set (0.01 sec)


修改数据


update 语句:用于修改,更新目标表中的数据。


语句基本格式


update 表名 set 字段名 1=字段值 1[,字段名 2=字段值 2where 条件表达式


通过如下操作来修改 users 表中用户名为 'jake' 的记录,将 password 设置为空值,并进行验证记录是否发现用户名为 jake 的密码已修改为空值。


mysql> update auth.users set user_passwd=password (''where user_name = 'jake';
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from auth.users
;
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| jacktian  | *B2B366CA5C4697F31D4C55D61F0B17E70E5664EC |
| jake      |                                           |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)


通常情况下,在 MySQL 数据库中,我们用于访问数据库的各种用户信息都将保存在 mysql 库中的 user 表中,可直接修改其中的数据。


mysql> use mysql;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| user                      |
+---------------------------+
23 rows in set (0.06 sec)


这时,我们可以将数据库用户 root 的密码设置为 '666666' ,当再次访问 MySQL 数据库时,则需要使用 "mysql -u root -p" 来进行访问 MySQL 数据库系统,且必须使用此密码验证,否则将无法登录到 MySQL 数据库系统中。


需要注意的是,此数据库用户密码,可以设置复杂些,保证数据的安全性;


mysql> update mysql.user set password=password ('666666'where user= 'root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0
mysql> FLUSH PRIVILEGES
// 刷新用户授权信息


若你是在 Linux 系统命令行终端下,还可以使用 mysqladmin 工具来设置密码。


[root@localhost data]# mysqladmin -u root -p password '666666'
Enter password: 


删除数据


delete 语句:用于删除表中的指定数据;


语句基本格式


delete from 表名 where 条件表达式


若要删除 auth 库的 users 表中 user_name 用户名为:'jake' 的数据,可执行如下语句来进行操作,并验证该数据内容是否已经发现用户 jake 的数据已经删除了。


mysql> delete from auth.users where user_name = 'jake';
Query OK, 1 row affected (0.03 sec)

mysql> select * from auth.users
;
+-----------+-------------------------------------------+
| user_name | user_passwd                               |
+-----------+-------------------------------------------+
| jacktian  | *B2B366CA5C4697F31D4C55D61F0B17E70E5664EC |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)


在 MySQL 数据库系统中,默认添加了从本机访问数据库的空用户。如下 user、password 字段均为空值。为考虑数据库的安全性可直接删除这些空用户。where 后的条件表达式,将 user 字段为空的用户进行筛选,并验证该空用户的数据是否已经删除。


mysql> select user,host,password from mysql.user where user = '';
+------+-----------+----------+
| user | host      | password |
+------+-----------+----------+
|      | localhost |          |
+------+-----------+----------+
1 row in set (0.00 sec)

mysql> delete from mysql.user where user 
'';
Query OK, 1 row affected (0.04 sec)

mysql> select user,host,password from mysql.user where user 
'';
Empty set (0.00 sec)



后台回复「加群」即可加入读者交流群!

本公众号全部文章已整理成一个目录,请在本公众号后台回复「m」获取!


点击文章底部左侧「阅读原文」可跳转到历史文章哦~


1、SQLServer、MySQL、Oracle三种数据库的优缺点总结
2、记住,永远不要在 Mysql 中使用 “utf8”
3、千行 MySQL 详细学习笔记,你收藏了吗?
4、我必须得告诉大家的MySQL优化原理
5、Oracle SQL 性能优化40条,必看!
6、Linux环境下Oracle数据库常用命令
7、Oracle数据库环境搭建
8、MySQL | MySQL 数据库系统(一)
9、2019年最好用的6款数据库监控工具
10、Linux云计算岗位面试时最常遇到的40个问题



好文,必须点在看!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存