【MySQL】表的相关操作

目录

  • 1. 表的创建
    • 1.1 创建表语法
    • 1.2 创建表案例
    • 1.3 查看表
  • 2. 表的修改
    • 2.1 修改表名
    • 2.2 插入数据
    • 2.3 新增一列
    • 2.4 修改某列
      • 2.4.1 修改列的类型
      • 2.4.2 修改列名
    • 2.5 删除某列
  • 3. 表的删除
  • 4. 注意

1. 表的创建

1.1 创建表语法

create table student (
列属性名1 列数据类型,
列属性名2 列数据类型
) character set 字符集 collate 校验集 engine 存储引擎

可以在最后指定字符集等,也可以不指定使用默认配置的

也可以带选项,比如create table if not exists xxx;表示没有才创建

还有一种写法,比如有一张a表,然后像创建一张结构与a表一样的b表时语法如下:

create table b like a;

1.2 创建表案例

mysql> create table users ( 
id int, 
name varchar(20) comment '用户名',  
password char(32) comment '32位密码',
birthday date comment '生日'  
) charset=utf8mb4;

int表示整形,varchar表示变长字符串类型,char表示定长字符串类型,date表示日期类型,而comment表示对当前列属性的一个说明

当使用不同的存储引擎创建表时,最终在目录中所创建相关的文件个数是不同的,使用innoDB引擎时:

root@VM-16-3-ubuntu:/var/lib/mysql/base# ls
users.ibd

使用MyISAM引擎时:

root@VM-16-3-ubuntu:/var/lib/mysql/base# ls
users_375.sdi  users.MYD  users.MYI

1.3 查看表

使用show可以查看当前数据库中存在的表:

mysql> show tables;
+----------------+
| Tables_in_base |
+----------------+
| users          |
+----------------+
1 row in set (0.00 sec)

前提是要在对应的数据库中

要查看某个表的详细信息时使用desc:

mysql> desc users;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | YES  |     | NULL    |       |
| name     | varchar(20) | YES  |     | NULL    |       |
| password | char(32)    | YES  |     | NULL    |       |
| birthday | date        | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec) 

从左到右分别表示的是:字段名称(列属性)、字段类型、是否允许为空、索引类型、默认值和扩充

格式化显示带上\G:desc users \G;

如果要查看更加详细的表信息是可以使用如下指令:

mysql> show create table users;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                        |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| users | CREATE TABLE `users` (`id` int DEFAULT NULL,`name` varchar(20) DEFAULT NULL COMMENT '用户名',`password` char(32) DEFAULT NULL COMMENT '32位密码',`birthday` date DEFAULT NULL COMMENT '生日'
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci         |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
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 DEFAULT NULL,`name` varchar(20) DEFAULT NULL COMMENT '用户名',`password` char(32) DEFAULT NULL COMMENT '32位密码',`birthday` date DEFAULT NULL COMMENT '生日'
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)

这种做法相当于是把当初创建表时的有效操作给记录下来了,所以是最详细的,包含了说明和字符集等等,不过可以发现的时候上面的写法貌似和当初自己写的不太一样,这是因为mysqld要对命令进行语法和词法分析,并对其按照标准进行修改优化,最后再去执行优化后的命令,也就是上面这样

2. 表的修改

2.1 修改表名

将表名user修改为us:

mysql> alter table users rename to us;
Query OK, 0 rows affected (0.03 sec)mysql> show tables;
+----------------+
| Tables_in_base |
+----------------+
| us             |
+----------------+
1 row in set (0.00 sec)

其中to可以省略

还有一种写法:

rename table table_name_a to table_name_b [, ...]

2.2 插入数据

插入一条记录:

mysql> insert into us values (1, 'lzh', '12345', '2003.9.10');

也叫全列插入

插入多条记录,中间使用逗号隔开

如果只想插入其中几列时写法如下:

mysql> insert into us (id, password) values (1, '12345');

前面一个括号里填入需要写入的列名,后面则是对应的数据,但要注意的是,当使用指定列插入时,必须确保:

  • 指定的列名在表中存在
  • 提供的值的数量与指定的列的数量相匹配
  • 值的类型与对应列的数据类型兼容。

而且如果表中有任何列被设置为not null且没有默认值,并且这些列没有被包括在insert语句中,那么将无法执行该insert操作,除非为这些列提供了默认值或允许它们接受null值

查看表内容:

mysql> select * from us;
+------+------+----------+------------+
| id   | name | password | birthday   |
+------+------+----------+------------+
|    1 | lzh  | 12345    | 2003-09-10 |
|    1 | zz   | 12345    | 2003-09-10 |
+------+------+----------+------------+

2.3 新增一列

假设新增一列用来保存存储路径:

mysql> alter table us add path varchar(128) comment '路径' after birthday;
Query OK, 4 rows affected (0.06 sec)
Records: 4  Duplicates: 0  Warnings: 0mysql> select * from us;
+------+------+----------+------------+------+
| id   | name | password | birthday   | path |
+------+------+----------+------------+------+
|    1 | lzh  | 12345    | 2003-09-10 | NULL |
|    1 | zz   | 12345    | 2003-09-10 | NULL |
|    4 | lzh  | 12345    | 2003-09-10 | NULL |
|    5 | pp   | 666      | 2024-09-19 | NULL |
+------+------+----------+------------+------+
4 rows in set (0.00 sec)

新增并不会对之前列中的数据产生影响,只是新增列中的数据为空

after xxx表示在xxx那一列之后添加

2.4 修改某列

2.4.1 修改列的类型

将name列的数据类型改为varchar(60):

mysql> alter table us modify name varchar(60);
Query OK, 4 rows affected (0.05 sec)
Records: 4  Duplicates: 0  Warnings: 0mysql> show create table us \G;
*************************** 1. row ***************************Table: us
Create Table: CREATE TABLE `us` (`id` int DEFAULT NULL,`name` varchar(60) DEFAULT NULL,`password` char(32) DEFAULT NULL COMMENT '32位密码',`birthday` date DEFAULT NULL COMMENT '生日',`path` varchar(128) DEFAULT NULL COMMENT '路径'
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)ERROR: 
No query specifie

可以发现,修改是直接覆盖最初的指令,把原来的属性和描述信息直接替换了

2.4.2 修改列名

把列名id改成user_id:

mysql> alter table us change column id user_id int;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc us;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| user_id  | int          | YES  |     | NULL    |       |
| name     | varchar(60)  | YES  |     | NULL    |       |
| password | char(32)     | YES  |     | NULL    |       |
| birthday | date         | YES  |     | NULL    |       |
| path     | varchar(128) | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+

change column 旧列名 新列名 新数据类型和属性 (约束)

column可以省略

2.5 删除某列

删除当前表中的password列:

mysql> alter table user drop password;
Query OK, 4 rows affected (0.03 sec)
Records: 4  Duplicates: 0  Warnings: 0mysql> desc user;
+----------+--------------+------+-----+---------+-------+
| Field    | Type         | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| user_id  | int          | YES  |     | NULL    |       |
| name     | varchar(60)  | YES  |     | NULL    |       |
| birthday | date         | YES  |     | NULL    |       |
| path     | varchar(128) | YES  |     | NULL    |       |
+----------+--------------+------+-----+---------+-------+mysql> select * from user;
+---------+------+------------+------+
| user_id | name | birthday   | path |
+---------+------+------------+------+
|       1 | lzh  | 2003-09-10 | NULL |
|       1 | zz   | 2003-09-10 | NULL |
|       4 | lzh  | 2003-09-10 | NULL |
|       5 | pp   | 2024-09-19 | NULL |
+---------+------+------------+------+

删除某列后,该列对应的数据也被删掉了

3. 表的删除

语法类似库的删除,很简单,drop table xxx:

mysql> show tables;
+----------------+
| Tables_in_base |
+----------------+
| stu            |
| user           |
+----------------+
2 rows in set (0.00 sec)mysql> drop table stu;
Query OK, 0 rows affected (0.04 sec)mysql> show tables;
+----------------+
| Tables_in_base |
+----------------+
| user           |
+----------------+
1 row in set (0.00 sec)

也可以带选项,比如drop table if exists xxx;存在才删除

4. 注意

和库一样,不要轻易对表进行修改和删除,因为数据库是比较接近底层的,上层程序可能有很多地方都要用到这个数据库以及对应的表,如果你把名字改了,那上层都得跟着改,降低了维护性

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

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

相关文章

【MPC-Simulink】EX04 信号归一化简化权重调节过程与提高数值计算质量

【MPC-Simulink】EX04 信号归一化简化权重调节过程与提高数值计算质量 参考 Matlab 官网提供的 Model Predictive Control Toolbox - Getting Started Guide,在 MPC 控制器中指定缩放因子,可以简化权重调节过程,提高数值计算质量。 当被控对…

Dubbo分布式日志跟踪实现

前言 随着越来越多的应用逐渐微服务化后,分布式服务之间的RPC调用使得异常排查的难度骤增,最明显的一个问题,就是整个调用链路的日志不在一台机器上,往往定位问题就要花费大量时间。如何在一个分布式网络中把单次请求的整个调用日…

企业网络转型:优势与挑战

◎ 网络研究观 事实上,现代企业网络是一个由相互连接的数据、应用程序和基础设施组成的复杂网络。然而,企业不应让这种复杂性成为服务不可靠、安全漏洞或网络停机的借口。 由于组织和公司面临着从并购到云扩展的诸多挑战,以及网络技术日益复…

【算法一周目】双指针(1)

目录 1.双指针介绍 2.移动零 解题思路 C代码实现 3.复写零 解题思路 C代码实现 4.快乐数 解题思路 C代码实现 5.盛水最多的容器 解题思路 C代码实现 1.双指针介绍 常见的双指针有两种形式,一种是对撞指针,一种是快慢指针。 对撞指针&#x…

6547网:青少年软件编程Python等级考试(六级)真题试卷

2024年9月青少年软件编程Python等级考试(六级)真题试卷 题目总数:38 总分数:100 选择题 第 1 题 单选题 下面Python代码运行后出现的图像是?( ) import matplotlib.pyplot as plt im…

【5种灵活有效方式】如何从死机手机中恢复内部数据?

本文介绍了5种方法来从死机的Android设备中恢复数据,包括使用U1tData安卓数据恢复软件、SD卡、OTG、Google云端硬盘和SamsungCloud。这些方法覆盖了不同情况下的数据恢复需求。 摘要由CSDN通过智能技术生成 我的手机掉在地上,现在无法开机。我丢失了所…

【安全测试】sqlmap工具(sql注入)学习

前言:sqimap是一个开源的渗透测试工具,它可以自动化检测和利用SQL注入缺陷以及接管数据库服务器的过程。它有一个强大的检测引擎,许多适合于终极渗透测试的小众特性和广泛的开关,从数据库指纹、从数据库获 取数据到访问底层文件系…

行业类别-智慧城市-子类别智能交通-细分类别自动驾驶技术-应用场景城市公共交通优化

1.大纲分析 针对题目“8.0 行业类别-智慧城市-子类别智能交通-细分类别自动驾驶技术-应用场景城市公共交通优化”的大纲分析,可以从以下几个方面进行展开: 一、引言 简述智慧城市的概念及其重要性。强调智能交通在智慧城市中的核心地位。引出自动驾驶…

24.11.11 JavaScript1

JavaScript(简称js)是⼀种描述语⾔,基于对象和事件驱动的脚本语⾔ JavaScript特点:脚本语⾔(⼀种轻量级的编程语⾔) ⼀种解释性语⾔(⽆需预编译) 被设计为向HTML⻚⾯添加交互⾏为 运⾏于客户端&…

PDF24:多功能 PDF 工具使用指南

PDF24:多功能 PDF 工具使用指南 在日常工作和学习中,PDF 是一种常见且重要的文档格式。无论是查看、编辑、合并,还是转换 PDF 文件,能够快速高效地处理 PDF 文档对于提高工作效率至关重要。PDF24 是一款免费、功能全面的 PDF 工具…

计算机的错误计算(一百五十一)

摘要 探讨 MATLAB 中反正弦 asin 与反余弦 acos 函数的计算精度问题。 例1. 已知 计算 及 直接贴图吧: 另外,16位的正确值分别为 0.1570785896071048e1、0.1043072384837152e-4、-0.1570785896071048e1 与 0.3141582222865945e1(I…

Lua进阶用法之Lua和C的接口设计

一:lua/c的接口编程 首先skynet、openresty 都是深度使用 lua 语言的典范;学习 lua 不仅仅要学习基本用法,还要学会使用 c 与 lua 交互,这样才学会了 lua 作为胶水语言的精髓,下面看一下他们两个的调用过程。 虚拟栈&a…

macOS 下的 ARM 裸机嵌入式开发入门- 第二部分:实现第一个裸机应用并且调试

1、准备二进制运行程序镜像 利用 QEMU 仿真一个完整的系统,并创建最简单的“Hello world!”示例。 QEMU 模拟器支持 VersatilePB 平台,该平台包含一个 ARM926EJ-S 核心,以及其他外设,四个 UART 串行端口;特别是第一个…

【网络面试篇】其他面试题——Cookie、Session、DNS、CDN、SSL/TLS、加密概念

目录 一、HTTP 相关问题 1. Cookie 和 Session 是什么? (1)Cookie (2)Session 2. Cookie 的工作原理? 3. Session 的工作原理? 4. Cookie 和 Session 有什么区别? 二、其他问…

【数值分析】复习1---牛顿迭代法

首先,我们先来回顾一下牛顿迭代法的概念。 这里注意的是,牛顿迭代法是一种线性方法,它在点 x k x_k xk​处进行线性展开,而且展开成一阶泰勒公式!注意是一阶,不是二阶,不是更高阶,所…

文本语义分块、RAG 系统的分块难题:小型语言模型如何找到最佳断点

文本语义分块、RAG 系统的分块难题:小型语言模型如何找到最佳断点? 转自jina最新的关于文本语义分块的分享和模型 之前我们聊过RAG 里文档分块 (Chunking) 的挑战,也介绍了 迟分 (Late Chunking) 的概念,它可以在向量化的时候减…

PostgreSQL中如果有Left Join的时候索引怎么加

在PostgreSQL中,当你的查询包含多个LEFT JOIN和WHERE条件时,合理地添加索引可以显著提高查询性能。以下是一些具体的优化步骤和建议: 1. 分析查询 使用 EXPLAIN ANALYZE 命令分析你的查询,了解查询的执行计划,识别出连…

温度虽寒,其道犹变:OpenAI接口之温度参数设置为0,为何每次回复仍有不确定性?

问题描述 调用openai API,使用templature 0,每次返回的内容仍有一些不同 >>> client OpenAI( ... api_keyapi_key, ... base_urlapi_base) #第一次尝试 >>> response client.chat.completions.create(mo…

vue-h5:在h5中实现相机拍照加上身份证人相框和国徽框

参考: https://blog.csdn.net/weixin_45148022/article/details/135696629 https://juejin.cn/post/7327353533618978842?searchId20241101133433B2BB37A081FD6A02DA60 https://www.freesion.com/article/67641324321/ https://github.com/AlexKratky/vue-camer…

国标GB28181视频平台EasyCVR私有化部署视频平台对接监控录像机NVR时,录像机“资源不足”是什么原因?

EasyCVR视频融合云平台,是TSINGSEE青犀视频“云边端”架构体系中的“云平台”系列之一,是一款针对大中型项目设计的跨区域、网络化、视频监控综合管理系统平台,通过接入视频监控设备及视频平台,实现视频数据的集中汇聚、融合管理、…