• MySQL基础增删改查以及备份还原操作


    1. 写出以下操作的sql语句

    1. 创建一个叫users的表,表中包含username、age、sex字段

    2. 查询username为“张三”的一条纪录

    3. 查询age大于18且sex为“女“的所有纪录

    具体实现如下所示:

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.00 sec)
    
    mysql> create database test;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> show create database test;
    +----------+------------------------------------------------------------------+
    | Database | Create Database                                                  |
    +----------+------------------------------------------------------------------+
    | test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ |
    +----------+------------------------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> use test;
    Database changed
    mysql>
    mysql> create table if not exists users (id tinyint primary key auto_increment, username char(40), age int, sex char(10));
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> desc users;
    +----------+------------+------+-----+---------+----------------+
    | Field    | Type       | Null | Key | Default | Extra          |
    +----------+------------+------+-----+---------+----------------+
    | id       | tinyint(4) | NO   | PRI | NULL    | auto_increment |
    | username | char(40)   | YES  |     | NULL    |                |
    | age      | int(11)    | YES  |     | NULL    |                |
    | sex      | char(10)   | YES  |     | NULL    |                |
    +----------+------------+------+-----+---------+----------------+
    4 rows in set (0.01 sec)
    
    mysql> show create table users\G
    *************************** 1. row ***************************
           Table: users
    Create Table: CREATE TABLE `users` (
      `id` tinyint(4) NOT NULL AUTO_INCREMENT,
      `username` char(40) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      `sex` char(10) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
    1 row in set (0.00 sec)
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    上述操作就在test数据库中创建了一个名为users的表。

    接下来在上述创建的users表中插入几条记录。具体如下所示:

    mysql> insert into users values
        -> ('张三', 20, '男');
    ERROR 1136 (21S01): Column count doesn't match value count at row 1
    mysql> insert into users
        -> values
        -> (null, '张三', 20, '男'),
        -> (null, '李四', 21, '女'),
        -> (null, '王二', 18, '男'),
        -> (null, '赵五', 19, '女')
        -> ;
    Query OK, 4 rows affected (0.02 sec)
    Records: 4  Duplicates: 0  Warnings: 0
    
    mysql> select * from users;
    +----+----------+------+------+
    | id | username | age  | sex  |
    +----+----------+------+------+
    |  1 | 张三     |   20 | 男   |
    |  2 | 李四     |   21 | 女   |
    |  3 | 王二     |   18 | 男   |
    |  4 | 赵五     |   19 | 女   |
    +----+----------+------+------+
    4 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    查询username为张三的数据记录。具体如下所示:

    mysql> select * from users where username='张三';
    +----+----------+------+------+
    | id | username | age  | sex  |
    +----+----------+------+------+
    |  1 | 张三     |   20 | 男   |
    +----+----------+------+------+
    1 row in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查询age大于18且sex为“女“的所有纪录,具体如下所示:

    mysql> select * from users where age>18 and sex='女';
    +----+----------+------+------+
    | id | username | age  | sex  |
    +----+----------+------+------+
    |  2 | 李四     |   21 | 女   |
    |  4 | 赵五     |   19 | 女   |
    +----+----------+------+------+
    2 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    上述就是数据库的简单操作。

    2. 如何备份并还原上述表?

    如果要备份上述的users表,使用mysqldump命令进行全量备份即可。该命令的使用帮助信息如下所示:

    $ mysqldump -u root -p db_name tbl_name1 tbl_name2 ... tbl_namen > db_name-backup.sql
    
    • 1

    该命令与mysql命令连接数据库的选项类似,后面指定的db_name为要备份的数据库;在这个参数后面可以指定该数据库下面的若干张数据表,多个表之间用空格分隔,此时表示备份db_name这个数据库下指定的若干数据表,而并不是备份整个数据库。

    2.1. 备份数据库中的表,并删除该表

    使用该命令进行上述表的备份操作,具体操作如下所示:

    [root@c7u6s4:~]# mysqldump -uroot -p test users > test.users-bakup.sql
    Enter password:
    [root@c7u6s4:~]#
    [root@c7u6s4:~]# ls -lh test.users-bakup.sql
    -rw-r--r-- 1 root root 2.0K Jan 25 22:54 test.users-bakup.sql
    [root@c7u6s4:~]# file test.users-bakup.sql
    test.users-bakup.sql: UTF-8 Unicode text
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    上述就完成了数据库中表的备份操作。

    接下来将test数据库中的users表删除,具体如下所示:

    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | users          |
    +----------------+
    1 row in set (0.00 sec)
    
    mysql> drop table users;
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> show tables;
    Empty set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    上述就将这张表删除了。

    2.2. 使用上述备份的数据表还原数据表

    mysqldump命令用于实现数据库或者数据库中表的备份操作,mysql命令可以用于还原备份的结果。除此之外,还可以在mysql连接到数据库之后,执行source语句还原备份结果。

    使用mysql命令还原备份结果,需要在命令行中指定要还原的表所在的数据库,否则就会报错;如果是整个数据库的备份,则无需指定表所在的数据库这个参数。具体如下所示:

    [root@c7u6s4:~]# mysql -uroot -p < test.users-bakup.sql
    Enter password:
    ERROR 1046 (3D000) at line 22: No database selected
    
    [root@c7u6s4:~]# mysql -uroot -p test < test.users-bakup.sql
    Enter password:
    [root@c7u6s4:~]#
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    上述就完成了数据表的还原,接下来连接到数据库进行验证,具体如下所示:

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | test               |
    +--------------------+
    5 rows in set (0.00 sec)
    
    mysql> use test;
    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_test |
    +----------------+
    | users          |
    +----------------+
    1 row in set (0.00 sec)
    
    mysql> select * from users;
    +----+----------+------+------+
    | id | username | age  | sex  |
    +----+----------+------+------+
    |  1 | 张三     |   20 | 男   |
    |  2 | 李四     |   21 | 女   |
    |  3 | 王二     |   18 | 男   |
    |  4 | 赵五     |   19 | 女   |
    +----+----------+------+------+
    4 rows in set (0.01 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    从上述输出结果可以看出,此前被删除的数据表已经被还原完成了。

    除了使用上面的mysql命令,在命令行中直接还原之外,还可以连接到mysql数据库之后,使用source语句还原备份结果。

    先删除此前的还原结果,具体如下所示:

    mysql> select database();
    +------------+
    | database() |
    +------------+
    | test       |
    +------------+
    1 row in set (0.00 sec)
    
    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | users          |
    +----------------+
    1 row in set (0.00 sec)
    
    mysql> drop table users;
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> show tables;
    Empty set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    接下来使用source语句还原备份的数据表,具体如下所示:

    mysql> source test.users-bakup.sql;
    Query OK, 0 rows affected (0.00 sec)
    
    Query OK, 0 rows affected (0.00 sec)
    
    Query OK, 0 rows affected (0.00 sec)
    
    Query OK, 0 rows affected (0.00 sec)
    
    Query OK, 0 rows affected (0.00 sec)
    
    Query OK, 0 rows affected (0.01 sec)
    
    Query OK, 0 rows affected (0.00 sec)
    
    Query OK, 0 rows affected (0.00 sec)
    ...
    
    mysql> show tables;
    +----------------+
    | Tables_in_test |
    +----------------+
    | users          |
    +----------------+
    1 row in set (0.00 sec)
    
    mysql> select * from users;
    +----+----------+------+------+
    | id | username | age  | sex  |
    +----+----------+------+------+
    |  1 | 张三     |   20 | 男   |
    |  2 | 李四     |   21 | 女   |
    |  3 | 王二     |   18 | 男   |
    |  4 | 赵五     |   19 | 女   |
    +----+----------+------+------+
    4 rows in set (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    至此,数据表还原完成了。

    上述,就是数据表的备份以及还原过程。

  • 相关阅读:
    瑞芯微:基于RK3568的深度估计模型部署
    前端如何使网页变灰
    2022-07-18 jenkins部署
    微信小程序底部安全区域高度获取
    Android 实战项目:找回密码
    Ubuntu 18.04下普通用户的一次提权过程
    Echarts 社区分享
    【2022改良版】学法减分助手PRO小程序源码
    c语言-数据结构-栈和队列的实现和解析
    React 全栈体系(十七)
  • 原文地址:https://blog.csdn.net/ikkyphoenix/article/details/125881351