零:表的命名规范
bash
1.常规表:t+模块+表:t_user_eduinfo(用户模块的教育信息表)
2.临时表:temp作前缀+模块+表+日期后缀:temp_user_eduinfo_20250110
3.备份表:(用于保存和归档历史数据或作为灾备恢复的数据)
bak作前缀+模块+表+日期后缀:bak_user_eduinfo_20250110
4.同一个模块的表尽可能使用相同的前缀,表名称尽可能表达含义
5.多个单词以下划线_分隔
6.常规表表名尽量不超过30个字符,temp表和bak表视情况而定但也简短为宜
一:表的基本操作
1.1 数据类型
- 整型
bash
数据类型 字节数
1.tinyint 1
2.smallint 2
3.mediumint 3
4.int 4
5.bigint 8
注意:1.实际开发时一定要选取合适的数据类型,否则开发场景越大浪费越大
2.整型(N)表现形式:int(10)表示数字宽度限制,
-无论N取值多少,int永远占4个字节
-N表示显示宽度,不足补0,超过长度则无视长度并直接显示数字
- 浮点型
bash
数据类型 字节数 备注
float 4 单精度浮点型
double 8 双精度浮点型
注意:格式float(M,D)、double(M,D)限制宽度/整数位(M)和精度/小数位(D),不指定M、D则按实际精度处理
- 定点型
bash
格式:decimal(size,d);以字符串形式进行存储的double类型,用以解决float、double存在精度缺失问题,常见于银行系统、互联网金融系统
示例
bash
在这里插入代码片
- 文本型

- date类型

1.2 创建表
- 格式
bash
create table 表明(字段名1 数据类型,字段名2 数据类型,......,字段名N 数据类型);
1.默认情况下,表被创建到当前数据库下
2.创建表时必须指定每列(字段名)和数据类型,多个列之间用逗号隔开
- 示例一:创建数据库并建新表
bash
mysql> show databases; 查看数据库管理系统下的数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> select database(); 查看当前所处的数据库-没有进入数据库
+------------+
| database() |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec)
mysql> create database testdb; 创建testdb数据库
Query OK, 1 row affected (0.02 sec)
mysql> use testdb 进入testdb数据库
Database changed
mysql> select database(); 查看当前所处的数据库-当前进入数据库testdb
+------------+
| database() |
+------------+
| testdb |
+------------+
1 row in set (0.00 sec)
mysql> create table t_new(id int,name varchar(20)); 在testdb数据库下创建t_new表
Query OK, 0 rows affected (0.04 sec)
- 示例二:在testdb数据库下创建员工表:
bash
mysql> create table t_employer(id int,name varchar(20),salary float);
Query OK, 0 rows affected (0.09 sec)
1.3 查看表
1.show语句:显示当前数据库中已有数据表
bash
show tables [from 数据库];
- 示例一:显示当前数据库(testdb)下的表
bash
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| t_employer |
| t_new |
+------------------+
2 rows in set (0.00 sec)
- 示例二:在当前数据库下,显示mysql数据库下的表
bash
mysql> show tables from mysql;
+------------------------------------------------------+
| Tables_in_mysql |
+------------------------------------------------------+
| columns_priv |
| component |
| db |
- 示例三:查看建表语句
bash
mysql> show create table t_employer;
| Table | Create Table |
+------------+---------------------------
| t_employer | CREATE TABLE `t_employer` (
`id` int DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`salary` float DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 |
2.describe语句:查看数据表中各列的信息
- 格式
bash
desc|describe 表名称;
or
show columns from 表名称;
- 示例:查看testdb数据库下t_employer表的列信息
bash
mysql> desc t_employer;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
字段意义分析:
Field:字段名称/列
type:字段类型
null:是否允许为空,yes表示允许 no表示不允许
key:索引类型
default:默认值
extra:填充
3.select语句:查看数据表中的详细信息
- 格式
bash
mysql> select * from 表名;
- 示例:查看t_student表的详细内容
bash
mysql> select * from t_student;
+------+--------+------+
| id | name | sex |
+------+--------+------+
| 1 | 张三 | 男 |
| 2 | 李四 | 男 |
| 3 | 王五 | 男 |
+------+--------+------+
3 rows in set (0.00 sec)
1.4 删除表
- 格式
bash
drop table [if exists] 表名;
- 示例:删除t_employer表
bash
mysql> drop table t_employer;
Query OK, 0 rows affected (0.02 sec)
1.5 修改表
1.修改表名/重命名
- 格式
bash
alter table 表名 rename 新表名;
or
rename table 表名 to 新表名;
- 示例:使用alter语法将表t_new修改为t_old,再使用rename语法修改回来
bash
mysql> show tables; 查看表
+------------------+
| Tables_in_testdb |
+------------------+
| t_new |
+------------------+
1 row in set (0.00 sec)
mysql> alter table t_new rename t_old; 修改表名
Query OK, 0 rows affected (0.02 sec)
mysql> show tables; 查看表
+------------------+
| Tables_in_testdb |
+------------------+
| t_old |
+------------------+
1 row in set (0.00 sec)
mysql> rename table t_old to t_new; 修改表名
Query OK, 0 rows affected (0.02 sec)
mysql> show tables; 查看表
+------------------+
| Tables_in_testdb |
+------------------+
| t_new |
+------------------+
1 row in set (0.00 sec)
2.添加新列
- 格式
bash
alter table 表名 add 新列名 列类型 [first|after] 列名;
after:在指定列之后插入新列 first:在第一列插入新列
注意:无before关键字
- 示例一:在t_new表中增加age列
bash
mysql> alter table t_new add age int; 添加age列
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t_new; 查看表的列结构
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
- 示例二:在id列之后添加sex char(2)列
bash
mysql> alter table t_new add sex char(2) after id;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t_new;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
- 示例三:在第一列插入class int列
bash
mysql> alter table t_new add class int first;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t_new;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| class | int | YES | | NULL | |
| id | int | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
3.删除列
- 格式
bash
alter table 表名 drop 列名;
注意:只能一个一个删除
- 示例:删除age列
bash
mysql> alter table t_new drop age;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
4.修改列的数据类型
- 格式
bash
alter table 表名 modify 字段名 数据类型;
- 示例:将sex char(2)修改为sex varchar(2)
bash
mysql> desc t_new;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| class | int | YES | | NULL | |
| id | int | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
mysql> alter table t_new modify sex varchar(2);
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t_new;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| class | int | YES | | NULL | |
| id | int | YES | | NULL | |
| sex | varchar(2) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------
5.修改列的名称 和 数据类型
- 格式
bash
alter table 表名 change 旧列名 新列名 新列的数据类型;
注意:无论修改与否,数据类型都不可或缺
- 示例:将class修改为class_num,数据类型保持不变
bash
mysql> alter table t_new change class class_num int;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t_new;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| class_num | int | YES | | NULL | |
| id | int | YES | | NULL | |
| sex | varchar(2) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
6 修改列位置
- 格式
bash
alter table 表名 modify [column] 列名 列数据类型 [first|after 参考列名];
after:排在指定列之后 first:排在第一列
- 示例一:将name排到第一列
bash
mysql> alter table t_new modify column name varchar(20) first;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t_new;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| class_num | int | YES | | NULL | |
| id | int | YES | | NULL | |
| sex | varchar(2) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
- 示例二:将id排到name之后
bash
mysql> alter table t_new modify column id int after name;
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc t_new;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| name | varchar(20) | YES | | NULL | |
| id | int | YES | | NULL | |
| class_num | int | YES | | NULL | |
| sex | varchar(2) | YES | | NULL | |
+-----------+---------geshi----+------+-----+---------+-------+
4 rows in set (0.00 sec)
练习
bash
1.新建商品数据库mysql_product
2.使用该数据库
3.创建商品表t_product,字段包含:编号num int,商品名trade_name varchar(30),数量number int(4),单价price float(5.2)
4.显示创建表的字段内容
5.新增一列:备注notes varchar(30)
6.将编号num字段类型修改为char(4)
7.删除该表
1.6 复制表的结构 及 数据
- 格式
bash
create table 新表名 select * from 旧表名; 复制旧表结构及数据给新表
or
creast table 新表名 like 旧表; 复制旧表结构
insert into 新表名 select * from 旧表; 将旧表数据导入新表
- 示例1:创建表t_student并将表结构和数据复制到表t_student_copy01中
bash
#创建学生表
mysql> create table t_student(id int,name varchar(20),sex char(2));
Query OK, 0 rows affected (0.04 sec)
#显示学生表 列结构
mysql> desc t_student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
#给学生表内填充内容
mysql> insert into t_student values(1,'张三','男');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t_student values(2,'李四','男');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t_student values(3,'王五','男');
Query OK, 1 row affected (0.01 sec)
#查看学生表内容
mysql> select * from t_student;
+------+--------+------+
| id | name | sex |
+------+--------+------+
| 1 | 张三 | 男 |
| 2 | 李四 | 男 |
| 3 | 王五 | 男 |
+------+--------+------+
3 rows in set (0.00 sec)
#创建新表t_student_copy01并直接赋予旧表结构和数据
mysql> create table t_student_copy01 select * from t_student;
Query OK, 3 rows affected (0.07 sec)
Records: 3 Duplicates: 0 Warnings: 0
#查看t_student_copy01表的数据
mysql> select * from t_student_copy01;
+------+--------+------+
| id | name | sex |
+------+--------+------+
| 1 | 张三 | 男 |
| 2 | 李四 | 男 |
| 3 | 王五 | 男 |
+------+--------+------+
3 rows in set (0.00 sec)
- 示例2:将表t_student的表结构和数据依次复制到表t_student_copy02中
bash
#创建表t_student_copy02并将表t_student的表结构导入其中
mysql> create table t_student_copy02 like t_student;
Query OK, 0 rows affected (0.03 sec)
#由于只有结构因此数据为空
mysql> select * from t_student_copy02;
Empty set (0.00 sec)
#将表t_student的数据导入其中
mysql> insert into t_student_copy02 select * from t_student;
Query OK, 3 rows affected (0.00 sec)
#再次查看表数据
mysql> select * from t_student_copy02;
+------+--------+------+
| id | name | sex |
+------+--------+------+
| 1 | 张三 | 男 |
| 2 | 李四 | 男 |
| 3 | 王五 | 男 |
+------+--------+------+
3 rows in set (0.00 sec)