【MySQL 保姆级教学】表结构的操作(4)

表结构的操作

  • 1. 定义和语法
  • 2. 创建表 CREATE
    • 2.1 创建表的本质
    • 2.2 表的存储引擎
    • 2.3 表的字符集和校验规则
    • 2.4 创建表实例
  • 3. 查看表结构 DESC
    • 3.1 作用
    • 3.2 示例
  • 4. 修改表结构 ALTER
    • 4.1 添加列 ADD
    • 4.2 修改列 MODIFY
    • 4.3 删除列 DROP
    • 4.4 更改列名 CHANGE
  • 5. 修改表名 RENAME
  • 6. 删除表 DROP

1. 定义和语法

在数据库中,表是用于存储和组织数据的基本结构。表由行(记录)和列(字段)组成,每一行代表一个数据记录,每一列代表一个特定的数据属性。表的定义包括表的名称、列的定义、数据类型、约束和其他属性。

表的定义要素:

  • 表名:表的唯一标识符,用于在数据库中引用该表。
  • 列名:表中每一列的名称,用于标识该列存储的数据。
  • 数据类型:每列的数据类型,定义了该列可以存储的数据种类。
  • 约束:用于确保数据的完整性和一致性,常见的约束包括主键、外键、唯一性、非空等。
  • 索引:用于加速数据检索的特殊数据结构。
  • 其他属性:如默认值、注释等。

语法:

CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;

说明:

table: 表示列名。
datatype :表示列的类型。
character set :字符集,如果没有指定字符集,则以所在数据库的字符集为准。
collate: 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准。

2. 创建表 CREATE

2.1 创建表的本质

创建一个study
命令:create table study ( score int);
这个命令中,study是表名,score是列名,int是类型。
在这里插入图片描述

那么,创建表的本质是什么呢?
我是在Linux中,打开存储数据库test的目录:
命令:ls /var/lib/mysql/test
在这里插入图片描述
同学们可以看到,有两个文件名和我创建的表名一样,所以,创建表的本质就是创建一个文件

说明:
不同的存储引擎,创建表的文件不一样。
study 表存储引擎是 Innodb ,在数据目中有二个不同的文件,分别是:
study..frm:表的结构信息。
study.ibd:表的数据和索引。

2.2 表的存储引擎

Innodb 存储引擎

  • .frm 文件:是 Form 文件的缩写,用于存储表的元数据(即表结构信息)。每个表都有一个对应的 .frm 文件,无论使用哪种存储引擎。
  • .ibd 文件:是 InnoDB Data 文件的缩写,用于存储 InnoDB 存储引擎表的数据和索引。每个使用 InnoDB 存储引擎的表都有一个对应的 .ibd 文件。

MyISAM 存储引擎

  • .frm 文件:存储了表的结构信息,包括列的名称、数据类型、索引定义、约束等。这些信息用于描述表的元数据。
  • .MYD 文件:存储了表的实际数据行。数据按照行的顺序存储,每行数据按照列的定义进行排列。
  • .MYI 文件
    存储了表的索引信息。索引用于加速数据的检索,包括主键索引、唯一索引和普通索引。

2.3 表的字符集和校验规则

表的时候,有字符集和校验集的设置:

  1. 字符集:定义了数据库中可以存储的字符及其编码方式。字符集决定了每个字符在计算机中如何表示,即每个字符占用多少字节以及具体的二进制编码。

  2. 校验集:定义了字符集中的字符如何进行比较和排序。同一个字符集可以有不同的校验集,不同的校验集决定了字符的大小写敏感性、重音敏感性等。

数字存储的时会使用字符集,数据查找或者匹配,这样会进行数据比较,想要进行比较就需要先读取出来,读取使用校验集,支持数据库进行比较使用的校验集,本质也是一种读取数据库中数据的编码格式

举个简单的例子,如果你存储数据使用浮点类型,而取数据用字符串类型,这样取出来的数据肯定会乱套的。

总之,数据库无论对数据做任何操作,都必须保证操作和编码必须是一致的。

当创建数据库时不设置字符集和校验集,会默认使用mysql配置的字符集和校验集

示例:

创建一个表,同时设置字符集和校验集。
命令:

create table study(
id int primary key,
name varchar(10),
score int
) charset utf8 collate utf8_general_ci;

同学们想更加深入的了解字符集和校验集,请看 数据库的操作(第三章)

2.4 创建表实例

  1. 创建一个study
    命令:create table study ( score int);
    这个命令中,study是表名,score是列名,int是类型。

  2. 创建一个表,每列加上注释
    命令:

    create table test(
    id int comment ‘学号’,
    name varchar(8) comment ‘姓名’,
    score int comment ‘分数’);

    在这里插入图片描述

  3. 创建一个表,id 设置为主键,同时设置字符集和校验集。
    命令:

    create table study(
    id int primary key,
    name varchar(10),
    score int
    ) charset utf8 collate utf8_general_ci;

    在这里插入图片描述

3. 查看表结构 DESC

3.1 作用

  1. 了解表的定义
  • 列信息:查看表中的所有列及其数据类型、长度、是否允许为空等。
  • 约束信息:查看表中的主键、外键、唯一性约束、检查约束等。
  • 索引信息:查看表中的索引,包括主键索引、唯一索引、普通索引等。
  1. 确保数据模型的正确性
  • 验证列定义:确保表中的列定义符合业务需求,没有遗漏或多余列。
  • 验证约束:确保表中的约束(如主键、外键、唯一性约束)正确无误,以保证数据的完整性和一致性。
  1. 优化查询性能
  • 索引分析:了解表中的索引情况,帮助你优化查询性能。索引可以显著提高查询速度,但过多的索引会增加写操作的开销。
  • 数据类型选择:确保选择了合适的数据类型,以优化存储和查询性能。
  1. 进行数据迁移和备份
  • 备份和恢复:在备份和恢复表时,了解表结构可以帮助你确保备份文件的完整性和正确性。
  • 数据迁移:在将数据从一个数据库迁移到另一个数据库时,了解表结构可以确保数据的一致性和兼容性。
  1. 调试和问题排查
  • 调试查询:在调试复杂的查询时,了解表结构可以帮助你更好地理解查询的执行计划和性能瓶颈。
  • 问题排查:在遇到数据问题时,查看表结构可以帮助你快速定位问题所在。

3.2 示例

语法:desc 表名;

示例:
命令:desc test;

在这里插入图片描述字段其实就是表

4. 修改表结构 ALTER

4.1 添加列 ADD

语法:

ALTER TABLE table_name
ADD column_name datatype [constraints];

示例:

  1. 在表中添加一个 sex 的字段
    命令:

    ALTER TABLE table_name
    ADD column_name datatype [constraints];

    在这里插入图片描述

  2. 添加一个 age 的字段,在name 的后面
    命令:

    alter table test
    add age int comment ‘年龄’ after name;

    在这里插入图片描述

4.2 修改列 MODIFY

语法:

ALTER TABLE table_name
MODIFY column_name new_datatype [new_constraints];

注意:modify 是把原来的字段属性覆盖,而不是想改什么属性就只改变什么属性。在修改表的时候需要查看创建表show create table 表名;

示例:

  1. 查看创建表
    命令:show create table test ;
    在这里插入图片描述
    我们可以看到表的具体结构,方便对表的进行修改。

  2. 修改表的 age ,字段类型改为 tiny,放在 name 后
    命令:

    alter table test
    modify age tinyint comment ‘年龄’ after name;

    在这里插入图片描述

4.3 删除列 DROP

语法:

ALTER TABLE table_name
DROP COLUMN column_name;

注意:删除字段一定要小心,删除字段及其对应的列数据都没了

示例:

  1. 删除表的 score 列(省略 column)
    命令:alter table test drop score;
    在这里插入图片描述
  2. 删除表的 sex 列(省略 column)
    命令:alter table test drop column sex;

4.4 更改列名 CHANGE

语法:

ALTER TABLE table_name
CHANGE old_column_name new_column_name new_datatype [new_constraints];

注意:change 是把原来的字段属性覆盖,而不是想改什么属性就只改变什么属性。在修改表的时候需要查看创建表show create table 表名;

示例:

  1. 查看创建表
    命令:show create table test ;
    在这里插入图片描述

  2. 更改列name 名字
    命令:

    alter table test
    change name student varchar(8) comment ‘姓名’;

    在这里插入图片描述

5. 修改表名 RENAME

语法:
ALTER TABLE old_table_name RENAME TO new_table_name;

示例:

  1. 修改表名
    命令:alter tablee test rename to study;

  2. 修改表名,不使用 to
    命令:alter table test rename study;

6. 删除表 DROP

语法:
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...

示例:
命令:drop table test;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/892669.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一次性解决vue3引入@jiaminghi/data-view需要手动修改node_modules下文件

修改文件1:node_modules\jiaminghi\data-view\lib\components\decoration6\src\main.vue 修改文件2: node_modules\jiaminghi\data-view\lib\components\decoration3\src\main.vue 修改前: 修改后: 通过打补丁的方式对引用库进行…

【自动驾驶】控制算法(十二)横纵向综合控制 | 从理论到实战全面解析

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作&…

Maven与Gradle的区别

Maven与Gradle是两种流行的构建工具,广泛用于Java项目的管理和构建。以下是它们的对比,包括官网、Windows 11配置环境、在IDEA中的相同点和不同点,以及它们各自的优缺点。 官网 Maven官网: https://maven.apache.orgGradle官网: https://gr…

将爱传递 将“服务好”延伸

从泰康客户,转身成为泰康人,她直言是因为亲身感受了泰康“服务好”的魅力。 入司已8年的泰康养老浙江分公司HWP何英英,是泰康“服务好”的受益者。她从朋友的理赔中见证了泰康服务好的温度与力量,又被泰康养老的职域模式所吸引选择加入泰康。如今,她全身心投入在服务的第一线,…

2024软考网络工程师笔记 - 第4章.局域网和城域网

文章目录 局域网基础1️⃣局域网和城域网体系架构 IEEE(负责链路层)2️⃣局域网拓扑结构 🕑CSMA/CD1️⃣CSMA/CD2️⃣CSMA/CD三种监听算法3️⃣冲突检测原理 🕒二进制指数退避算法1️⃣ 二进制指数退避算法 🕓最小帧长…

分库分表方式介绍

分库分表方式 分库分表包括分库和分表两个部分,在生产中通常包括:垂直分库、水平分库、垂直分表、水平分表四种方式; 1、垂直分表 1.1 垂直分表定义 垂直分表就是在同一数据库内将一张表按照指定字段分成若干表,每张表仅存储其…

RabbitMQ是什么?

了解MQ 消息队列(MQ)是一种用于异步通信的通信机制,通过将消息存储在队列中以实现系统之间的解耦。MQ 的主要功能是异步传递消息,允许发送者将消息发送到队列中,而接收者可以在适当的时候从队列中读取消息。MQ 常用于…

面试-2024年7月16号

面试-2024年7月16号 自我介绍Mysql主从复制是做了一个什么样的集群?在Mysql的使用过程中遇到过哪些问题?mysql迁移具体步骤mysql漏洞修复是怎么做的。mysql的容灾方案(灾备恢复机制)。redis多节点怎么部署的redis的备份与恢复、迁…

【系统配置】信创系统配置文件保护与防篡改 _ 统信 _ 麒麟 _ 方德

原文链接:【系统配置】信创系统配置文件保护与防篡改 | 统信 | 麒麟 | 方德 Hello,大家好啊!今天给大家带来一篇关于如何在信创(国产化)系统中进行配置文件保护与防篡改的文章。随着信创系统在各行业的广泛应用&#x…

Gin框架操作指南01:开山篇

Gin是目前最流行,性能最好的的GoWeb框架,几乎成为了学习GoWeb必备的知识。本人最近也在学Gin,在b站搜了很多教程,发现有的教程不够详细,有的教程工具包安装有问题,而官方文档的很多示例代码又不全&#xff…

冒泡排序.

文章目录 🍊自我介绍🍊冒泡排序排序过程图解 🍊冒泡排序代码 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞关注评论收藏(一键四连)哦~ 🍊自我介绍 Hello,大家好,我是…

【HTML】构建网页的基石

我的主页:2的n次方_ HTML 是一种超文本标记语言,不仅有文本,还能包含图片,音频等 1. HTML 的文件基本结构 html 标签是整个 html 文件的最顶层标签,head 标签中写页面的属性,body 标签是页面中显示的…

idea2024年版本

最简单安装2024.2版本idea 内带安装教程 ** 下载链接:https://pan.quark.cn/s/ab24afbaa43f 提取码:KHrq

Tauri(读音:踹你)开发简介:1.创建和运行第一个app

桌面app与web app之间的界限越来越模糊,以前可能说基于web编写的app性能不好,但是现在我们来看,不管钉钉还是vscode,都是采用了Electron框架,以web模式开发出来的。 提到Electron相信许多程序员都不陌生,它…

STM32 | STM32F4OTA_ESP8266_Bootloader为引导程序远程更新的代码(APP)

更新。点击上方"蓝字"关注我们 01、思路 >>> STM32F4OTA_ESP8266_Bootloader为引导程序 远程更新的代码(APP):远程更新的APP Ymoden_server:为运行在Linux的TCP服务器 备注:STM32 OTA远程更新需要连接热点 电…

信息抽取数据集处理——RAMS

引言 RAMS数据集(RAMS:Richly Annotated Multilingual Schema-guided Event Structure)由约翰斯霍普金斯大学于2020年发布,是一个以新闻为基础的事件抽取数据集。它标注了9,124个事件,涵盖了139种不同的事件类型和65种…

Tailwind css系列教程(二)

一、参考属性 https://tailwind.muzhifan.top/ 也可查找官方网站 以下为参考官网及网络上其他文章内容整理: 二、常用属性格式 1、颜色 color:颜色名称 shade:色度,取值范围为 100~900,不可对黑色或白色使用 文…

极化基变化后的散射矩阵

极化基只旋转一次 重点:发射和接收的电磁波可以理解为,在极化基上的坐标,或者就是琼斯矢量; 其中极化基坐标的理解方式在想发射的时候好理解,回波由于多了个共轭,就想其接收到的不是坐标,而是琼…

Power BI:链接数据库与动态数据展示案例

一、案例背景 在数据驱动的时代,如何高效、直观地展示和分析数据成为了企业决策和个人洞察的关键。Power BI作为一款强大的商业智能工具,凭借其强大的数据连接能力、丰富的可视化选项以及交互性和动态性,成为了众多企业和个人的首选。本文将…

unity学习笔记-Text mesh Pro

Text mesh Pro组件 组件使用的大致流程细节导入之后字体没有显示可能一 可能二 注意事项 好久没更了…最近在学习使用别人的框架进行开发,坑也不少,不过学习到了很多设计思维。 言归正传。忘了是什么是时候的版本开始,unity多了这个组件&…