1.1 数据库操作
1.1.1数据库的登录及退出
[root@server ~]# systemctl start mysqld
# 必须先启动服务否则报错,如下所述报错信息:
[root@server ~]# mysql -uroot -p
mysql -u 用户名 -h 服务器的主机地址 -p密码
分析
-u 后面跟登录数据库的用户名,这里使用root
-h 后面的参数是服务器的主机地址,在这里客户端和服务器在同一台机器上,所以输入localhost或者IP地址
-p 后面是用户登录密码,注意:-p 和密码之间没有空格。如果出现空格,系统不会把后面的字符串当成密码来对待,没有密码时不写
登录信息如下:
[root@server ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.45 MySQL Community Server - GPL
Copyright (c) 2000, 2026, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
显示信息解释:
Commands end with; or\g:mysql 命令是以分号(;)或"\g"来结束的,遇到这个结束符就开始执行命令
Your MySQL connection id is 8:数据库的连接次数
Server version:8.0.37 Source distribution:版本
Type 'help;' or '\h' for help:输入"help;"或者"\h"可以看到帮助信息
Type '\c' to clear the current input statement:表示遇到"\c"就清楚前面的命令,注意不是清屏
退出:exit、quit、\q
1.1.2 查看数据库
mysql> show databases [like 条件]; # 注意有s
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> show databases like 'sys';
+----------------+
| Database (sys) |
+----------------+
| sys |
+----------------+
1 row in set (0.00 sec)
mysql> show databases like 's%';
+---------------+
| Database (s%) |
+---------------+
| sys |
+---------------+
1 row in set (0.00 sec)
mysql> show databases like '__sql';
+------------------+
| Database (__sql) |
+------------------+
| mysql |
+------------------+
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2023-02-10 09:39:14 |
+---------------------+
1 row in set (0.00 sec)
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.37 |
+-----------+
1 row in set (0.00 sec)
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1.1.3 创建数据库
create database 数据库名
mysql> create database testdb;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdb |
+--------------------+
mysql> create database testdb;
ERROR 1007 (HY000): Can't create database 'testdb'; database exists
show create database 数据库名
mysql> show create database testdb;
+----------+---------------------------------------------------------------------
-------------------------------------------------------------+
| Database | Create Database
|
+----------+---------------------------------------------------------------------
-------------------------------------------------------------+
| testdb | CREATE DATABASE `testdb` /*!40100 DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+---------------------------------------------------------------------
-------------------------------------------------------------+
1 row in set (0.00 sec)
# 上述表格因为内容太长,出现了折行显示
# 可以在语句末尾加上 \G
mysql> show create database testdb \G
*************************** 1. row ***************************
Database: testdb
Create Database: CREATE DATABASE `testdb` /*!40100 DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */
1.1.4 切换数据库
select databse();
mysql> select database();
+------------+
| database() |
+------------+
| NULL |
+------------+
注意:当前没有使用数据库,则显示空
选择数据库
格式:
use 数据库名
mysql> use testdb; # 切换数据库可不加 ; 号
Database changed
mysql> select database(); # 再次查看
+------------+
| database() |
+------------+
| testdb |
+------------+
1.1.5 删除数据库
drop database 数据库名
mysql> drop database testdb;
Query OK, 0 rows affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
1.1.6 小结
# 新建数据库
create database 数据库名;
# 设为当前数据库
use 数据库名;
# 查看当前使用的数据库
select database();
# 显示所有数据库
show databases;
# 删除数据库
drop database 数据库名;
1.2 MySQL 字符集
1.2.1 查看MySQL字符集
mysql> show character set;
+----------+---------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+---------------------------+---------------------+--------+
| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| binary | Binary pseudo charset | binary | 1 |
............
# 字段含义
# Charset: 字符集的名称;
# Description:字符集的简单描述;
# Default collation:该字符集的默认字符序;
# Maxlen:该字符集中字符最大存储长度。
mysql> show character set like 'gbk';
+---------+------------------------+-------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+------------------------+-------------------+--------+
| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
+---------+------------------------+-------------------+--------+
1 row in set (0.00 sec)
mysql> show character set like 'utf%';
+---------+------------------+--------------------+--------+
| Charset | Description | Default collation | Maxlen |
+---------+------------------+--------------------+--------+
| utf16 | UTF-16 Unicode | utf16_general_ci | 4 |
| utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 |
| utf32 | UTF-32 Unicode | utf32_general_ci | 4 |
| utf8mb3 | UTF-8 Unicode | utf8mb3_general_ci | 3 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_0900_ai_ci | 4 |
+---------+------------------+--------------------+--------+
1.2.2 查看MySQL字符序
mysql> show collation;
# 字段含义
# Collation:字符序名称;
# Charset:该字符序关联的字符集;
# Id:字符序ID;
# Default:该字符序是否是所关联的字符集的默认字符序。armscii8_general_ci就是armscii8的默认字符序,而armscii8_bin就不是;
# Compiled:字符集是否已编译到服务器中;
# Sortlen:这与对以字符集表示的字符串进行排序所需的内存量有关;
# Pad_attribute:这表明了字符序在比较字符串时对末尾padding的处理。NO PAD表明在比较字符串时,末尾的padding也会考虑进去,否则不考虑。
1.2.3 查看当前字符集的设置
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 # 重要 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 # 重要 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
character_set_client:MySQL客户端的字符集。
character_set_connection:数据通信链路字符集,当MySQL客户机向服务器发送请求时,请求数据以该字符集进行编码。
character_set_database:数据库默认使用的字符集。
character_set_filesystem:MySQL服务器文件系统字符集,该值是固定的binary。
character_set_results:服务器返回给客户端的结果使用的字符集。
character_set_server:服务器默认的字符集。
character_set_system:服务器存储元数据使用的字符集。
1.3 表的基本操作
1.3.1 数据类型
mysql> create database mydb1_test;
mysql> use mydb1_test;
Database changed
mysql> create table t1(float_num float(10,2) , double_num double(20,2) ,
decimal_num decimal(20,2));
Query OK, 0 rows affected, 2 warnings (0.03 sec)
mysql> insert into t1 value (1234567.66,1234567899000000.66,123456789000000.66);
Query OK, 1 row affected (0.00 sec)
mysql> select * from t1;
+------------+---------------------+--------------------+
| float_num | double_num | decimal_num |
+------------+---------------------+--------------------+
| 1234567.62 | 1234567899000000.80 | 123456789000000.66 |
+------------+---------------------+--------------------+
1.3.2 创建表
create table [if not exists] 表名 (表选项)
列名1 列类型1 约束, 列名2 列类型2 约束, ......
mysql> select database(); # 查看当前数据库
mysql> create database mydb2_stuinfo; # 创建数据库
Query OK, 1 row affected (0.02 sec)
mysql> use mydb2_stuinfo; # 使用数据库
Database changed
mysql> select database();
+---------------+
| database() |
+---------------+
| mydb2_stuinfo |
+---------------+
mysql> create table student1(id int, name varchar(30), sex char(2), age int
unsigned, score float, addr varchar(50));
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| student1 |
+-------------------------+
mysql> desc student1;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int unsigned | YES | | NULL | |
| score | float | YES | | NULL | |
| addr | varchar(50) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
mysql> create database mydb3_employee;
Query OK, 1 row affected (0.01 sec)
mysql> use mydb3_employee;
Database changed
mysql> select database();
+----------------+
| database() |
+----------------+
| mydb3_employee |
+----------------+
mysql> create table tb1(id int(11), name varchar(25), salary float);
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql> show tables;
+--------------------------+
| Tables_in_mydb3_employee |
+--------------------------+
| tb1 |
+--------------------------+
1 row in set (0.00 sec)
mysql> desc tb1;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(25) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
1.3.3 查看表
show tables [from 数据库名][like wild];
mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| class1 |
| student1 |
+-------------------------+
2 rows in set (0.00 sec)
mysql> show tables from mydb3_employee; # 查看另一个库的表示信息
+--------------------------+
| Tables_in_mydb3_employee |
+--------------------------+
| tb1 |
+--------------------------+
1 row in set (0.00 sec)
mysql> show create table student1\G
*************************** 1. row ***************************
Table: student1
Create Table: CREATE TABLE `student1` (
`id` int DEFAULT NULL,
`name` varchar(30) DEFAULT NULL,
`sex` char(2) DEFAULT NULL,
`age` int unsigned DEFAULT NULL,
`score` float DEFAULT NULL,
`addr` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
{describe|desc}表名[列名];
# or
show columns from 表名称;
mysql> use mydb2_stuinfo;
mysql> desc student1;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int unsigned | YES | | NULL | |
| score | float | YES | | NULL | |
| addr | varchar(50) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
1.3.4 删除表
drop table [if exists] 表名;
mysql> use mydb3_employee;
Database changed
mysql> desc tb1;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(25) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> drop table tb1;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
Empty set (0.00 sec)
注意:
用户必须拥有执行 drop table 命令的权限,否则数据表不会被删除
推荐使用 if exists 字句,即先判断是否存在,存在则删除,如:
mysql> drop table if exists tb1;
Query OK, 0 rows affected (0.01 sec)
1.3.5 修改表
1.3.5.1 修改表名
# 法1:
alter table 表名 rename 新表名;
# 法2:
rename table 表名 to 新表名;
mysql> use mydb2_stuinfo;
Database changed
mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| class1 |
| student1 |
+-------------------------+
1 row in set (0.00 sec)
mysql> create table student2(id int, name varchar(30), salary float);
Query OK, 0 rows affected, 1 warning (0.05 sec)
mysql> desc student2;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql> alter table student2 rename student3; # 修改
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| class1 |
| student1 |
| student3 |
+-------------------------+
2 rows in set (0.01 sec)
mysql> rename table student3 to teacher1; # 修改
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| class1 |
| student1 |
| teacher1 |
+-------------------------+
2 rows in set (0.00 sec)
1.3.5.2 新增列
alter table 表名 add 新列名 列类型 [after|first] 列名;
# after:在指定列之后插入新列
# first:在第一列插入新列
# 注意:无before关键字
# 例:增加一列password
mysql> alter table student1 add password char(8);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student1;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int unsigned | YES | | NULL | |
| score | float | YES | | NULL | |
| addr | varchar(50) | YES | | NULL | |
| password | char(8) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
# 例:再添加一个新列notes varchar(30),位置在score之前
mysql> alter table student1 add notes varchar(30) after age;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student1;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int unsigned | YES | | NULL | |
| notes | varchar(30) | YES | | NULL | |
| score | float | YES | | NULL | |
| addr | varchar(50) | YES | | NULL | |
| password | char(8) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
# 例:再第一列添加一个新列
mysql> alter table student1 add aa int first;
mysql> desc student1;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| aa | int | YES | | NULL | |
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int unsigned | YES | | NULL | |
| notes | varchar(30) | YES | | NULL | |
| score | float | YES | | NULL | |
| addr | varchar(50) | YES | | NULL | |
| password | char(8) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
9 rows in set (0.00 sec)
1.3.5.3 删除列
alter table 表名 DROP 列名;
# 例:删除上例的notes、aa列
mysql> alter table student1 drop notes;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> alter table student1 drop aa;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student1;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int unsigned | YES | | NULL | |
| score | float | YES | | NULL | |
| addr | varchar(50) | YES | | NULL | |
| password | char(8) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
1.3.5.4 修改列名
alter table 表名 change 旧列名 新列名 列类型;
# change 可列名列类型一起修改
mysql> alter table student1 change password passwd char(8); # 改名
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student1;
+--------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int unsigned | YES | | NULL | |
| score | float | YES | | NULL | |
| addr | varchar(50) | YES | | NULL | |
| passwd | char(8) | YES | | NULL | |
+--------+--------------+------+-----+---------+-------+
7 rows in set (0.01 sec)
1.3.5.5 修改列类型
alter table 表名 modify 列名 列类型;
# 插入新列,修改类型
mysql> alter table student1 add birthday char(10); # 增加
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student1;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int unsigned | YES | | NULL | |
| score | float | YES | | NULL | |
| addr | varchar(50) | YES | | NULL | |
| passwd | char(8) | YES | | NULL | |
| birthday | char(10) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
mysql> alter table student1 modify birthday date; # 修改
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student1;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| age | int unsigned | YES | | NULL | |
| score | float | YES | | NULL | |
| addr | varchar(50) | YES | | NULL | |
| passwd | char(8) | YES | | NULL | |
| birthday | date | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
1.3.5.6 修改列位置
alter table 表名 modify 列名 列类型 after 某列;
alter table 表名 modify 列名 列类型 first;
# 例:添加新列
mysql> alter table student1 add notes varchar(30) after name;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
# 删除该列
mysql> alter table student1 drop notes;
1.3.6 复制表
1.3.6.1 复制表结构
create table 新表名 like 源表
mysql> use mydb2_stuinfo;
mysql> insert into student1
value(1000,"zhangsan","M",18,98.5,"xi'an","12345678","2005-10-01");
Query OK, 1 row affected (0.00 sec)
mysql> insert into student1 value(1001, "lisi", "W", 20,66.79,"baoji","87654321","2003-5-01");
mysql> select * from student1;
mysql> create table student2 like student1;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| class1 |
| student1 |
| teacher1 |
+-------------------------+
3 rows in set (0.00 sec)
mysql> select * from student2; # 注意:只是复制结构框架
Empty set (0.00 sec)
1.3.6.2 复制表结构+数据
create table 新表名 select * from 源表
mysql> create table student3 select * from student1;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| class1 |
| student1 |
| student2 |
| student3 |
| teacher1 |
+-------------------------+
4 rows in set (0.00 sec)
mysql> select * from student3;
+------+----------+------+------+-------+-------+----------+------------+
| id | name | sex | age | score | addr | passwd | birthday |
+------+----------+------+------+-------+-------+----------+------------+
| 1000 | zhangsan | M | 18 | 98.5 | xi'an | 12345678 | 2005-10-01 |
| 1001 | lisi | W | 20 | 66.79 | baoji | 87654321 | 2003-05-01 |
+------+----------+------+------+-------+-------+----------+------------+
1.3.6.3 复制表数据
mysql> select * from student2;
Empty set (0.00 sec)
mysql> insert into student2 select * from student1;
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from student2;
# 删除 student2 student3 teacher1 表
mysql> drop table if exists student2;
mysql> drop table if exists student3;
mysql> drop table if exists teacher1;
mysql> show tables;
+-------------------------+
| Tables_in_mydb2_stuinfo |
+-------------------------+
| class1 |
| student1 |
+-------------------------+
1.3.7 小结
# 新建表
create tables 表名(列名1 类型 , 列名2 类型 ......);
# 查看表结构
desc 表名;
# 修改表名
alter table 旧表名 rename 新表名;
# 表中添加新列
alter table 表名 add 新列名 列类型 [after|first] 列名; (after为之后)
# 删除列
alter table 表名 DROP 列名;
# 修改列名
alter table 表名 change 旧列名 新列名 列类型;
# 修改列类型
alter table 表名 modify 列名 列类型;
# 移动列
alter table 表名 modify 列名 列类型 after 某列;
# 删除表
drop table if exists 表名;