MySQL-表相关(DDL DML)

文章目录

    • 表的基本操作
      • 表的创建
      • 表的删除
    • MySQL中的数据类型
      • 整数类型
      • 浮点数类型
      • 定点数类型
      • 日期和时间类型
      • 字符串类型
        • char
        • varchar
        • text
      • 二进制类型
    • DDL语句
      • 查看建表语句
      • 修改表名
      • 新增字段
      • 修改字段(名+类型)
      • 修改字段(仅类型)
      • 删除字段
    • DML语句
      • insert 增
      • delete 删
      • truncate 语句
      • update 改

表的基本操作

在介绍DDL和DQL的操作语句之前, 我们先来熟悉一下表的基础相关操作

表的创建

下面的sql语句是创建一个学生表

create table if not exists t_student(
    id int,
    name varchar(25),
    gender char(1) default '男'
);

插入几条数据进行测试

# default是默认约束
insert into t_student(id, name, gender) values (1, 'll', '男');
insert into t_student(id, name) values (2, 'rr');
insert into t_student(id, name, gender) values (3, 'hh', '女');
select * from t_student;

# 测试结果
+------+------+--------+
| id   | name | gender |
+------+------+--------+
|    1 | ll   ||
|    2 | rr   ||
|    3 | hh   ||
+------+------+--------+

表的删除

只需要下面的sql语句即可

# 如果数据库中没有这张表就会报错
drop table t_student;
# 即使数据库中没有这张表也不会报错
drop table if exists t_student;

MySQL中的数据类型

之前我们并没有介绍MySQL中的数据类型都有什么, 我们下面介绍一下MySQL中的数据类型
数据类型(data_type)是指系统中所允许的数据的类型。数据库中的每个列都应该有适当的数据类型,用于限制或允许该列中存储的数据。例如,列中存储的为数字,则相应的数据类型应该为数值类型。如果使用错误的数据类型可能会严重影响应用程序的功能和性能,所以在设计表时,应该特别重视数据列所用的数据类型。更改包含数据的列不是一件小事,这样做可能会导致数据丢失。因此,在创建表时必须为每个列设置正确的数据类型和长度。MySQL 的数据类型可以分为整数类型、浮点数类型、定点数类型、日期和时间类型、字符串类型、二进制类型等。

整数类型

tinyint:1个字节(微小整数)smallint:2个字节(小整数)mediumint:3个字节(中等大小的整数)**int(integer):4个字节(普通大小整数)**bigint:8个字节(大整数)

浮点数类型

float:4个字节,单精度(最多5位小数)double:8个字节,双精度(最多16位小数)

定点数类型

decimal:定点数类型。底层实际上采用字符串的形式存储数字。语法:decimal(m, d)例如:decimal(3, 2) 表示3个有效数字,2个小数。(有效数字最多65个,小数位最多30个)

日期和时间类型

year:1个字节,只存储年,格式YYYYtime:3个字节,只存储时间,格式HH:MM:SS / HHMMSSdate:3个字节,只存储年月日,格式:YYYY-MM-DDdatetime:8个字节,存储年月日+时分秒,格式:YYYY-MM-DD HH:MM:SS(从公元1000年公元9999年)timestamp:4个字节,存储年月日+时分秒,格式:YYYY-MM-DD HH:MM:SS(从公元1980年公元2040年)或者格式为 YYYYMMDDHHMMSS(采用这种格式不需要使用单引号,当然你使用单引号也可以)

字符串类型

char

char(m): m长度是0~255个字符。固定长度字符串,在定义时指定字符串列长。当保存时,在右侧填充空格以达到指定的长度。m表示列的长度,范围是 0~255 个字符。例如,CHAR(4) 定义了一个固定长度的字符串列,包含的字符个数最大为 4。当插入的字符长度大于4,则报错(除非超过4个长度之后都是空格字符,则空格字符会自动被删除用来保证插入的成功)。

varchar

varchar(m): m长度是0~16383个字符长度可变的字符串。varchar 的最大实际长度由最长的行的大小和使用的字符集确定,而实际占用的空间为字符串的实际长度加 1。例如,varchar(50) 定义了一个最大长度为 50 的字符串,如果插入的字符串只有 10 个字符,则实际存储的字符串为 10 个字符和一个字符串结束字符。varchar在值保存和检索时尾部的空格仍保留。17086473007292181603be6204be8bab61b9c029989d8png

text

text类型:

  • tinytext 表示长度为 255字符的 TEXT 列。

  • text 表示长度为 65535字符的 TEXT 列。

  • mediumtext 表示长度为 16777215字符的 TEXT 列。

  • longtext 表示长度为 4294967295 或 4GB 字符的 TEXT 列。

    enum类型:

  • 语法:<字段名> enum(‘值1’,‘值2’,…)

  • 该字段插入值时,只能是指定的枚举值。

    set类型:

  • 语法:<字段名> set(‘值1’,‘值2’,‘值3’,…) 注意:值不可重复。

  • 该字段插入值时,只能是指定的值。

二进制类型

BLOB类型:二进制大对象,可以存储图片、声音、视频等文件。

  • blob:小的,最大长度65535个字节

  • mediumblob:中等的,最大长度16777215个字节

  • longblob:大的,最大长度4GB的字节

这里注意一下, 使用命令行是无法进行BLOB类型的添加的, 需要调用Java程序中的IO流相关辅助实现
还有就是日常开发中一般是不会在数据库中保留一个视频这种非常大的文件的, 一般都是保存一个字符串
视频文件远程托管到服务器上, 这个字符串就是这个托管的地址, 所以一般保留的都是varchar/char

DDL语句

DDL语句是我们SQL语句中的一种, 下面是DDL的相关简介, 其实也就是修改表本身的结构, 其实这个内容相对不是特别重要, 因为开发的过程中, 当以及拥有庞大用户量之后, 修改表的结构其实时一件很危险的行为

数据定义语言 (Data Definition Language, DDL) 是SQL语言集中,负责数据结构定义与数据库对象定义的语言,由CREATE、ALTER与DROP三个语法所组成,最早是由 Codasyl (Conference on Data Systems Languages) 数据模型开始,现在被纳入 SQL 指令中作为其中一个子集。

还是创建一个数据表并且插入几条数据用来测试

create table test_ddl(
    a bigint primary key auto_increment,
    b varchar(255) not null,
    c char(10) unique
);

insert into test_ddl(b, c) values ('hh', 'hhx');
insert into test_ddl(b, c) values ('bb', 'bbx');
insert into test_ddl(b, c) values ('ff', 'ffx');

select * from test_ddl;

# 测试结果如下
+---+----+------+
| a | b  | c    |
+---+----+------+
| 1 | hh | hhx  |
| 2 | bb | bbx  |
| 3 | ff | ffx  |
+---+----+------+

查看建表语句

我们之前学习的那个是查看表的结构

# desc + 表名
desc test_ddl;

在这里插入图片描述
查看建表语句

# 语法
show create table [表名]

执行下面的sql语句

show create table test_ddl;

在这里插入图片描述
上面可以查看我们建表时的语句, 以及存储引擎(这里是InnoDB), 字符集以及排序规则
其实上面也解释了一个问题, 就是MySQL中的所有的标识符其实都隐式加上了反引号`
当我们想用关键字当成标识符的时候, 就要加上反引号

修改表名

从下面开始我们所有的DDL语句都是以alter table开头
基础语法

alter table [表名] rename [新名字]

假如我们想要修改表的名字, 比如把我们上面的test_ddl变为test_ddlt
执行下面的SQL

alter table test_ddl rename test_ddlt;
show tables;

# 执行结果如下(表名已经发生了改变)
+------------------------+
| Tables_in_java113mysql |
+------------------------+
| dept                   |
| emp                    |
| salgrade               |
| t_student              |
| test_ddlt              |
+------------------------+

这时我们用上面的查看建表语句就会发现表名已经发生改变
在这里插入图片描述

新增字段

基础语法

alter table [表名] add [新字段名] [数据类型]

我们尝试执行下面的SQL语句

alter table test_ddlt add d varchar(10) not null;

思考一下, 我们新添加的d字段, 带有非空约束, 但是我们之前是没有加入过d这一列数据的, 那么会执行成功么, 答案是会执行成功的, 但是之前的所有位置的这个d列都是空, 不是null, 就是空(什么都没有)

insert into test_ddlt (b,c, d) values ('cc', 'ccx', 'ccxy');
select * from test_ddlt;

# 执行结果如下(就是空, 而不是null)
+---+----+------+------+
| a | b  | c    | d    |
+---+----+------+------+
| 1 | hh | hhx  |      |
| 2 | bb | bbx  |      |
| 3 | ff | ffx  |      |
| 4 | cc | ccx  | ccxy |
+---+----+------+------+

修改字段(名+类型)

这个SQL语句适用于修改一个字段的名称以及数据类型
基础语法

alter table [表名] change [旧字段名] [新字段名] [新字段类型];

尝试执行下面的SQL

alter table test_ddlt change d dx varchar(5);

执行结果以及表的前后结构对比如下
在这里插入图片描述

修改字段(仅类型)

基础语法

alter table [表名] modify column [字段名] [数据类型]

执行下面的SQL

alter table test_ddlt modify column dx varchar(7);
desc test_ddlt;

执行结果如下
在这里插入图片描述

删除字段

基础语法

alter table [表名] drop [字段名]

尝试执行下面的SQL

select * from test_ddlt;
alter table test_ddlt drop dx;
select * from test_ddlt;

执行结果如下
在这里插入图片描述

DML语句

当我们对表中的数据进行增删改的时候就会用到DML语句(数据操纵语言, 就三种, insert into, delete from, update set), 所有的DML语句都是支持事务的, 也就是操作之后还可以通过回滚恢复, 但是truncate table语句执行之后是不能进行恢复的(不属于DML语句, 下面会介绍)
DML语句简介

数据操纵语言(Data Manipulation Language, DML)是SQL语言中,负责对数据库对象运行数据访问工作的指令集,以INSERT、UPDATE、DELETE三种指令为核心,分别代表插入、更新与删除。

insert 增

基本的语法格式我们在先前的博客中已经介绍过了
基础语法

insert into [表名] (字段1, 字段2, 字段3...) values (1,2,3...);

当表名后面的小括号当中的字段名如果省略掉, 表示自动的将所有的字段都列出来了, 并且字段的顺序和建表时的顺序是一致的, 一般为了可读性强, 建议把字段名加上
基础语法

insert into [表名] values (1,2,3...);

同时一次可以插入多条记录
基础语法

insert into [表名] (字段1, 字段2...) values ((1,2,...), (1,2,...)...;

这一块就暂不进行演示了, 我们先前的博客介绍过这个点

delete 删

基础语法

# 执行这条SQL会导致所有的记录都会被删除, 所以我们要加入where条件判断
delete from [表名];

删除符合条件的记录

delete from [表名] where [条件];

假设我们现在有这张数据表

select * from t_student;
+------+------+--------+
| id   | name | gender |
+------+------+--------+
|    1 | ll   ||
|    2 | rr   ||
|    3 | hh   ||
+------+------+--------+

# 我们要把名字为 ll 的删除
delete from t_student where name = 'll';
select * from t_student;
+------+------+--------+
| id   | name | gender |
+------+------+--------+
|    2 | rr   ||
|    3 | hh   ||
+------+------+--------+

# 我们要把所有人都删除, 那么就直接不用加where条件就可以了
# 下面是SQL执行的结果显示
mysql> delete from t_student;
Query OK, 2 rows affected (0.00 sec)

mysql> select * from t_student;
Empty set (0.00 sec)

truncate 语句

上面介绍的删除语句是可以恢复的, 删除属于DML的方式删除,这种删除的数据是可以通过事务回滚的方式重新恢复的,但是删除的效率较低。(这种删除是支持事务的。)
另外还有一种删除表中数据的方式,但是这种方式不支持事务,不可以回滚,删了之后数据是永远也找不回来了。这种删除叫做:表被截断; 也可以理解为数据在硬盘中的内存地址被丢弃了
注意:这个语句删除效率非常高,巨大的表,瞬间干掉所有数据。但不可恢复
基础语法

truncate table [表名];

update 改

基础语法

updata [表名] set 字段1 =1, 字段2 =2, ... where;
# 和delete语句是一致的, 如果不适用where条件限制的话, 会导致所有的字段都发生改变

下面我们在学生表中插入几条数据进行更新操作

# 插入几条数据
insert into t_student(id, name, gender) values (23, 'lhh', '女');
insert into t_student(id, name, gender) values (22. 'qtw', '男');
insert into t_student(id, name, gender) values (55, 'gyl', '男');
insert into t_student(id, name, gender) values (45, 'swj', '男');

# 查一下当前的数据情况
select * from t_student;
+------+------+--------+
| id   | name | gender |
+------+------+--------+
|   23 | lhh  ||
|   55 | gyl  ||
|   45 | swj  ||
|   22 | qtw  ||
+------+------+--------+

# 更新id编号为 45 的人的性别为 '女';
update t_student set gender = '女' where id = 45;
# 查看一下当前的数据
select * from t_student;
+------+------+--------+
| id   | name | gender |
+------+------+--------+
|   23 | lhh  ||
|   55 | gyl  ||
|   45 | swj  ||
|   22 | qtw  ||
+------+------+--------+

# 把所有人的 性别都改成 '未知'
update t_student set gender = '未知';
# 查看一下当前数据
+------+------+--------+
| id   | name | gender |
+------+------+--------+
|   23 | lhh  | 未知   |
|   55 | gyl  | 未知   |
|   45 | swj  | 未知   |
|   22 | qtw  | 未知   |
+------+------+--------+

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端学习-CSS的三大特性(十七)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 层叠性 继承性 行高的继承性 优先级 优先级注意点 权重叠加 总结 前言 引入css特性的学习 CSS 有三个非常重要的三个特性:层叠性、继承性、优先级。 层叠…

Android 第5种启动模式:singleInstancePerTask

Android 第5种启动模式&#xff1a;singleInstancePerTask 随着 Android 版本的更新&#xff0c;应用启动模式逐渐丰富。在 Android 12 中&#xff0c;新增了一种启动模式——singleInstancePerTask。它是继 standard、singleTop、singleTask 和 singleInstance 之后的第五种启…

纯css 轮播图片,鼠标移入暂停 移除继续

核心 滚动&#xff1a; animation: 动画名称 20s linear infinite normal;停止&#xff1a; animation: 动画名称 20s linear infinite paused; 完整例子&#xff1a; html: <div class"carousel-wrapper"><div class"carousel"><div cl…

chrome浏览器映射端口

chrome://inspect/#devices 方法2

mysql主从复制及故障修复

一、主MySQL数据库的配置 分别在三台主机&#xff08;chen2/10.110、chen3/10.120、chen4/10.130)中安装mysql数据&#xff0c;其中chen2/10.110作为主MySQL服务器&#xff0c;其余两台作为从MySQL服务器。 1、在主机上部署mysql数据库 详细的请看上一篇&#xff1a;mysql数据…

NewStarCTF2024-Week2-Web-WP

目录 1、复读机 2、你能在一秒内打出八句英文吗 3、遗失的拉链 4、谢谢皮蛋 plus 5、PangBai 过家家&#xff08;2&#xff09; 1、复读机 测了下存在 ssti 没什么说的 fenjing 秒了 2、你能在一秒内打出八句英文吗 每次出来的需要提交的内容都不一样 exp&#xff1a; …

CUDA 全局内存

全局内存在片外。 特点是&#xff1a;容量最大、延迟最大、使用最多 全局内存中的数据是所有线程可见的&#xff0c;Host端可见&#xff0c;且具有与程序相同的生命周期 动态全局内存 主机代码使用CUDA运行时API &#xff1a; cudaMalloc 声明内存空间&#xff1b; cudaFree…

MySQL【知识改变命运】07

MySQL 1&#xff1a;Group by 分组查询1.1&#xff1a;语法&#xff1a;1.2&#xff1a;练习 2&#xff1a;having⼦句3回顾&#xff1a;3&#xff1a;内置函数3.1 :⽇期函数 1&#xff1a;Group by 分组查询 可以根据某列&#xff0c;进行分组查询&#xff0c;比如学校里面的…

基于cloudreve(Docker应用)搭建网盘服务,用于目录的分享和在线预览。

文章目录 I 基于cloudreve(Docker应用)搭建网盘服务安装主要功能设置角色最大容量II 知识扩展:网盘类的文件预览需求背景: iOS可以直接预览PDF等常见格式文件,但是Android浏览器需要先下载文件,才能查看文件内容,因此需要搭建支持目录的分享和在线预览的MinIO文件服务提供…

数据安全存储系统的概念与原理

数据安全存储系统是一种综合性的数据保护方案&#xff0c;旨在确保数据的完整性、保密性和可用性。以下是对数据安全存储系统的详细介绍&#xff1a; 一、概念与原理 数据安全存储系统通过硬件、软件和网络等多个层面的保护措施&#xff0c;防止未经授权的访问、避免数据丢失或…

【MySQL 保姆级教学】表结构的操作(4)

表结构的操作 1. 定义和语法2. 创建表 CREATE2.1 创建表的本质2.2 表的存储引擎2.3 表的字符集和校验规则2.4 创建表实例 3. 查看表结构 DESC3.1 作用3.2 示例 4. 修改表结构 ALTER4.1 添加列 ADD4.2 修改列 MODIFY4.3 删除列 DROP4.4 更改列名 CHANGE 5. 修改表名 RENAME6. 删…

一次性解决vue3引入@jiaminghi/data-view需要手动修改node_modules下文件

修改文件1&#xff1a;node_modules\jiaminghi\data-view\lib\components\decoration6\src\main.vue 修改文件2&#xff1a; node_modules\jiaminghi\data-view\lib\components\decoration3\src\main.vue 修改前&#xff1a; 修改后&#xff1a; 通过打补丁的方式对引用库进行…

【自动驾驶】控制算法(十二)横纵向综合控制 | 从理论到实战全面解析

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

Maven与Gradle的区别

Maven与Gradle是两种流行的构建工具&#xff0c;广泛用于Java项目的管理和构建。以下是它们的对比&#xff0c;包括官网、Windows 11配置环境、在IDEA中的相同点和不同点&#xff0c;以及它们各自的优缺点。 官网 Maven官网: https://maven.apache.orgGradle官网: https://gr…

将爱传递 将“服务好”延伸

从泰康客户,转身成为泰康人,她直言是因为亲身感受了泰康“服务好”的魅力。 入司已8年的泰康养老浙江分公司HWP何英英,是泰康“服务好”的受益者。她从朋友的理赔中见证了泰康服务好的温度与力量,又被泰康养老的职域模式所吸引选择加入泰康。如今,她全身心投入在服务的第一线,…

2024软考网络工程师笔记 - 第4章.局域网和城域网

文章目录 局域网基础1️⃣局域网和城域网体系架构 IEEE&#xff08;负责链路层&#xff09;2️⃣局域网拓扑结构 &#x1f551;CSMA/CD1️⃣CSMA/CD2️⃣CSMA/CD三种监听算法3️⃣冲突检测原理 &#x1f552;二进制指数退避算法1️⃣ 二进制指数退避算法 &#x1f553;最小帧长…

分库分表方式介绍

分库分表方式 分库分表包括分库和分表两个部分&#xff0c;在生产中通常包括&#xff1a;垂直分库、水平分库、垂直分表、水平分表四种方式&#xff1b; 1、垂直分表 1.1 垂直分表定义 垂直分表就是在同一数据库内将一张表按照指定字段分成若干表&#xff0c;每张表仅存储其…

RabbitMQ是什么?

了解MQ 消息队列&#xff08;MQ&#xff09;是一种用于异步通信的通信机制&#xff0c;通过将消息存储在队列中以实现系统之间的解耦。MQ 的主要功能是异步传递消息&#xff0c;允许发送者将消息发送到队列中&#xff0c;而接收者可以在适当的时候从队列中读取消息。MQ 常用于…

面试-2024年7月16号

面试-2024年7月16号 自我介绍Mysql主从复制是做了一个什么样的集群&#xff1f;在Mysql的使用过程中遇到过哪些问题&#xff1f;mysql迁移具体步骤mysql漏洞修复是怎么做的。mysql的容灾方案&#xff08;灾备恢复机制&#xff09;。redis多节点怎么部署的redis的备份与恢复、迁…

【系统配置】信创系统配置文件保护与防篡改 _ 统信 _ 麒麟 _ 方德

原文链接&#xff1a;【系统配置】信创系统配置文件保护与防篡改 | 统信 | 麒麟 | 方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何在信创&#xff08;国产化&#xff09;系统中进行配置文件保护与防篡改的文章。随着信创系统在各行业的广泛应用&#x…