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>

上述操作就在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)

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

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

查询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)

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

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

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

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

该命令与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

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

接下来将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)

上述就将这张表删除了。

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:~]#

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

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)

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

除了使用上面的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)

接下来使用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)

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值