3.数据库表的基本操作

零:表的命名规范

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)
相关推荐
alonewolf_992 小时前
深入剖析MySQL锁机制与MVCC原理:高并发场景下的数据库核心优化
数据库·mysql
一 乐2 小时前
绿色农产品销售|基于springboot + vue绿色农产品销售系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端·宠物
黄宝康2 小时前
sqlyog密钥亲测有效
mysql
Codeking__2 小时前
Redis初识——什么是Redis
数据库·redis·mybatis
YIN_尹2 小时前
【MySQL】数据类型(上)
android·mysql·adb
k***1953 小时前
Spring 核心技术解析【纯干货版】- Ⅶ:Spring 切面编程模块 Spring-Instrument 模块精讲
前端·数据库·spring
程序员黄老师3 小时前
主流向量数据库全面解析
数据库·大模型·向量·rag
Full Stack Developme3 小时前
Redis 可以实现哪些业务功能
数据库·redis·缓存
rgeshfgreh3 小时前
Spring事务传播机制深度解析
java·前端·数据库