1. 写出以下操作的sql语句
-
创建一个叫users的表,表中包含username、age、sex字段
-
查询username为“张三”的一条纪录
-
查询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)
至此,数据表还原完成了。
上述,就是数据表的备份以及还原过程。