【MySQL】-- 表的操作

news2024/11/19 16:40:53

目录

表的操作

创建表

创建表案例

查看表结构

查看表结构案例

查看历史上表的创建语句

修改表

修改表实例 

新增列属性 

修改列属性 

删除列属性 

修改列名

修改表名

删除表


表的操作

创建表

语法:

CREATE TABLE (if not exists) `table_name` (
    field1 datatype,
    field2 datatype,
    field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎; -(这一串可以省略,MySQL会自动添加)
说明:
  • field:表示列名。
  • datatype:表示列的类型。
  • character set:字符集,如果没有指定字符集,则以所在数据库的字符集为准。
  • collate:校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准。

创建表案例

(对于数据类型此文不讲)

        首先需要确保在数据库中,在做下述操作。

create table users (
    id int,
    name varchar(20) comment '用户名',
    password char(32) comment '密码是32位的md5值',
    birthday date comment '生日'
) character set utf8 engine MyISAM;
        comment: 就是对一列的描述,可以理解为日常生活中的一些execl文件中的备注:

        只不过其备注是可以给每一个加备注,姓名加备注、数学加备注……。说白了就是comment并不影响最终表结构,它只是用comment的方式来对一行的属性进行说明,来增加表结构的可读性。

        这个时候再看我们的数据库内部就会发现有了三个文件。

说明:
        不同的存储引擎,创建表的文件不一样,users 表存储引擎是 MyISAM ,在数据目中有三个不同的文件,分别是:
  • users.frm:表结构
  • users.MYD:表数据
  • users.MYI:表索引

        换而言之,如果存储引擎是MyISAM,它是一个数据库表对应的磁盘文件是三个(前缀一样表示一种表)

查看表结构

desc 表名;

查看表结构案例

desc users;

#问:commend字段去哪了?

查看历史上表的创建语句

输入:

show create table users;

输出:

+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                             |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| users | CREATE TABLE `users` (
  `id` int(11) DEFAULT NULL COMMENT '用户的id值',
  `name` varchar(20) DEFAULT NULL COMMENT '用户名',
  `password` varchar(32) DEFAULT NULL COMMENT '用户的登陆密码',
  `birthday` date DEFAULT NULL COMMENT '用户的生日'
) ENGINE=MyISAM DEFAULT CHARSET=utf8                    |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

        如果觉得分割碍眼可以换为\G。 

mysql> show create table users \G;
*************************** 1. row ***************************
       Table: users
Create Table: CREATE TABLE `users` (
  `id` int(11) DEFAULT NULL COMMENT '用户的id值',
  `name` varchar(20) DEFAULT NULL COMMENT '用户名',
  `password` varchar(32) DEFAULT NULL COMMENT '用户的登陆密码',
  `birthday` date DEFAULT NULL COMMENT '用户的生日'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

        这样就可以按照我们方便观看的精确的按行显示。可以发现这个建表与我们刚刚所写的,并不是完全的一样的。因为我们的建表的SQL语句,最终被下发到mysqld,然后mysqld内部做词法语法分析,以及对我们的MySQL做优化。

        比如,它发现我们的数据库的字符集和校验规则就是utf8,于是就没有必要指明了,其就优化为默认的。编译器发现idname、……,这些没有带反应号,于是优化的规范补上,以及SQL语句关键字的大小。

#问:如果将存储引擎更改一个进行使用?

create table if not exists `students`(
    name varchar(20) ,
    age int ,
    number varchar(32),
    sex char(1)
)engine=InnoDB default(可以省略) charset=utf8;

        我们可以这么变化的书写创建方式,就是因为背后有MySQL进行SQL语句的专业化。

        这个时候再看我们的数据库内部就会发现有了两个文件。

        换而言之,如果存储引擎是InnoDB,它是一个数据库表对应的磁盘文件是两个(前缀一样表示一种表)

#:数据库里的显示一张表就是逻辑结构,磁盘里文件是多个文件就是物理结构,mysqld服务保证物理到逻辑的抽象。

修改表

        在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我们还有需求,添加字段,删除字段等等。这时我们就需要修改表。
新增一列属性:
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column datatype]...);
修改一列属性:
ALTER TABLE tablename MODIfy (column datatype [DEFAULT expr][,column datatype]...);
删除一列属性:
ALTER TABLE tablename DROP (column);

#:一个表结构跟数据库一样,要建就提前建好,前期的话可以去改,但是最好的是里面的数据都是测试数据,一旦正式上线了,这个表就绝对不能改。因为一改就很容易造成影响,必将完整的大量行数数据,突然增加一列属性,也就必定此相对于其他列属性,就必定空很多数据 -- 数据库这里前期工作一定要做好不能出现任何的纰漏,不能贸然草率的建表,然后后期填填补补,项目就很容易出问题

修改表实例 

  • 在users表添加二条记录(超出范围,此文不讲,只为展示)
insert into users (id, name, password, birthday) values(1,'a','b','2023-05-18'),(2,'b','c','2023-05-19');

新增列属性 

  • 在users表添加一个字段(新增一列属性),用于保存图片路径

        即,上述的新增一列属性。

alter table users add image_path varchar(128) commit '该用户的头像图片的路径' after birthday;

        通过查看历史上表的创建语句,可以发现它除了将我们新增的一列属性插入到表当中,其实构建表的SQL语句也发生了改变。所以MySQL是非常强的,它能准确的识别到,我们修改了哪一个表,我们改的表的结构,于是便将整个SQL语句都变了

        所以在外部看来,我们可能将表结构改了很多次,但是最终在MySQL看来就用一句SQL一次创建了表。

mysql> show create table users \G;
*************************** 1. row ***************************
       Table: users
Create Table: CREATE TABLE `users` (
  `id` int(11) DEFAULT NULL COMMENT '用户的id值',
  `name` varchar(20) DEFAULT NULL COMMENT '用户名',
  `password` varchar(32) DEFAULT NULL COMMENT '用户的登陆密码',
  `birthday` date DEFAULT NULL COMMENT '用户的生日',
  `image_path` varchar(128) DEFAULT NULL COMMENT '该用户的头像图片的路径'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

修改列属性 

  • 修改name,将其长度改成60
        即,上述的修改一列属性。
 alter table users modfity name varchar(60);

         通过查看历史上表的创建语句。
mysql> show create table users \G;
*************************** 1. row ***************************
       Table: users
Create Table: CREATE TABLE `users` (
  `id` int(11) DEFAULT NULL COMMENT '用户的id值',
  `name` varchar(60) DEFAULT NULL,
  `password` varchar(32) DEFAULT NULL COMMENT '用户的登陆密码',
  `birthday` date DEFAULT NULL COMMENT '用户的生日',
  `image_path` varchar(128) DEFAULT NULL COMMENT '该用户的头像图片的路径'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

        我们可以发现,虽然将一列属性当中的类型进行了修改,但是name原来的comment描述也没有了。 所以MySQL当中对列进行修改,其实是要将新属性全部覆盖式的覆盖到老属性上

alter table users modify name varchar(60) comment '这是新的用户名';

        通过查看历史上表的创建语句。 

mysql> show create table users \G;
*************************** 1. row ***************************
       Table: users
Create Table: CREATE TABLE `users` (
  `id` int(11) DEFAULT NULL COMMENT '用户的id值',
  `name` varchar(60) DEFAULT NULL COMMENT '这是新的用户名',
  `password` varchar(32) DEFAULT NULL COMMENT '用户的登陆密码',
  `birthday` date DEFAULT NULL COMMENT '用户的生日',
  `image_path` varchar(128) DEFAULT NULL COMMENT '该用户的头像图片的路径'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

删除列属性 

  • 删除id列。
alter table users drop id;

        删除库的后果是很严重的,一定要考虑到,删除的后果是否可以进行承担。

注意:当一个表只剩一列的时候,MySQL就不允许让我们继续删除了,如果还是要删除,那就使用删除表的指令来进行删除。

修改列名

  •  将name列修改为xingming 
alter table users change name xingming varchar(60) comment '这个新增的用户'; -- 新字段需要完整
定义

        换而言之就是,其修改列名的方式不是我们想的那样,而是把整个一列的属性进行了覆盖修改。

        通过查看历史上表的创建语句。  

mysql> show create table users \G;
*************************** 1. row ***************************
       Table: users
Create Table: CREATE TABLE `users` (
  `xingming` varchar(60) DEFAULT NULL COMMENT '这个新增的用户',
  `password` varchar(32) DEFAULT NULL COMMENT '用户的登陆密码',
  `birthday` date DEFAULT NULL COMMENT '用户的生日',
  `image_path` varchar(128) DEFAULT NULL COMMENT '该用户的头像图片的路径'
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

修改表名

  • 修改表名为user_set
alter table users rename to user_set; -- to:可以省掉

        与此同时对应的数据库中,也发生了变化。

删除表

语法格式:

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name(删多个表','隔开)] ...

        如果要删除一个表,那么这个表的前提条件一定是存在的。和数据库一样,删的时候一定要慎重,删除的时候一定要清楚自己在干什么,并且删除的后果是否是自己能够承担的。

drop table students, user_set;

         通过查看历史上表的创建语句。  

        我们在删除一个表的时候,不仅仅是将表结构给删除了,我们以前创建这个表的语句同样也被我们删除了(一个表的创建语句存在,前提是这个表也存在)。

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

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

相关文章

【MyBatisPlus框架】

文章目录 MyBatisPlus1.概述1.1 简介1.2特性1.3支持数据库1.4框架结构 2.入门案例2.1 创建数据库以及表2.2 创建工程2.2.1引入依赖 2.3编写代码 3.基本CRUD3.1BaseMapper3.2插入3.3删除3.4修改3.5查询3.6通用Service 4.常用注解4.1TableName4.1.1问题4.1.2通过TableName解决上述…

简述springmvc的流程

4、SpringMVC的执行流程 用户向服务器发送请求,请求被SpringMVC 前端控制器 DispatcherServlet捕获。 DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI),判断请求URI对应的映射: a) 不存在 …

day05 java_Spring IoC 和 DI

为什么使用spring框架 1.解耦代码(每次使用都要new一个对象) 2.解决事务繁琐问题(创建对象----初始化----调用方法销毁对象) 3.使用第三方框架麻烦的问题 总结:spring是一个轻量级的Ioc,Di和AOP容器 轻量级:简洁,高效,低依赖 **容器:**创建对象并将对象存储对象,同时管理…

高矿化度矿井水深度除氟装置CH-87技术解析

高矿化度矿井水是指含有高浓度溶解性矿物质的废水,通常指的是含有高浓度钠、钙、镁、铁、铝、钾等离子的废水。这些离子通常来自于废水所处的环境、工业或生产过程中使用的原材料和化学品。高矿化度的废水通常具有高盐度、高电导率、高硬度等特征,对环境…

性能测试计划不会写?我告诉你有模板你看不看

目录 1 简介 2 测试进入条件 3 测试退出条件 4 性能测试需求 5 测试风险 6 测试时机 7 测试策略 8 测试资源 9 测试进度 10 交付物 1 简介 1.1 目的 【描述性能测试计划的目的。】 1.2 背景 【描述项目或产品的背景。】 1.3范围 【描述性能测试的整体范围。】 2 测试进入条件 【…

Java如何配置环境变量

Java如何配置环境变量 0. 前言1. 下载Java2. 配置环境变量2.1新建 Java_Home2.2 编辑Path情况1情况2 3. 验证安装 0. 前言 本节记录如何配置Java环境变量,用自己重装过的系统实操 操作系统:Windows10 专业版 Java版本:jdk1.7.0_07 1. 下载…

全网最详细,Selenium自动化测试问题总结+解决,跟着大佬上高速...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Selenium4自动化测…

性能测试工程师必看——性能测试报告模板

目录 1. 测试概述 1.1 测试目标 1.2 指标和术语 2. 环境、工具 2.1 测试环境 2.2 测试工具 3. 测试方案 3.1 测试类型 3.2 业务模型 3.3 加密验签处理 3.4 压力梯度 4. 测试结果 4.1 聚合报告 4.2 系统吞吐量 4.3 资源占用率 5. 分析和建议 5.1 测试结论分析 …

Sqoop伪分布式配置

目录 一、Sqoop下载 二、解压 三、添加环境变量 四、复制sqoop-env-template.sh文件 五、编辑组件路径 六、拷贝Mysql与Hive驱动文件 七、验证 一、Sqoop下载 安装包下载地址:Sqoop 官网 二、解压 解压和重命名文件 tar -zxvf sqoop-1.4.7.bin__hadoop-2.…

006 - STM32学习笔记 - RCC时钟树

006 - STM32学习笔记 - RCC时钟树 本节内容一定要结合RCC时钟树和官方手册学习,如果看不明白的话,建议看一下野火官方的教程,火哥讲这节讲的很详细,看一遍基本就能理解了。 上节内容中分析了启动代码,在启动代码中看…

Redis - Redis16个常见使用场景

1、缓存 String类型 例如:热点数据缓存(例如报表、明星出轨),对象缓存、全页缓存、可以提升热点数据的访问数据 作为Key-Value形态的内存数据库,Redis 最先会被想到的应用场景便是作为数据缓存。而使用 Redis 缓存数…

【面试题】操作系统面试实战

version:1.0 文章目录 操作系统进程管理🙎‍♂️面试官:进程和线程的区别?🙎‍♂️面试官:进程有哪几种状态?🙎‍♂️面试官:进程间的通信方式?🙎‍♂️面试…

体验使用 InsCode AI 创作助手 来帮我完成一篇博客

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 InsCode AI 创作助手 它来啦回答不满意可以要求重新生成在输入 prompt 时&#…

Selenium2023最全攻略(元素操作,浏览器操作等)附完整代码!

一、元素操作方法 方法: 1、.send_keys() # 输入方法 2、.click() # 点击方法 3、.clear() # 清空方法 注意:在输入方法之前一定要清空操作!! # 导包 from time import sleep from selenium import webdriver # 实例化浏览器 driver webdriver.Chrome(…

XDP入门--之eBPF sample内核示例代码的编译

Linux内核代码提供了很多eBPF的示例代码(以linux6.1版本内核代码为例),我们可以在/Linux/samples/bpf目录下找到示例代码。 1、查看Linux内核版本 本文不讨论交叉编译的情况,因为eBPF还在快速发展中,不同版本的Linux内核的支持情况不太一至…

网络安全就业有什么要求?一般人还真不行

前言 网络安全工程师又叫信息安全工程师。随着互联网发展和 IT 技术的普及,网络和 IT 已经日渐深入到日常生活和工作当中,社会信息化和信息网络化,突破了应用信息在时间和空间上的障碍,使信息的价值不断提高。但是与此同时&#…

接口自动化框架(Pytest+request+Allure)

前言: 接口自动化是指模拟程序接口层面的自动化,由于接口不易变更,维护成本更小,所以深受各大公司的喜爱。 接口自动化包含2个部分,功能性的接口自动化测试和并发接口自动化测试。 本次文章着重介绍第一种&#xff0c…

程序员职业病之中医颈椎痛缓解办法

✨求关注~ 😀博客:www.protaos.com 治疗颈椎病的穴位按摩是一种传统中医疗法,可以缓解颈椎病引起的疼痛和不适。下面是关于五个常用穴位的介绍、取穴定位、按摩方法和功效主治的总结: 人体穴位图 穴位图 1. 揉捏风池穴&#xf…

Linux 备份要点

文章目录 Linux 备份要点确定备份的目录和文件备份的种类、频率与工具的选择完整备份增量备份差异备份镜像备份 定期备份远程备份的脚本使用rsync上传备份数据 Linux 备份要点 在Linux系统中,备份数据是非常重要的,特别是在生产环境中。以下是Linux备份…

【数据结构】向上调整建堆和向下调整建堆的天壤之别以及堆排序算法

💯 博客内容:【数据结构】向上调整建堆和向下调整建堆的天壤之别以及堆排序算法 😀 作  者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前端,专注基础和实战分享 ,欢迎私信&…