MySQL:管理和操作数据表

news2025/1/21 7:40:11

数据表是数据库的重要组成部分,每一个数据库都是由若干个数据表组成的。没有数据表就无法在数据库中存放数据。MySQL数据表的管理和操作是数据库管理员和开发人员日常工作中不可或缺的一部分。

创建数据表 CREATE

创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性)约束的过程。

基本语法

在MySQL中,可以使用 CREATE TABLE 语句创建表:

CREATE TABLE (IF NOT EXISTS)<表名> (表定义选项)(表选项)(分区选项);
'''
`[表定义选项]`的格式为:  

<列名1> <类型1> [,…] <列名n> <类型n>
'''

CREATE TABLE 命令语法比较多,其主要是由
表创建定义(create-definition)、
表选项(table-options)
分区选项(partition-options)所组成的。

使用CREATE TABLE创建表时,必须指定以下信息:

  • 要创建的表的名称不区分大小写,不能使用SQL语言中的关键字,如DROP
    ALTERINSERT等。

  • 数据表中每个列(字段)的名称和数据类型,创建多个列要用逗号隔开。

使用说明
  • CREATE TABLE:用于创建给定名称的表,必须拥有表CREATE的权限

  • <表名>:指定要创建表的名称,必须符合标识符命名规则。表名称被指定为 db_name.tbl_name,以便在特定的数据库中创建表。无论是否有当前数据库,都可以通过这种方式创建。

  • 在当前数据库中创建表时,可以省略 db-name。如果使用加引号的识别名,则应对数据库和表名称分别加引号。例如,‘mydb’.‘mytbl’ 是合法的,但 ‘mydb.mytbl’ 不合法。

  • <表定义选项>:表创建定义,由列名(col_name)、列的定义(column_definition)以及可能的空值说明、完整性约束或表索引组成。

  • 默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存在,则会出现错误。

示例
CREATE TABLE demo(
	id INT NOT NULL AUTO_INCREMENT,
	name VARCHAR(10) (DEFAULT '匿名' COMMENT '姓名',
	···
	(CONSTRAINT fk_demo0_demo FOREIGN KEY (demoID) REFERENCES demo(id)) 
	'''建立名为fk_demo0_demo的外键约束,demo为父表,
	   其主键demoID被demo关联'''
)ENGINE=INNODB DEFAULT CAHRSET=utf8;
# “COMMENT” 关键字后跟一个字符串来为表添加注释,提供关于表的额外信息

修改数据表 ALTER

修改数据表的前提是数据库中已经存在该表。修改表指的是修改数据库中已经存在的数据表的结构。

在 MySQL 中可以使用 ALTER TABLE 语句来改变原有表的结构,例如增加或删减列、更改原有列类型、重新命名列或表等:

ALTER TABLE <表名> <修改选项> 

'''
修改选项的语法格式如下:

| ADD COLUMN <列名> <类型> [完整性约束]
| CHANGE COLUMN <旧列名> <新列名> <新列类型>  
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT }  
| MODIFY COLUMN <列名> <类型>  
| DROP COLUMN <列名> [CASCADE|RESTRICT] 
| ADD CONSTRINT<完整性约束名> <完整性约束>
| DROP CONSTRINT<完整性约束名> [CASCADE|RESTRICT] 
| RENAME TO <新表名>  
| CHARACTER SET <字符集名>  
| COLLATE <校对规则名> 

'''
修改表名 RENAME
ALTER TABLE <旧表名> RENAME [TO] <新表名>#TO 为可选参数,使用与否不影响结果

'''示例'''
ALTER TABLE student RENAME TO student_info;

修改表名并不修改表的结构,因此修改名称后的表和修改名称前的表的结构是相同的。

注意事项:

  • 在重命名表时,确保新的表名在数据库中是唯一的,以避免与其他表重名。

  • 如果表有外键关联或被其他对象引用,需要确保相应的关联和引用也进行了更新。

修改存储引擎 ENGINE
ALTER TABLE [表名] ENGINE = [新引擎];

存储引擎的更换可能会影响表的性能、事务支持以及其他功能。在更换存储引擎之前,确保了解新存储引擎的特性和限制,并在生产环境中进行充分的测试。

另外,不同的数据库管理系统支持不同的存储引擎,并且某些存储引擎可能不可用或受到特定数据库版本的限制。

修改字符集 CHARACTER SET

MySQL 通过 ALTER TABLE 语句来实现表字符集的修改:

ALTER TABLE 表名 [DEFAULT] CHARACTER SET <字符集名> [DEFAULT] COLLATE <校对规则名>;

# DEFAULT 为可选参数,使用与否均不影响结果。

'''示例'''
ALTER TABLE student CHARACTER SET gb2312 
DEFAULT COLLATE gb2312_chinese_ci;

#将数据表 student 的字符集修改为 gb2312,校对规则修改为 gb2312_chinese_ci

通过修改表的字符集和排序规则,可以确保表能够存储和处理特定编码的数据。这对于需要支持不同语言或从不同字符集的数据库迁移数据时非常有用。

需要注意的是,修改表的字符集和排序规则可能会影响现有数据和查询的行为。在进行这些修改之前,请务必备份数据并仔细考虑其影响。

添加字段 ADD

MySQL 数据表是由行和列构成的,通常把表的 “列” 称为字段(Field)
把表的 “行” 称为记录(Record)。随着业务的变化,可能需要在已有的表中添加新的字段。

MySQL 允许在开头、中间和结尾处添加字段。一个完整的字段包括字段名、数据类型和 [[MySQL Constraint|约束条件]]

在末尾添加字段 ADD

末尾添加字段的语法格式如下:

ALTER TABLE <表名> ADD <新字段名><数据类型><约束条件>;
  • <表名> 为数据表的名字;
  • <新字段名> 为所要添加的字段的名字;
  • <数据类型> 为所要添加
ALTER TABLE student ADD new_data VARCHAR(10);
在开头添加字段 ADD…FIRST

在开头位置(第一列的前面)添加新字段,语法格式如下:

ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] FIRST;

'''示例'''

alter table student ADD new_data INT(4) FIRST;
在中间位置添加字段 ADD…AFTER

在中间位置(指定的字段之后)添加字段,语法格式如下:

ALTER TABLE <表名> ADD <新字段名> <数据类型> [约束条件] AFTER 
<已经存在的字段名>;

# AFTER 的作用是将新字段添加到某个已有字段后面。

'''示例'''
ALTER TABLE student brand_new_demo INT(4) AFTER new_data;

只能在某个已有字段的后面添加新字段,不能在它的前面添加新字段。

修改字段
修改字段名 CHANGE COLUMN

MySQL 中修改表字段名称的语法规则如下:

ALTER TABLE <表名> CHANGE COLUMN <旧字段名><新字段名> <新数据类型>
  • 旧字段名:指修改前的字段名;

  • 新字段名:指修改后的字段名;

  • 新数据类型:指修改后的数据类型,如果不需要修改字段的数据类型,可以将新数据类型设置成与原来一样,但数据类型不能为空。

  • CHANGE 也可以只修改数据类型,实现和 MODIFY 同样的效果,方法是将 SQL 语句中的 “新字段名”和“旧字段名”设置为相同的名称,只改变“数据类型”

  • 由于不同类型的数据在机器中的存储方式及长度并不相同,修改数据类型可能会影响数据表中已有的数据记录,因此,当数据表中已经有数据时,不要轻易修改数据类型

"""示例"""
ALTER TABLE student CHANGE old new INT(4);
ALTER TABLE student CHANGE old old INT(4);
ALTER TABLE student CHANGE old new VARCHAR(10);
修改字段数据类型 MODIFY

修改字段的数据类型就是把字段的数据类型转换成另一种数据类型。

在 MySQL 中修改字段数据类型的语法规则如下:

ALTER TABLE <表名> MODIFY <字段名> <数据类型>
  • 表名:指要修改数据类型的字段所在表的名称;
  • 字段名:指需要修改的字段;
  • 数据类型:指修改后字段的新数据类型。
ALTER TABLE student MODIFY _data_ INT(4);

'''等价于'''

ALTER TABLE student CHANGE _data_ _data_ INT(4);
更换字段位置 MODIFY AFTER

将字段更换到目标字段后,在MySQL中无法使用BEFORE关键字,将字段更换到目标字段前,只能使用AFTER

ALTER TABLE table_name
MODIFY column_name column_datatype AFTER destinate_column_name
删除字段 DROP

删除字段是将数据表中的某个字段从表中移除,语法格式如下:

ALTER TABLE <表名> DROP <字段名>;
  • “字段名”指需要从表中删除的字段的名称。

删除数据表 DROP

对于不再需要的数据表,我们可以将其从数据库中删除。

在删除表的同时,表的结构和表中所有的数据都会被删除,因此在删除数据表之前最好先备份,以免造成无法挽回的损失

基本语法

使用 DROP TABLE 语句可以删除一个或多个数据表,语法格式如下:

DROP TABLE [IF EXISTS] 表名1 [ ,表名2, 表名3 ...]
  • 表名1, 表名2, 表名3 ... 表示要被删除的数据表的名称。DROP TABLE 可以同时删除多个表,只要将表名依次写在后面,相互之间用逗号隔开即可。

  • IF EXISTS 用于在删除数据表之前判断该表是否存在。如果不加 IF EXISTS,当数据表不存在时 MySQL 将提示错误,中断 SQL 语句的执行;加上 IF EXISTS 后,当数据表不存在时 SQL 语句可以顺利执行,但是会发出警告(warning)。

  • 用户必须拥有执行 DROP TABLE 命令的权限,否则数据表不会被删除

  • 表被删除时,用户在该表上的权限不会自动删除

删除被其他表关联的主表

数据表之间经常存在外键关联的情况,这时如果直接删除父表,会破坏数据表的完整性,也会删除失败。

当主表在存在外键约束时,不能被直接删除。

删除父表有以下两种方法:

  • 先删除与它关联的子表,再删除父表;但是这样会同时删除两个表中的数据。

  • 将关联表的外键约束取消,再删除父表;适用于需要保留子表的数据,只删除父表的情况:

ALTER TABLE tb_emp5 DROP FOREIGN KEY fk_emp4_emp5;
#解除子表 tb_emp5 的外键约束

DROP TABLE tb_emp4;
#删除父表tb_emp4

查看表结构 DESC

创建完数据表之后,经常需要查看表结构(表信息)。在 MySQL 中,可以使用 DESCRIBESHOW CREATE TABLE 命令来查看数据表的结构。

DESCRIBE:以表格的形式展示表结构

DESCRIBE/DESC 语句会以表格的形式来展示表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等,语法格式如下:

DESCRIBE <表名>;

或简写成:

DESC <表名>;

![[MySQL DESC example.png]]

  • Null:表示该列是否可以存储 NULL 值。
  • Key:表示该列是否已编制索引。PRI 表示该列是表主键的一部分,
    UNI 表示该列是 UNIQUE 索引的一部分,MUL 表示在列中某个给定值允许出现多次。
  • Default:表示该列是否有默认值,如果有,值是多少。
  • Extra:表示可以获取的与给定列有关的附加信息,如 AUTO_INCREMENT 等。
SHOW CREATE TABLE:以SQL语句的形式展示表结构

SHOW CREATE TABLE命令会以 SQL 语句的形式来展示表信息。
DESCRIBE 相比,SHOW CREATE TABLE 展示的内容更加丰富,它可以查看表的存储引擎和字符编码

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

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

相关文章

数字图像处理 --- 图像的离散余弦变换(python实战)

图像的离散余弦变换(python实战) 这篇文章是我上两篇文章的延续&#xff0c;主要是觉得前面的文章太长了&#xff0c;所以把关于图像的DCT变换部分单独拎出来放到这里&#xff0c;这两篇文章分别是&#xff1a; 1&#xff0c;一维DCT 数字信号处理 --- 一维离散余弦变换(pyth…

搜维尔科技:【研究】Haption的自动识别技术

Real-Time Interaction for Delmia Human RTID Human “Real-Time Interaction for Delmia Human” 是个附加在Delmia V5™上的软件&#xff0c;它能让使用者使用数字人体模型在虚拟环境中进行实时互动仿真 在Delmia 中使用RTI &#xff0c;使用者可以模拟进行以下研究: 1. 可…

table car vs. table cars:数据库命名用单数还是复数?

数据库的命名方式已经形成了许多共识&#xff0c;比如全部小写、下划线分隔、使用标准缩写等&#xff1b;其中就包括「使用单数名词」。 用户 jonr 在 reddit 网的程序员笑话&#xff08;ProgrammerHumor&#xff09;社区发了一篇帖子&#xff0c;调侃这些数据库命名方式的共识…

突破csdn每日15篇文章限制的方法

买一个vip年会员248元&#xff0c;就可以了.......

Linux-3:Shell编程——基础语法(0-50%)

目录 前言 一、变量 1.定义变量 2.使用变量 3.修改变量 4.将命令的结果赋值给变量 5.只读变量 6.删除变量 二、传递参数 三、字符串 1.字符串举例 2.统计字符串长度 3.字符串拼接 4.截取字符串 总结 前言 Shell是一种程序设计语言。作为命令语言&#xff0c;它…

算法学习day26

滑动窗口系列题 一、替换后的最长重复子串 给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符&#xff0c;并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。 在执行上述操作后&#xff0c;返回 包含相同字母的最长子字符串的长度。 输入&#xff1a…

MySQL--MySQL函数

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 MySQL函数 一、MySQL函数简介 函数表示对输入参数值返回一个具有特定关系的值&#xff0c;MSOL提供了大量丰富的函数&#xff0c;在进行数据库管理以…

CTFHub——XSS全系列

1、反射型&#xff1a; 发现为表单式&#xff0c;猜测哪个可能存在注入漏洞&#xff0c;分别做测试注入发现name框存在xss漏洞 输入发现有回显但不是对方cookie&#xff0c;参考wp发现要用xss线上平台 将xss平台测试语句注入&#xff0c;将得到的url编码地址填入url框&#xf…

Mongodb集合操作

文章目录 1、进入容器2、如果数据库不存在&#xff0c;则创建数据库&#xff0c;否则切换到指定数据库3、在 MongoDB 中&#xff0c;创建集合不是必须操作。当你插入一些文档时&#xff0c;MongoDB 会自动创建集合。4、查看数据库列表5、查看集合6、显示创建集合7、删除集合 1、…

Raspberry Pi Docker 运行 IRIS

在 Raspberry Pi 上成功安装 Docker 后可以安装 IRIS 数据库。 安装的命令为&#xff1a; docker run --name my-iris -d --publish 1972:1972 --publish 52773:52773 intersystems/irishealth-community:latest-em-linux-arm64v8 注意&#xff0c;我们这里暴露了 2 个端口&a…

Spring框架 配置Gateway网关/spring cloud gateway 基础入门案例教程

文章目录 目录 文章目录 安装流程 小结 概要安装流程技术细节小结 概要 网关作为微服务集群唯一的对外入口,可以实现很多功能. 例如: 统一的解决跨域(一个ajax请求 origin域名和请求目标url中域名不同,ip不同,域名不同,端口不同,都会引发的问题)问题. 统一的身份认证.认证解…

OpenStack Yoga版安装笔记(十)placement练习

1、练习场景说明 在OpenStack Yoga版安装笔记&#xff08;九&#xff09;中&#xff0c;placement已经在controller node虚拟机上安装完成&#xff0c;并且已经成功拍摄了快照。 此时&#xff0c;controller node虚机已经安装了keystone、keystone DB、glance、glance DB、Open…

反序列化漏洞vulhub靶场serial

环境搭建 下载 https://download.vulnhub.com/serial/serial.zip 解压出来就是这种 你会得到一个这样的文件&#xff0c;这里使用VMware新建一个虚拟机&#xff0c;这里记录比较重要的几部分。 这里就是使用我们刚才下过来的。 漏洞过程详解 1.信息收集 打开靶机&#xff0…

干货满满,从零到一:编程小白如何在大学成为编程大神?

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Git(4) 解决Git相关问题的实用技巧

本文将介绍一些Git实用的技巧&#xff0c;实际操作中解决常见的Git问题。 问题1&#xff1a;将本地项目推送到远程仓库 如何将本地项目推送到远程仓库&#xff0c;包括处理常见错误的方法&#xff0c;并最终将代码推送到 main 分支。 步骤 1. 初始化本地仓库 确保已经在本地…

类和对象的深入了解6

1.初始化列表 初始化列表&#xff1a;以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成员列表&#xff0c;每个"成员变量"后面跟一个放在括 号中的初始值或表达式。 class Date { public:Date(int year, int month, int day): _year(year), _month(month),…

Cellpress|单细胞文章|单细胞转录和大队列食管癌免疫治疗

新辅助免疫检查点阻断 (ICB) 在可手术食管鳞状细胞癌 (ESCC) 中显示出希望&#xff0c;但缺乏可用的疗效生物标志物。该文章对接受新辅助 ICB 的 ESCC 患者的肿瘤进行单细胞 RNA 测序&#xff0c;发现一组表达SPRY1 (CD8 Tex-SPRY1) 的耗竭 CD8 T 细胞亚群&#xff0c;其显示…

72.结构体变量直接赋值

目录 一.结构体变量直接赋值 二.视频教程 一.结构体变量直接赋值 通过上节课的学习得出了一个结论&#xff1a;俩个相同类型的结构体变量直接可以只用赋值号进行赋值。 像这样&#xff1a; struct test {int a;int b; };int main(void) {struct test x {1,2};struct test …

反序列化靶机实战serial(保姆级教程)

一.信息收集 靶机地址下载&#xff1a;https://download.vulnhub.com/serial/serial.zip 打开靶机&#xff0c;在kali虚拟机中进行主机存活探测 可以知道靶机ip地址为192.168.133.171 然后扫描端口 可以发现有一个22端口跟80端口 然后接下来用kali扫描它的目录 可以发现有一…

10年仓库管理经验:“管、存、发、盘”一文搞定!

前段时间去一家仓储设备公司交流学习&#xff0c;和一位有着10年经验的老仓管聊了个痛快&#xff0c;从他那儿学到了不少仓库管理的实践方法。 回来自己整理了一套仓库管理高效的实用方法&#xff0c;现在就来跟大家伙儿聊聊仓库管理中那些常见问题&#xff0c;以及我是怎么琢…