表结构的操作【MySQL】

news2024/12/20 17:18:20

文章目录

  • 创建表
    • 例子
  • 查看表结构
  • 修改表
    • 新增列属性
    • 修改列属性
    • 修改列名
    • 修改表名
    • 删除列
  • 删除表

阅读前导:

一般来说,对表的操作可以分为对表结构和对表内容的操作。

  • 对表结构的操作,就是用数据定义语言 DDL 来创建、修改或删除表中的对象,比如字段、索引、约束等。常用的命令有 CREATE、ALTER、DROP 等。
  • 对表内容的操作,就是用数据操作语言 DML 来插入、更新或删除表中的记录,比如数据行或列。常用的命令有 INSERT、UPDATE、DELETE 等。

本文介绍对表结构的操作,在学习 MySQL 的数据类型、表的约束以后,再学习表内容的增删查改。

创建表

SQL:

CREATE TABLE [IF NOT EXISTS] table_name(
	field1 datatype1 [COMMENT '注释信息'],
	field2 datatype2 [COMMENT '注释信息'],
	field3 datatype3  [COMMENT '注释信息']
)[CHARSET=charset_name] [COLLATE=collation_name] [ENGINE=engine_name];

其中:

  • 大写单词表示关键字(使用时可以小写,MySQL 会自动优化合并),[ ] 中代表的是可选项。如果没有指定可选项,就根据配置文件选择。
  • field 表示列名,datatype 表示列的类型。
  • CHARSET 用于指定表所采用的编码格式,如果没有指定则以所在数据库的编码格式为准。
  • COLLATE 用于指定表所采用的校验规则,如果没有指定则以所在数据库的校验规则为准。
  • ENGINE 用于指定表所采用的存储引擎。
  • COMMENT 用于对指定列添加注释信息。

例子

不同的存储引擎,创建表时底层的文件类型和数量有所不同。

例如下面在一个名为table_test_db1这个数据库中分别指定存储引擎为 MyISAM 和 InnoDB 创建了名为table_test1table_test2的表,并且为它们的列属性分别添加了注释信息:

mysql> create table table_test1(
    -> id int comment '用户的 ID'
    -> )charset=utf8 engine=MyISAM;
    

mysql> create table table_test2(
    -> name varchar(20)
    -> )charset=gbk engine=InnoDB;

/var/lib/mysql/table_test_db1路径下:

image-20231022185357710

从结果上看,MyISAM 和 InnoDB 两个存储引擎在创建表的时候,文件类型和数量是不一样的。为什么呢?(这是一个常见的面试题,你可能需要在学习完「索引」这部分才能理解)

根本原因是,它们的索引结构和数据存储方式不同。下面简单介绍一下它们名字的含义:

  • MyISAM 的名字是由 ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)发展而来的,ISAM 是一种早期的数据库存储结构,它使用 B+ 树作为索引,可以快速地访问数据。MyISAM 是 ISAM 的改进版本,它增加了一些新的特性,比如全文索引、压缩、空间函数等。MyISAM 的名字中的 My 是 MySQL 的缩写,表示它是 MySQL 的专属存储引擎。
  • InnoDB 的名字是由 Innobase 公司创造的,Innobase 是一家芬兰的软件公司,它开发了 InnoDB 这个支持事务和外键的存储引擎,并将其作为插件提供给 MySQL 使用。InnoDB 的名字中的 inno 是 innovation(创新)的缩写,表示它是一个创新的存储引擎。

如果用字典来类比的话:

  • Myisam 的存储引擎,可以类比为一本普通的字典,它有一个目录,列出了所有的单词和它们在字典中的页码。你可以通过目录快速地找到你想要查的单词,然后翻到相应的页面,看到单词的解释。这本字典还有一个特殊的功能,就是它可以对一些单词进行全文搜索,比如你可以输入一个主题,它会给你返回所有和这个主题相关的单词和解释。这本字典的优点是查找速度快,全文搜索强大,缺点是不支持修改和删除单词,也不支持添加新的单词。
  • InnoDB 的存储引擎,可以类比为一本特殊的字典,它没有目录,而是把所有的单词按照字母顺序排列在一起,形成一个长长的链表。你可以从头到尾地遍历这个链表,找到你想要查的单词,然后看到单词的解释。这本字典还有一个特殊的功能,就是它可以对一些单词进行事务处理,比如你可以修改或删除某个单词,或者添加一个新的单词,并且保证这些操作是原子性、一致性、隔离性和持久性的。这本字典的优点是支持事务处理,高并发性能好,缺点是查找速度慢,不支持全文搜索。

这是比较标准的答案:

  • MyISAM 的索引和数据是分开的,索引文件只保存数据记录的地址,这种索引叫做非聚簇索引。MyISAM 支持全文索引,可以对文本类型的字段进行快速搜索。MyISAM 的表可以有多个文类型的字段,但是只能有一个全文索引。
  • InnoDB 的数据和主键索引是紧密绑定的,数据文件本身就是按 B+ 树组织的一个索引结构,这种索引叫做聚簇索引。InnoDB 不支持全文索引,但是支持外键和事务。InnoDB 的表只能有一个文类型的字段,并且必须有主键。

所以,MyISAM 存储引擎将表数据和表索引拆开存储:

  • MyISAM:
    • .frm:表结构文件(format)。存了表的定义信息,如字段名、类型、约束等,这个文件与存储引擎无关,每个表都有一个。
    • .MYD:表数据文件(MY Data)。保存了表中的记录,按照顺序存储,每条记录占用固定的字节数。
    • .MYI:表索引文件(MY Index)。保存了表中的索引信息,使用 B+ 树结构组织,可以快速地定位到数据文件中的记录。
  • InnoDB:
    • .frm:表结构文件。作用同上。
    • .ibd:表空间文件(InnoDB Data)。保存了表的数据和索引信息,使用聚集索引结构组织,把主键和数据紧密绑定在一起。

查看表结构

SQL:

desc <表名>;
image-20231022191513043

表结构的各个列属性:

  • Field 表示该字段的名字。
  • Type 表示该字段的类型。
  • Null 表示该字段是否允许为空。
  • Key 表示索引类型,比如主键索引为 PRI。
  • Default 表示该字段的默认值。
  • Extra 表示该字段的额外信息说明。

这些属性的具体细节,将会在 MySQL 的数据类型中学习。

虽然这些 SQL 的关键字标准写法需要大写,但是在使用时可以用小写,这是因为 MySQL 会对用户输入的 SQL 做语法分析和优化,使用

show create table <表名> \G

show create database <数据库名> \G

来查看创建表或数据库格式化后的 SQL:

image-20231022191947763

修改表

SQL:

ALTER TABLE table_name ADD 新增列名 新增列的属性;

ALTER TABLE table_name MODIFY 列名 修改后的列属性;

ALTER TABLE table_name DROP 列名;

ALTER TABLE table_name RENAME [TO] 新表名;

ALTER TABLE table_name CHANGE 列名 新列名 新列属性;

新增列属性

为刚才创建的table_test1表中增加nameadress列属性:
image-20231022193155544

如果你想让新的一列插入到 name 列之后,只需在 SQL 的最后增加after name;如果要放在第一列,换成not null first

插入两条数据:

image-20231022193705174

修改列属性

修改列属性,会将这一列的所有数据的属性都修改。

例如修改adress属性为varchar(64)

image-20231022194058081

值得注意的是, MySQL 在修改时,会把原来的列定义替换为新的列定义,而不是在原有的基础上修改。所以如果想保留原来的 comment 字段,需要再修改时显式定义。

修改列名

将上表的adress改为home

image-20231022194646689

由于 MySQL 在修改列属性是是替换而不是直接修改,所以在修改列名时要指定列属性。

修改表名

table_test1表改为test_table1

image-20231022195008486

删除列

test_table1表中的name列删除:

image-20231022195328802

删除这一列后,一整列的数据都没有了。除了备份外,MySQL 会记忆之前的所有插入的 SQL,其中包含了数据本身。

删除表

SQL:

DROP [TEMPORARY] TABLE [IF EXISTS] table_name;

其中:

  • 在创建表语句中加上 TEMPORARY 关键字,那么服务器将创建出一个临时表,该表会在你与服务器的会话终止时自动消失。
  • TEMPORARY 表的名字可以与某个已有的永久表相同,当有 TEMPORARY 表存在时,对应的永久表会隐藏起来(即无法访问)。
  • 为了避免重新连接后(TEMPORARY 已经不存在),在未做检测的情况下调用 DROP 误删了对应永久表,因此在使用 DROP 删除临时表时需要带上 TEMPORARY 关键字。

删除table_test_db1数据库中的table_test2表:
image-20231022195709736

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

elementUI 中 date-picker 的使用的坑(vue3)

目录 1. 英文显示2. format 与 value-format 无效3. date-picker 时间范围4. 小结 1. 英文显示 <el-date-pickerv-model"dateValue"type"date"placeholder"选择日期"></el-date-picker>解决方案&#xff1a; 引用 zhCn <script&g…

web开发初级工程师学习笔记

web开发初级工程师学习笔记 前端开发工具实验1 VS Code 初体验介绍 前端开发工具 实验1 VS Code 初体验 介绍 VS Code 环境提供的是一个可以在浏览器中使用原生 VS Code 编辑代码的程序。在该环境中&#xff0c;你可以使用到与本地安装近乎一致的 VS Code 程序来编辑代码文件…

PAM从入门到精通(十九)

接前一篇文章&#xff1a;PAM从入门到精通&#xff08;十八&#xff09; 本文参考&#xff1a; 《The Linux-PAM Application Developers Guide》 PAM 的应用开发和内部实现源码分析 先再来重温一下PAM系统架构&#xff1a; 更加形象的形式&#xff1a; 六、整体流程示例 2.…

linux安装visual studio code

下载 https://code.visualstudio.com/ 下载.deb文件 安装 假如文件被下载到了 /opt目录下 进入Opt目录&#xff0c;右键从当前目录打开终端。 输入下面的安装命令。 sudo apt-get install ./code_1.83.1-1696982868_amd64.deb 安装成功。 配置 打开 visual studio cod…

博客续更(五)

十一、后台模块-菜单列表 菜单指的是权限菜单&#xff0c;也就是一堆权限字符串 1. 查询菜单 1.1 接口分析 需要展示菜单列表&#xff0c;不需要分页。可以针对菜单名进行模糊查询。也可以针对菜单的状态进行查询。菜单要按照父菜单id和orderNum进行排序 请求方式 请求路径…

Sentinel授权规则和规则持久化

大家好我是苏麟 , 今天说说Sentinel规则持久化. 授权规则 授权规则可以对请求方来源做判断和控制。 授权规则 基本规则 授权规则可以对调用方的来源做控制&#xff0c;有白名单和黑名单两种方式。 白名单&#xff1a;来源&#xff08;origin&#xff09;在白名单内的调用…

Linux下Jenkins自动化部署SpringBoot应用

Linux下Jenkins自动化部署SpringBoot应用 1、 Jenkins介绍 官方网址&#xff1a;https://www.jenkins.io/ 2、安装Jenkins 2.1 centos下命令行安装 访问官方&#xff0c;点击文档&#xff1a; 点击 Installing Jenkins&#xff1a; 点击 Linux&#xff1a; 选择 Red Hat/…

H3C IMC dynamiccontent.properties.xhtm 远程命令执行

我举手向苍穹&#xff0c;并非一定要摘星取月&#xff0c;我只是需要这个向上的、永不臣服的姿态。 构造payload&#xff1a; /imc/javax.faces.resource/dynamiccontent.properties.xhtml pfdrtsc&lnprimefaces&pfdriduMKljPgnOTVxmOB%2BH6%2FQEPW9ghJMGL3PRdkfmbii…

智慧公厕设备选型攻略,打造智能化便利生活体验

智慧公厕设备的选型对于打造智能化便利生活体验起着至关重要的作用。在不断提升城市品质的背景下&#xff0c;智慧公厕已成为城市建设中的一项重要内容。在选购智慧公厕设备时&#xff0c;我们需要考虑到不同版本的功能要求&#xff0c;确保公厕设备的质量和性能。本文以智慧公…

[代码随想录]回溯、贪心算法篇

文章目录 1.回溯算法1.1 77-组合1.2 216-组合的综合III1.3 17-电话号码的字母组合1.4 39-组合总和1.5 40-组合总和II1.6 131-分割回文串1.7 93-复原IP地址1.8 78-子集1.9 90-子集II1.10 491-递增子序列1.11 46-全排列1.12 47-全排列II1.13* 51-N皇后 2. 贪心算法2.1 455-分发饼…

QCC 音频输入输出

QCC 音频输入输出 QCC蓝牙芯片&#xff08;QCC3040 QCC3083 QCC3084 QCC5181 等等&#xff09;支持DAC、I2S、SPDIF输出&#xff0c;AUX、I2S、SPDIF、A2DP 输入 蓝牙音频输入&#xff0c;模拟输出是最常见的方式。 也可以再此基础上动态切换输入方式。 输入方式切换参考 sta…

设计模式:命令模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

简介&#xff1a; 命令模式&#xff0c;它是一种行为型设计模式&#xff0c;它尝试将请求或操作封装成对象&#xff0c;从而降低系统的耦合度&#xff0c;增加系统的可扩展性&#xff0c;并支持撤销、重做、事务等功能。 在命令模式中&#xff0c;请求被封装为一个独立的对象…

postgresql14-模式的管理(三)

基本概念 postgresql成为数据库管理系统DBMS&#xff0c;在内存中以进程的形态运行起来成为一个实例&#xff0c;可管理多个database。 数据库databases&#xff1a;包含表、索引、视图、存储过程&#xff1b; 模式schema&#xff1a;多个对象组成一个模式&#xff0c;多个模…

09-React路由使用(React Router 6)

9-React Router 6的使用 1.概述 React Router 以三个不同的包发布到 npm 上&#xff0c;它们分别为&#xff1a; react-router: 路由的核心库&#xff0c;提供了很多的&#xff1a;组件、钩子。react-router-dom: 包含react-router所有内容&#xff0c;并添加一些专门用于 DOM …

期中考misc复现

第一题 flow analysis 1 服务器附带的后门文件名是什么&#xff1f;&#xff08;包括文件后缀&#xff09; webshell是网站的后门&#xff0c;也是一个命令解释器。不过是以http协议这样的方式通信。继承了web权限 我们过滤http和https http && http.response.code…

机器学习中常见的特征工程处理

一、特征工程 特征工程&#xff08;Feature Engineering&#xff09;对特征进行进一步分析&#xff0c;并对数据进行处理。 常见的特征工程包括&#xff1a;异常值处理、缺失值处理、数据分桶、特征处理、特征构造、特征筛选及降维等。 1、异常值处理 具体实现 from scipy.s…

ant javac任务的fork和executable属性

ant javac任务是用于编译源文件的。 它的fork属性表示是否用JDK编译器在外部执行javac&#xff0c;取值可以为"yes"、“no”&#xff0c;默认值为"no"。 当fork属性的取值为"yes"时&#xff0c;可以用executable属性指明javac可执行文件的完全…

clion本地调试nginx-1.22.1

1 概述 nginx是一个多进程模型的流量代理软件&#xff0c;在本地调试时需要将它设置为单进程模式。 2 下载nginx源码 mkdir -p /opt/third-party cd /opt/third-party wget http://nginx.org/download/nginx-1.22.1.tar.gz tar xf nginx-1.22.1.tar.gz ls /opt/third-party…

Linux系统自有服务

一、Linux中防火墙firewalld 1、什么是防火墙 防火墙&#xff1a;防范一些网络攻击。有软件防火墙、硬件防火墙之分。 防火墙选择让正常请求通过&#xff0c;从而保证网络安全性。 Windows防火墙&#xff1a; Windows防火墙的划分与开启、关闭操作&#xff1a; 2、防火墙的作…

程序员提高效率的工具和习惯分享

文档待完善.... 思维方式 X-Y Problem | 酷 壳 - CoolShell 程序员如何把控自己的职业 | 酷 壳 - CoolShell 笔记软件 语雀&#xff1a;多平台&#xff0c;云同步&#xff0c;md文档&#xff0c;在线协作&#xff1b; 一键启动必要的软件&#xff1a;bat脚本 电脑重启后可以…