【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;表示没有才创建

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) 

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

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

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可以省略

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.rhkb.cn/news/427587.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Delphi5利用DLL实现窗体的重用

文章目录 效果图参考利用DLL实现窗体的重用步骤1 设计出理想窗体步骤2 编写一个用户输出的函数或过程,在其中对窗体进行创建使它实例化步骤3 对工程文件进行相应的修改以适应DLL格式的需要步骤4 编译工程文件生成DLL文件步骤5 在需要该窗体的其他应用程序中重用该窗…

不会JS逆向也能高效结合Scrapy与Selenium实现爬虫抓取

1. 创建基础的scrapy项目 1.1 基础项目 在pycharm中安装scrapy框架 pip install scrapy 创建项目 scrapy startproject 项目名称 我们现在可以看到整体文件的目录: firstBlood ├── firstBlood # 项目跟目录 │ ├── init.py │ ├── items.py # 封装数…

【网络】高级IO——select版本TCP服务器

目录 前言 一,select函数 1.1.参数一:nfds 1.2.参数二: readfds, writefds, exceptfds 1.2.1.fd_set类型和相关操作宏 1.2.2.readfds, writefds, exceptfds 1.2.3.怎么理解 readfds, writefds, exceptfds是输入输出型参数 1.3.参数三…

数据结构之二叉树遍历

二叉树的遍历 先序遍历 先输入父节点,再遍历左子树和右子树:A、B、D、E、C、F、G 中序遍历 先遍历左子树,再输出父节点,再遍历右子树:D、B、E、A、F、C、G 后序遍历 先遍历左子树,再遍历右子树,…

SpringBoot设置mysql的ssl连接

因工作需要,mysql连接需要开启ssl认证,本文主要讲述客户端如何配置ssl连接。 开发环境信息: SpringBoot: 2.0.5.RELEASE mysql-connector-java: 8.0.18 mysql version:8.0.18 一、检查服务端是否开启ssl认…

微信公众号开发入门

微信公众号开发是指开发者基于微信公众平台(WeChat Official Accounts Platform)所提供的接口与功能,开发和构建自定义的功能与服务,以满足企业、组织或个人在微信生态中的应用需求。微信公众号开发主要围绕公众号消息处理、菜单管…

K1计划100%收购 MariaDB; TDSQL成为腾讯云核心战略产品; Oracle@AWS/Google/Azure发布

重要更新 1. 腾讯全球数字生态大会与9月5日-6日举行,发布“5T”战略,包括TDSQL、TencentOS、TCE(专有云 )、TBDS(大数据)、TI (人工智能开发平台)等 ( [2] ) ; 并正式向原子开源基金…

初始分布式系统和Redis特点(

(一)认识redis Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合,位图,hyperlog…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0920)

十三、文章分类页面 - [element-plus 表格] Git仓库:https://gitee.com/msyycn/vue3-hei-ma.git 基本架子 - PageContainer 功能需求说明: 基本架子-PageContainer封装文章分类渲染 & loading处理文章分类添加编辑[element-plus弹层]文章分类删除…

[Python]案例驱动最佳入门:Python数据可视化在气候研究中的应用

在全球气候问题日益受到关注的今天,气温变化成为了科学家、政府、公众讨论的热门话题。然而,全球气温究竟是如何变化的?我们能通过数据洞察到哪些趋势?本文将通过真实模拟的气温数据,结合Python数据分析和可视化技术&a…

Flutter启动无法运行热重载

当出现这种报错时,大概率是flutter的NO_Proxy出问题。 请忽略上面的Android报错因为我做的是windows开发这个也就不管了哈,解决下面也有解决报错的命令大家执行一下就行。 着重说一下Proxy的问题, 我们看到提示NO_PROXY 没有设置。 这个时候我…

基于YOLOv8+LSTM的商超扶梯场景下行人安全行为姿态检测识别

基于YOLOv8LSTM的商超扶梯场景下行人安全行为姿态检测识别 手扶电梯 行为识别 可检测有人正常行走,有人 跌倒,有人逆行三种行为 跌倒检测 电梯跌倒 扶梯跌倒 人体行为检测 YOLOv8LSTM。 基于YOLOv8LSTM的商超扶梯场景下行人安全行为姿态检测识别&#xf…

Vue3.0组合式API:使用ref获取DOM元素

Vue3.0组合式API系列文章: 《Vue3.0组合式API:setup()函数》 《Vue3.0组合式API:使用reactive()、ref()创建响应式代理对象》 《Vue3.0组合式API:computed计算属性、watch监听器、watchEffect高级监听器》 《Vue3.0组合式API&…

【贪心算法】贪心算法一

贪心算法一 1.柠檬水找零2.将数组和减半的最少操作次数3.最大数4.摆动序列 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.柠檬水找零 题目…

【Linux】【Vim】Vim 基础

Vim/Gvim 基础 文本编辑基础编辑操作符命令和位移改变文本重复改动Visual 模式移动文本(复制、粘贴)文本对象替换模式 光标移动以 word 为单位移动行首和行尾行内指定单字符移动到匹配的括号光标移动到指定行滚屏简单查找 /string标记 分屏vimdiff 文本编辑 基础编辑 Normal 模…

Gitlab runner的使用示例(二):Maven + Docker 自动化构建与部署

Gitlab runner的使用示例(二):Maven Docker 自动化构建与部署 在本篇文章中,我们将详细解析一个典型的 GitLab CI/CD 配置文件(gitlab-ci.yml),该文件主要用于通过 Maven 构建 Java 应用&…

07_Python数据类型_集合

Python的基础数据类型 数值类型:整数、浮点数、复数、布尔字符串容器类型:列表、元祖、字典、集合 集合 集合(set)是Python中一个非常强大的数据类型,它存储的是一组无序且不重复的元素,集合中的元素必须…

Games101学习 - 着色

本文主要讲述Games101中的着色部分。 文中将使用UE的UTexture2D接口,若不了解可以看这篇: https://blog.csdn.net/grayrail/article/details/142165442 1.面积比计算三角形坐标 通过三角形面积比可以得到三角形的坐标alpha、beta、gamma从而进行插值&a…

AI技术好书推荐:《AI系统-原理与架构》

今年1月份在B站发现了一个B站宝藏博主,发布的一系列AI技术类科普视频内容很干,逻辑清晰,很多知识点讲的深入浅出,非常有用,被直接种粉。 后来这一系列的课程内容博主有了出书的计划,机缘巧合有幸参与部分章…

CSS入门笔记

目录 概述 组成 CSS 语法 常见的使用方式 CSS 优先级 CSS 选择器 1. 基本选择器 2. 属性选择器 3. 伪类选择器 4. 组合选择器 示例 优先级 边框样式与盒子模型 单个边框 边框轮廓(Outline) 盒子模型 模型介绍 边距设置 布局示例 文…