1. 库的操作
1.1 创建数据库
创建数据库的本质就是在/var/lib/mysql/下新建一个目录。
mysql> create database helloworld;
Query OK, 1 row affected (0.01 sec)
在创建数据库时有很多可选项,我们介绍其中的两个:字符集(数据库存储数据的编码方式)和检校集(数据库读取数据的编码方式)。那么系统中都有哪些字符集和检校集呢?我们可以通过下面指令查看:
-- 查看字符集
show charset;
-- 查看校验集
show collation;
接下来我们来看一下系统中的默认字符集与校验集:
mysql> show variables like 'character_set_database';
+------------------------+---------+
| Variable_name | Value |
+------------------------+---------+
| character_set_database | utf8mb4 |
+------------------------+---------+
1 row in set (0.01 sec)
mysql> show variables like 'collation_database';
+--------------------+--------------------+
| Variable_name | Value |
+--------------------+--------------------+
| collation_database | utf8mb4_0900_ai_ci |
+--------------------+--------------------+
1 row in set (0.00 sec)
接下来我们验证一下检校编码的影响:
说明:utf8_ general_ ci 校验集不区分大小写,utf8_ bin 检校集区分大小写。
mysql> create database test1 collate utf8_general_ci; Query OK, 1 row affected, 1 warning (0.01 sec) mysql> use test1; Database changed mysql> create table person(name varchar(20)); Query OK, 0 rows affected (0.04 sec) mysql> insert into person values('a'); Query OK, 1 row affected (0.01 sec) mysql> insert into person values('A'); Query OK, 1 row affected (0.01 sec) mysql> select * from person where name='a'; +------+ | name | +------+ | a | | A | +------+ 2 rows in set (0.00 sec) mysql> create database test2 collate utf8_bin; Query OK, 1 row affected, 1 warning (0.01 sec) mysql> use test2 Database changed mysql> create table person(name varchar(20)); Query OK, 0 rows affected (0.03 sec) mysql> insert into person values('a'); Query OK, 1 row affected (0.01 sec) insert into person values('A'); Query OK, 1 row affected (0.00 sec) mysql> select * from person where name='a'; +------+ | name | +------+ | a | +------+ 1 row in set (0.00 sec)
可以看出不同校验集对查询到的数据是有很大影响的。
1.2 查看数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| helloworld |
| information_schema |
| mysql |
| performance_schema |
| sys |
| test1 |
| test2 |
+--------------------+
7 rows in set (0.00 sec)
我们还可以查看数据库是怎么创建的:
mysql> show create database test;
+----------+--------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------------------------------------------------------------------------+
| test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+--------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show create database test \G;
*************************** 1. row ***************************
Database: test
Create Database: CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */
1 row in set (0.00 sec)
ERROR:
No query specified
1.3 修改数据库
mysql> alter database helloworld charset=gbk;
Query OK, 1 row affected (0.01 sec)
对数据库的修改主要指的是修改数据库的字符集,校验规则。
1.4 删除数据库
mysql> drop database helloworld;
Query OK, 1 row affected (0.03 sec)
删除数据库的本质就是删除/var/lib/mysql/下的对应目录。
1.5 库的备份与恢复
库的备份:
caryon@ALiClode:~/linux/databasetest$ sudo mysqldump -P 3306 -u root -p test1 > ./test1.sql
Enter password:
caryon@ALiClode:~/linux/databasetest$ ls
test1.sql
库的恢复:
mysql> source /home/caryon/linux/databasetest/test.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)
1.6 查看连接设备
mysql> show processlist;
+----+-----------------+-----------+------+---------+-------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------+------+---------+-------+------------------------+------------------+
| 5 | event_scheduler | localhost | NULL | Daemon | 15334 | Waiting on empty queue | NULL |
| 17 | root | localhost | NULL | Query | 0 | init | show processlist |
+----+-----------------+-----------+------+---------+-------+------------------------+------------------+
2 rows in set, 1 warning (0.00 sec)
可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。
2. 表的操作
2.1 创建表
-- 语法
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
mysql> create table people( name varchar(32), age int );
Query OK, 0 rows affected (0.04 sec)
2.2 查看表
查看库中有哪些表:
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| people |
+----------------+
1 row in set (0.00 sec)
查看表中的详细信息:
mysql> desc people;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| name | varchar(32) | YES | | NULL | |
| age | int | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
2.3 修改表
在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型, 表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。
添加:
mysql> alter table people add column telephone varchar(20) after name;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc people;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| name | varchar(32) | YES | | NULL | |
| telephone | varchar(20) | YES | | NULL | |
| age | int | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
修改:
mysql> alter table people modify column name varchar(64);
Query OK, 2 rows affected (0.08 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> desc people;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| name | varchar(64) | YES | | NULL | |
| telephone | varchar(20) | YES | | NULL | |
| age | int | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
删除:
mysql> alter table people drop column age;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc people;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| name | varchar(64) | YES | | NULL | |
| telephone | varchar(20) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
2.4 删除表
mysql> drop table people;
Query OK, 0 rows affected (0.02 sec)