DDL (Data Definition Language) :定义数据语言,用于定义数据库对象。其中有数据库、表、列、索引的操作。
注意:在下面的介绍中的 代表者可有可无意思。
like 就是通配符 只有两个 % 和 _
%:匹配任意零个或多个字符
_:匹配任意单个字符
在下面会介绍具体的用法
数据库的操作
查看数据库
查看数据库
show databases [like 条件]; #注意有s,必须以分号结尾(类似C语言) +--------------------+ | Database | +--------------------+ | information_schema | | mydb1_test | | mydb2_stuinfo | | mydb3_employee | | mydb4_product | | mydb5_sales | | mysql | | performance_schema | | sys | +--------------------+ 这条SQL从英语的角度来记忆会相对轻松,show 展示 databases 数据库(数据库中不止有一个数据库所以要加s表示复数)。 在这里我介绍一下 like的用法。 比如我想查找数据库名称中存在s的数据库 show databases like "%s%"; +--------------------+ | Database (%s%) | +--------------------+ | information_schema | | mydb1_test | | mydb2_stuinfo | | mydb5_sales | | mysql | | performance_schema | | sys | +--------------------+ 比如我想查找数据库名称只有三个字母的数据库。 show databases like "___"; +----------------+ | Database (___) | +----------------+ | sys | +----------------+ %一般用于模糊查找,十分类似于LINUx中的grep。 _一般用于长度查找,也就是有几个下划线就会出现相对应的长度的名称。
查看当前数据库的时间
select now(); +---------------------+ | now() | +---------------------+ | 2026-10-29 14:50:19 | select 在英语中是选择的意思,在数据库中是查看具体某一个数据库对象里的具体内容 注意是某一个 show 是用于查看多个对象 所以show 展示的内容一般要加s select 是用于查看数据库对象里的具体内容
查看数据库的版本
select version(); +-----------+ | version() | +-----------+ | 8.0.45 | +-----------+
查看当前登录的用户及主机名
select user(); +----------------+ | user() | +----------------+ | root@localhost | +----------------+ 1 row in set (0.00 sec)
创建数据库
语法
create database 数据库名;
示例
create database te; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mydb1_test | | mydb2_stuinfo | | mydb3_employee | | mydb4_product | | mydb5_sales | | mysql | | performance_schema | | sys | | te | +--------------------+
查看创建数据库的语句
show create database 数据库名; show create database te; +----------+------------------------------------------------------------------------------------------------------------------------------+ | Database | Create Database | +----------+------------------------------------------------------------------------------------------------------------------------------+ | te | CREATE DATABASE `te` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ | +----------+------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) 由于内容太长所以出现了折行显示 可以在语句末尾加上\G 来改善这一情况 show create database te\G *************************** 1. row *************************** Database: te Create Database: CREATE DATABASE `te` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ 1 row in set (0.00 sec)
Mysql的反引号
在MySQL中是不能使用关键字来作为名称的,但可通过``反引号可以解决这个问题(虽然可以但是也不建议使用)。 mysql> create database database; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database' at line 1 mysql> create database `database`; Query OK, 1 row affected (0.00 sec) mysql> show databases; +--------------------+ | Database | +--------------------+ | database | | information_schema | | mydb1_test | | mydb2_stuinfo | | mydb3_employee | | mydb4_product | | mydb5_sales | | mysql | | performance_schema | | sys | | te | +--------------------+ 11 rows in set (0.00 sec)
切换数据库
查看当前使用的数据库
select database(); +------------+ | database() | +------------+ | NULL | +------------+
选择数据库
use 数据库名; mysql> use te; Database changed mysql> select database(); +------------+ | database() | +------------+ | te | +------------+ 1 row in set (0.00 sec)
删除数据库
- 语法
drop database 数据库名;
- 示例
drop database `database`; Query OK, 0 rows affected (0.00 sec)
表的操作
数据类型
- 整型
| 类型 | 说明 | 存储空间 |
|---|---|---|
TINYINT |
极小整数,范围 -128 ~ 127(无符号 0~255) | 1 字节 |
SMALLINT |
小整数,范围 -32768 ~ 32767(无符号 0~65535) | 2 字节 |
MEDIUMINT |
中等整数,范围 -8388608 ~ 8388607 | 3 字节 |
INT/ INTEGER |
普通整数,范围约 ±21亿(无符号更大) | 4 字节 |
BIGINT |
大整数,范围非常大 | 8 字节 |
FLOAT(M,D) |
单精度浮点数,M总位数,D小数位 | 4 字节 |
DOUBLE(M,D)/ REAL |
双精度浮点数 | 8 字节 |
DECIMAL(M,D)/ NUMERIC |
定点数,精确存储,适合金额 | M+2 字节 |
创建表
- 语法
create table [if not exists] 表明 (表选项); 表选项:列名1 列类型1 [约束]... 列明n 列类型n [约束] 约束会在之后介绍 [if not exists] 如果不存在就创立,可加可不加,不加上在创建重复的表会报错,加上了就不会报错 区别不大。
- 示例
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.00 sec)
查看表
- 语法
show tables [from 数据库名] [like 条件] 直接show tables 会展示你当前所在数据库中的所有表 show tables from 数据库 可以查看其他数据库的表
- 示例
mysql> show tables; +--------------+ | Tables_in_te | +--------------+ | student1 | +--------------+ 1 row in set (0.00 sec) mysql> show tables from mysql\G *************************** 1. row *************************** Tables_in_mysql: columns_priv *************************** 2. row *************************** Tables_in_mysql: component *************************** 3. row *************************** Tables_in_mysql: db *************************** 4. row *************************** Tables_in_mysql: default_roles *************************** 5. row *************************** Tables_in_mysql: engine_cost *************************** 6. row *************************** Tables_in_mysql: func *************************** 7. row *************************** Tables_in_mysql: general_log *************************** 8. row *************************** Tables_in_mysql: global_grants *************************** 9. row *************************** Tables_in_mysql: gtid_executed *************************** 10. row *************************** Tables_in_mysql: help_category *************************** 11. row *************************** Tables_in_mysql: help_keyword *************************** 12. row *************************** Tables_in_mysql: help_relation
删除表
- 语法
drop table [if exists] 表名; drop database 数据库名; 可以看到mysql中的语法是十分类似的
- 示例
drop table student1; Query OK, 0 rows affected (0.00 sec)
修改表
修改表名
语法
法1: alter table 表名 rename 新表名;
法2: rename table 表名 to 新表名;
示例
mysql> create table student1( id int, name varchar(30), salary float);
Query OK, 0 rows affected (0.01 sec)mysql> alter table student1 rename student2;
Query OK, 0 rows affected (0.02 sec)mysql> show tables;
+--------------+
| Tables_in_te |
+--------------+
| student2 |
+--------------+
1 row in set (0.01 sec)mysql> rename table student2 to student1;
Query OK, 0 rows affected (0.00 sec)mysql> show tables;
+--------------+
| Tables_in_te |
+--------------+
| student1 |
+--------------+
1 row in set (0.00 sec)
新增列
- 语法
alter table 表名 add 新列名 列类型 [after|first] 列名; # after:在指定列之后插入新列 # first:在第一列插入新列 # 注意:无before关键字
- 示例
#例:在student1增加一列 birthday alter table student1 add birthday date; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 desc student1; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | id | int | YES | | NULL | | | name | varchar(30) | YES | | NULL | | | salary | float | YES | | NULL | | | birthday | date | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ #注:desc 表名 是用于查看表结构
删除列
- 语法
alter table 表明 drop 列名;
- 示例
#例:删除 student1的birthday这一列 mysql> alter table student1 drop birthday; Query OK, 0 rows affected (0.00 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 | | | salary | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
修改列名
- 语法
alter table 表名 change 旧列名 新列名 列类型; #change 可以列名和列类型一起修改
- 示例
#例 将student1中的id 改成 it mysql> alter table student1 change id it int; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student1; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | it | int | YES | | NULL | | | name | varchar(30) | YES | | NULL | | | salary | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
修改列类型
- 语法
alter table 表名 modify 列名 列类型;
- 示例
#例: 将student1中 it 的类型 修改成 varchar(5) mysql> alter table student1 modify it varchar(5); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student1; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | it | varchar(5) | YES | | NULL | | | name | varchar(30) | YES | | NULL | | | salary | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
修改列位置
- 语法
#将列名放在某列的后面 alter table 表名 modify 列名 列类型 after 某列; #将列名放在第一列 alter table 表名 modify 列名 列类型 first;
- 示例
#将it放在name的后面 mysql> alter table student1 modify it varchar(5) after name; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student1; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | name | varchar(30) | YES | | NULL | | | it | varchar(5) | YES | | NULL | | | salary | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ #将it放在第一列 mysql> alter table student1 modify it varchar(5) first; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> desc student1; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | it | varchar(5) | YES | | NULL | | | name | varchar(30) | YES | | NULL | | | salary | float | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
change和modify的区别
change 可以修改列名和列类型 modify 可以修改列类型/约束 和 列位置 #注 change也可以修改列约束(之后会提到),但可以修改的约束十分有限 若修改约束使用 modify