当前位置: 首页 > news >正文

DDL表操作

  • 查询当前数据库的所有表: SHOW TABLES;
  • 查询表的结构:DESC 表名
  • 查询指定表的建表语句 SHOW CREATE TABLE 表名
  • 删除表DROP TABLE [IF EXISTS] 表名 [表名2 表名3 ...]
  • 删除指定表,并重新创建该表TRUNCATE TABLE 表名
  • 创建表
CREATE TABLE 表名(字段1 字段1类型[COMMENT 字段1注释],字段2 字段2类型[COMMENT 字段2注释],......字段n 字段n类型[COMMENT 字段n注释]
)[COMMENT 表注释]

eg :如何创建下面的表

id name age gender
1 猪头 43
2 秃头 38
3 贵头 33

语句如下:

CREATE TABLE TB_USER(ID INT COMMENT 'ID',NAME VARCHAR(50) COMMENT '姓名',AGE INT COMMENT '年龄',GENDER VARCHAR(1) COMMENT '性别'
) COMMENT '用户表';

我们通过DESC查看表的结构:

DESC TB_USER;

image-1

那么我们如何找到我们刚才的注释呢?

SHOW CREATE TABLE TB_USER;

可以看到

image-2

创建表的时候我们并没有写到 ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci语句,这是什么呢?### 后续会更新

  • ENGINE=InnoDB
  • DEFAULT CHARSET=utf8mb4 表的默认字符集
  • COLLATE=utf8mb4_0900_ai_ci 默认的排序规则
注意我们使用TRUNCATE TABLE 表名的时候,需要注意TRUNCATE的拼写,同时这个指令不能用IF EXISTS语句,TRUNCATE语句最后的效果就是删除了表中的数据,但是保留了表的结构

关于MySQL的数据类型

整数数值类型

类型 大小 描述
TINYINT 1byte 小整数值
SMALLINT 2bytes 大整数值
MEDIUMINT 3bytes 大整数值
INT/INTEGER 4byte 大整数值
BIGINT 8bytes 极大整数值
FLOAT 4bytes 单精度浮点数值
DOUBLE 8bytes 双精度浮点数
DECIMAL 小数值

注意decimal在使用的时候需要指定精度标度
例如123.45的精度就是12345总共的位数也就是5,标度也就是45,小数的位数2

当我们进行项目搭建的时候,我们可能考虑到内存占用的问题,例如当我们创建一个表,其中的一个关键字是年龄,年龄的范围不会超过tinyint的范围,且不可能是负数,在tinyint后面添加unsigned,所以创建时候尽可能的减小内存:

CREATE USER(ID INT,AGE TINYINT UNSIGNED,NAME VARCHAR(50)
);

同时我们也要注意,在使用小数类型的时候,都可以定义精度(位数)标度(小数点后几位),但是实际使用的时候,floatdouble都不推荐使用精度和标度的定义,只有decimal使用的时候进行精度和标度的定义

字符数值类型

类型 大小 描述
CHAR 0-255bytes 定长字符串
VARCHAR 0-65535bytes 不定长字符串
TINYBLOB 0-255bytes 不超过255字节的二进制数据
TINYTEXT 0-255bytes 短文本字符串
BLOB 0-65535bytes 二进制形式的长文本数据
TEXT 0-65535bytes 长文本数据
MEDIUMBOLB 0-16777215bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16777215bytes 中等长度文本数据
LONGBLOB 0-294967295bytes 二进制形式的极大文本数据
LONGTEXT 0-294967295bytes 极大文本数据

对于定长字符串char,在对于定长文本处理时候性能更好,而varchar对于不定长的字符串处理时性能较差
举个例子,我们创建一个char(10),我们就算创建一个长度为1的字符串,其占用的内存也是10个字符长度所占用的内存,而varchar(10)中创建几个字符的字符串对应的就占用多少字符的字符串的内存

实际使用:

char gender(1) comment '性别', --性别字符串长度不变
varchar username(50) comment '用户名' --用户名长度可变

日期类型

类型 大小 格式 描述
DATE 3bytes YYYY-MM-DD 日期值
TIME 3bytes HH:MM:SS 时间值或持续时间
YEAR 1bytes YYYY 年份值
DATETIME 8bytes YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4bytes YYYY-MM-DD HH:MM:SS 混合日期和时间值,时间戳

对于上面的操作,我们通过下面的案例进行一个总结
eg :设计一个员工表,要求如下:

  1. 编号(纯数字)
  2. 员工工号(字符串类型,长度不超过10位)
  3. 员工姓名 (字符串类型,长度不超过10位)
  4. 性别
  5. 年龄
  6. 身份证号(二代身份证为18位数,且末尾可能是X)
  7. 入职时间(取年月日即可)
CREATE TABLE STUFFS(ID INT COMMENT '编号',STU_ID CHAR(10) COMMENT '员工工号',STU_NAME VARCHAR(10) COMMENT '员工姓名',GENDER CHAR(1) COMMENT '性别',AGE TINYINT UNSIGNED COMMENT '年龄',IDCARD CHAR(18) COMMENT '身份证号',D_DATE DATE COMMENT '入职时间'
) COMMENT '员工信息表';

我们前面讲了如何创建一个表,以及字段的类型,那么我们创建完成一个表之后,如何修改字段,如何在原有表的基础上添加字段呢?

DDL修改表的操作

  • 添加字段 ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
  • 修改数据类型ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度) [COMMENT 注释]
  • 修改字段名和字段类型ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束]
  • 删除字段 ALTER TABLE 表名 DROP 字段名
  • 修改表名 ALTER TABLE 表名 RENAME TO 新表名
写的时候注意ALTER的拼写,不要拼成ALERT,同时后面的TABLE不要忘了
同时,也要注意的是修改数据类型或修改字段名会修改字段,原来的字段的注释会被删除
但是修改表名不会改变表中原有的数据
http://www.hskmm.com/?act=detail&tid=18237

相关文章:

  • 第二周第五天2.5
  • yolo
  • 什么是 glTF:完整指南
  • 垃圾收集器与核心算法详解(上)
  • 在Debian系统上修改开源软件源代码制作patch - 教程
  • WSL2搭建wordpress遇到的一点问题
  • 需求的系统规划 3
  • 430亿美元押注英国,Salesforce 加码 AI 投资
  • C# 中 ref 和 out 的学习笔记
  • C# 序列化三种方式
  • 区别:Modbus RTU 和 Modbus TCP
  • 记录安装机器/深度学习环境(conda、CUDA、pytorch)时的一些问题
  • 详细介绍:大数据毕业设计选题推荐:基于Hadoop+Spark的全球能源消耗数据分析与可视化系统
  • 深入解析:自动化接口框架搭建分享-pytest
  • 手撕深度学习之CUDA并行规约算法(上篇):硬核揭秘200%性能提升的GPU优化之道,从硬件特性到算法实现的完整进阶指南
  • 实战需求分析
  • 【RabbitMQ】主题(Topics)与主题交换机(Topic Exchange)
  • Ubuntu上编译 Linux_RT 内核
  • vue3 + vite Cannot access ‘xxx‘ before initialization
  • 《“悬荡”于理想与现实之间:一份关于人机共生未来的思想实验评估》
  • 区别:RS-232、RS-422、RS-485
  • 解决字符串数组中大整数精度问题
  • playwright-mcp入门
  • 【征文计划】深度剖析 Rokid SLAM 算法:从传感器融合到空间重建的完整技术链路 - 实践
  • 国信DRS数据恢复中心成为东芝(TOSHIBA)存储硬盘的数据恢复合作服务商
  • 深入解析Windows注册表regf文件格式
  • 华米运动步数修改,每天自动修改并同步 微信运动/支付宝运动 步数
  • IMU-坐标系-位姿
  • 今天做什么
  • 登录 Linux 自动展示 CPU/内存/磁盘挂载使用情况等信息(针对于银河麒麟调整的)