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

1. 库的操作

1.1 创建数据库

创建数据库的本质就是在/var/lib/mysql/下新建一个目录。

sql 复制代码
mysql> create database helloworld;
Query OK, 1 row affected (0.01 sec)

在创建数据库时有很多可选项,我们介绍其中的两个:字符集(数据库存储数据的编码方式)和检校集(数据库读取数据的编码方式)。那么系统中都有哪些字符集和检校集呢?我们可以通过下面指令查看:

sql 复制代码
-- 查看字符集
show charset;
-- 查看校验集
show collation;

接下来我们来看一下系统中的默认字符集与校验集:

sql 复制代码
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 检校集区分大小写。

sql 复制代码
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 查看数据库

sql 复制代码
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| helloworld         |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test1              |
| test2              |
+--------------------+
7 rows in set (0.00 sec)

我们还可以查看数据库是怎么创建的:

sql 复制代码
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 修改数据库

sql 复制代码
mysql> alter database helloworld  charset=gbk;
Query OK, 1 row affected (0.01 sec)

对数据库的修改主要指的是修改数据库的字符集,校验规则。

1.4 删除数据库

sql 复制代码
mysql> drop database helloworld;
Query OK, 1 row affected (0.03 sec)

删除数据库的本质就是删除/var/lib/mysql/下的对应目录。

1.5 库的备份与恢复

库的备份:

bash 复制代码
caryon@ALiClode:~/linux/databasetest$ sudo mysqldump -P 3306 -u root -p test1 > ./test1.sql
Enter password: 
caryon@ALiClode:~/linux/databasetest$ ls
test1.sql

库的恢复:

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 查看连接设备

sql 复制代码
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 创建表

sql 复制代码
-- 语法
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 查看表

查看库中有哪些表:

sql 复制代码
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| people         |
+----------------+
1 row in set (0.00 sec)

查看表中的详细信息:

sql 复制代码
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 修改表

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型, 表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。

添加:

sql 复制代码
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)

修改:

sql 复制代码
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)

删除:

sql 复制代码
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 删除表

sql 复制代码
mysql> drop table people;
Query OK, 0 rows affected (0.02 sec)
相关推荐
长征coder2 分钟前
AWS MySQL 读写分离配置指南
mysql·云计算·aws
金色光环17 分钟前
【Modbus学习笔记】stm32实现Modbus
笔记·stm32·学习
醇醛酸醚酮酯17 分钟前
Qt项目锻炼——TODO清单(二)
开发语言·数据库·qt
ladymorgana37 分钟前
【docker】修改 MySQL 密码后 Navicat 仍能用原密码连接
mysql·adb·docker
PanZonghui41 分钟前
Centos项目部署之安装数据库MySQL8
linux·后端·mysql
D-海漠1 小时前
Modbus_TCP_V4 客户端
网络
GreatSQL社区1 小时前
用systemd管理GreatSQL服务详解
数据库·mysql·greatsql
掘根1 小时前
【MySQL进阶】错误日志,二进制日志,mysql系统库
数据库·mysql
weixin_438335401 小时前
基础知识:mysql-connector-j依赖
数据库·mysql
小明铭同学1 小时前
MySQL 八股文【持续更新ing】
数据库·mysql