【MySQL】03.库操作与表操作

发布于:2025-05-21 ⋅ 阅读:(14) ⋅ 点赞:(0)

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)

网站公告

今日签到

点亮在社区的每一天
去签到