MYSQL表的操作

前言

本篇是mysql数据库表的相关操作!!

一、创建表

创建一张表,具体语法为:

sql 复制代码
CREATE TABLE [if not exists] tablename
(
    field1 datatype,
    field2 datatype,
    field3 datatype
) [character set 字符集] [collate 校验规则] [engine 存储引擎];

说明:

  • field表示列名

  • datatype表示列的类型

  • character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准

  • collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准

  • engine 存储引擎,如果没有指定存储引擎,则以所在数据库使用的存储引擎为准

我们在test1数据库中创建一张 person 表,包含 姓名、性别、年龄 三个字段

我们这个test1数据库的字符集和校验集分别为 utf8mb3 和 utf8mb3_unicode_ci,这是由配置文件中的默认编码集决定的

注意: 创建表之前需要先使用数据库

注意:

  • 如果是表的最后一个字段就不需要加逗号了
  • comment '内容' 表示注释,通常用来注明该字段的含义及用途

  • 在 MySQL 中定义无符号类型的数据,需要把 unsigned 放在类型之后修饰

这样就得到了一张 person 表,当前表的字符集为 utf8mb3,校验集为 utf8mb3_unicode_ci,存储引擎为 InnoDB,这些都是数据库的 默认属性,只要我们在创建表时不指定属性,表就会继承数据库的默认属性

使用InnoDB引擎创建的表会在该库目录下生成 一个文件(跟你的MySQL版本有关)

创建表时指定属性

除了使用数据库的 默认属性,还可以在创建时指定属性,比如再创建一张 goods 表,表示商品信息,包含字段有 商品名、价格、数量、厂商,并且在创建表时,指定字符集为 gbk,校验集为 gdk_chinese_ci,存储引用选择 MyISAM

sql 复制代码
mysql> create table if not exists goods
(
    name varchar(32) comment '商品名称',
    price double(10, 2) unsigned comment '商品价格,最多支持小数点前 8 位数,小数点后 2 位数',
    num int unsigned comment '商品数量',
    factory varchar(64) comment '厂商名称'
) character set 'gbk' collate 'gbk_chinese_ci' engine 'MyISAM';

此时通过 MyISAM引擎 生成的表会创建三个文件

二、查看表

身处某个数据库中,可以通过 show tables 查看当前数据库中有哪些表

比如说我们在test1库中查看上面创建的person和goods两张表:

查看表结构

知道有哪些表后,还需要进一步了解表的 结构 信息,比如有哪些字段,才能知道如何使用这张表,查看表的详细信息sql语句为:

sql 复制代码
desc tablename;

\^\] desc是描述英文单词的前四个字母 分别查看刚才创建的两张表的结构信息: ![image-20250907103135652](https://i-blog.csdnimg.cn/img_convert/4719dcadade993c184f34b41174c0593.png) 字段说明: * **Field** 表示 列名 * **Type** 表示 类型 * **Null** 表示 是否可为空 * **Key** 表示 是否存在 主键/外键/唯一键 约束 * **Default** 表示 是否有默认值 * **Extra** 表示 额外信息 #### 查看建表消息 如果想查看关于表更详细的信息,可以下面sql语句来查看: ```sql SHOW CREATE TABLE tablename; SHOW CREATE TABLE tablename \G; ``` \[\^\] 两者都可,只是呈现的样式不一样 ![image-20250907103405919](https://i-blog.csdnimg.cn/img_convert/be67fa0ef94aeb6d563c8d99a122f15a.png) ![image-20250907103510397](https://i-blog.csdnimg.cn/img_convert/30e6825e9cdf1b1ff6f396ef26ad2dfd.png) \[\^\] 可以看到的是我们后面接上\\G呈现的样式看起来会更清晰舒服一些 **MySQL 会记录下用户的所有操作痕迹**,这也是备份后,恢复数据库、表的关键,把所有sql语句再执行一遍,就能得到一模一样的数据库、表了 ### 三、修改表 #### 修改列属性 (新增、修改、删除) 首先是新增字段,sql语句为: ```sql ALTER TABLE tablename ADD (column datatype [DEFAULT expr][,column datatype]...); ``` 说明:column 表示 列名,datatype 表示 类型,\[DEFAULT expr\] 表示该列的各种 属性,比如约束、默认值、是否为空等,支持同时新增多个字段 我们给test1库中的person表新增生日和爱好两个字段: (注意: 如果新增多个字段时,需要使用 ( ) 将新增的一批字段括起来) ![image-20250907105118464](https://i-blog.csdnimg.cn/img_convert/23c3bd0ca3580faca5a4e7a732bd3c20.png) 可以看到 **新增的字段默认是紧跟原先最后一个字段的** 如果想新增至指定字段之后,可以在语句后面加上 **after column(你指定的字段)**,比如在 性别 sex 之后新增一个 籍贯 字段 > 注意: 只支持新增单个字段时,指定位置,也就是说 ( ) 与 after column 是冲突的,不能同时使用 ![image-20250907105405859](https://i-blog.csdnimg.cn/img_convert/456cdc654b0a47959561a7163127959b.png) 除了可以新增字段,还可以修改字段,其sql语句为: ```sql ALTER TABLE tablename MODIFY column datatype [DEFAULT expr], [MODIFY ...]; ``` 注意: * 需要确保修改的字段存在,并且要保证修改后的字段类型与表中已经存在的数据类型相匹配 * 修改多个字段时,可以叠加多条 MODIFY column datatype \[DEFAULT expr\] 语句,通过 , 分隔 * 修改字段后,原字段的所有信息都会被覆盖,包括注释 我们修改person表中name 的类型从varchar(16)到varchar(32),修改 age 的类型从int unsigned到 int,因为此时person是空表,所以可以随便修改 ![image-20250907105944414](https://i-blog.csdnimg.cn/img_convert/a3e9dc97adbc1e7052df6531f975ae8b.png) 最后就是删除字段,其sql语句为: ```sql ALTER TABLE tablename DROP (column), [DROP ...]; ``` 注意: 删除字段时,同样需要确保字段存在,字段被删除后,表中对应的数据也会被删除   先在person表中随便新增几个无用字段,再进行删除 ```sql alter table person add (a int, b int, c double); alter table person drop a, drop b, drop c; ``` ![image-20250907110215457](https://i-blog.csdnimg.cn/img_convert/53d9254fd463cd186ec34845b432d15b.png) ![image-20250907110322768](https://i-blog.csdnimg.cn/img_convert/03f1a238d38360e6fe58f8514767dc5e.png) 在 MySQL 中,删除 一直都是一个 高危 操作,毕竟数据丢了不容易找回,比如这里的删除字段,如果表中有数据,那么表中数据关于该字段的信息会被全部删除,所以删除字段要 慎用 #### 修改列名 **列名是支持修改的**,其sql语句为: ```sql ALTER TABLE tablename CHANGE oldcolumn newcolumn datatype [DEFAULT expr]; ``` 注意: 修改需要确保字段存在,修改后,上层应用会受影响   比如把 goods 表中的 num 改为 nums: ![image-20250907110644106](https://i-blog.csdnimg.cn/img_convert/697294740001454e4cb45f56105b4465.png) 在修改列名称时,这个列的相关属性也得给上,相当于把这一列重新设置 #### 修改表名 **表名支持修改**,其sql语句为: ```sql ALTER TABLE oldname RENAME [TO] newname; ``` 其中 TO 可以省略,修改成功后,Linux 中对应的文件名也会被修改   (注意: 如同修改字段名一样,修改表名也是一个危险操作,同样会**影响上层使用**)    我们使用该语句将person表名修改为 students ![image-20250907110910849](https://i-blog.csdnimg.cn/img_convert/5d45199d0419bc6e5b0fb211185cf29e.png) 可以看到,表对应的文件名,也被修改了 ![image-20250907111025467](https://i-blog.csdnimg.cn/img_convert/712254f0366096e9b4d1ffa109f8f1a7.png) ### 四、删除表 > 还是要提醒下,这很危险,非必要情况下请不要这么做 删除表的sql语句为: ```sql DROP TABLE tablename; ``` 注意: 删除表很危险,删除之后,表中所有的数据就都没了,不要轻易删除!    我们这里使用该语句来删除 goods 表 ![image-20250907111305831](https://i-blog.csdnimg.cn/img_convert/2621aa7adca95bfe93cce787a39a8ff6.png) 当然,删除成功后,**Linux 中对应的文件也被删除了**,这也是很显然的 ![image-20250907111236118](https://i-blog.csdnimg.cn/img_convert/44ce1a9b04581bd2734494ad9548c5db.png)

相关推荐
一 乐3 小时前
汽车销售|汽车推荐|基于SprinBoot+vue的新能源汽车个性化推荐系统(源码+数据库+文档)
java·数据库·vue.js·汽车·毕设·汽车个性化推荐
虾说羊3 小时前
最细Maven教程以及Maven私服搭建
java·数据库·maven
RestCloud3 小时前
Kingbase与ETL:如何实现金融级数据库的安全数据同步
数据库
hazy1k3 小时前
51单片机基础-红外遥控(NEC协议)
stm32·单片机·嵌入式硬件·51单片机·1024程序员节
不见长安在4 小时前
Jvm资料整理
jvm·1024程序员节
如果丶可以坑4 小时前
maven无法获取依赖问题
java·maven·1024程序员节
羊村里的大灰狼4 小时前
Windows下载安装配置rabbitmq
1024程序员节
B站计算机毕业设计之家4 小时前
Python手势识别检测系统 基于MediaPipe的改进SSD算法 opencv+mediapipe 深度学习 大数据 (建议收藏)✅
python·深度学习·opencv·计算机视觉·1024程序员节
ajassi20004 小时前
开源 Linux 服务器与中间件(八)数据库--MariaDB
服务器·数据库·开源