MySql学习笔记05——DML

DML

插入数据insert

insert into 表名(字段名1,字段名2,字段名3...)values(1,值2,值3)

字段名和值要一一对应(顺序对应,数据类型对应)

insert into t_student(no,name,sex,age,email) values(1,'Jack','b',12,'123456@123.com');
+------+------+------+------+----------------+
| no   | name | sex  | age  | email          |
+------+------+------+------+----------------+
|    1 | Jack | b    |   12 | 123456@123.com |
+------+------+------+------+----------------+
insert into t_student(email,name,sex,age,no) values('lisi@123.com','lisi','f',20,2);
+------+------+------+------+----------------+
| no   | name | sex  | age  | email          |
+------+------+------+------+----------------+
|    1 | Jack | b    |   12 | 123456@123.com |
|    2 | lisi | f    |   20 | lisi@123.com   |
+------+------+------+------+----------------+
insert into t_student(no) values(3);
+------+------+------+------+----------------+
| no   | name | sex  | age  | email          |
+------+------+------+------+----------------+
|    1 | Jack | b    |   12 | 123456@123.com |
|    2 | lisi | f    |   20 | lisi@123.com   |
|    3 | NULL | NULL | NULL | NULL           |
+------+------+------+------+----------------+

insert语句只负责插入数据,不负责修改数据。

没有给其它字段指定值的话,默认值是NULL。

通过关键字default可以设置字段的默认值,例如:

sex char(1) default 'm',

insert语句中的字段名可以省略,但是values中的值就必须全部写上,并且一一对应。

insert插入时间

create table t_user(id int(11),name varchar(32),birth date
);
 insert into t_user values(123,'Jack',str_to_date('01-10-1990','%d-%m-%Y'));

使用str_to_date函数将字符串类型转换成data类型。

str_to_date('字符串日期','日期格式')

MySQL日期格式:

%Y    年// 注意这里Y大写
%m  月
%d  日
%h    时
%i    分
%s    秒

通常使用在插入insert方面,因为插入的时候需要一个日期类型的数据,需要通过该函数将字符串转换成date

如果你提供的日期字符串是%Y-%m-%d这个格式,str_to_date函数就不需要了!!!

查询的时候可以使用date-format函数将日期类型转化成特定格式的字符串。

date_format('日期类型数据', '日期格式')
mysql> select * from t_user;
+------+------+------------+
| id   | name | birth      |
+------+------+------------+
|  123 | Jack | 1990-10-01 |
|  124 | Lili | 1991-06-21 |
+------+------+------------+

默认的日期显示格式是%Y-%m-%d

自定义显示格式:

mysql> select id,name,date_format(birth,'%Y/%m/%d') as birth from t_user;
+------+------+------------+
| id   | name | birth      |
+------+------+------------+
|  123 | Jack | 1990/10/01 |
|  124 | Lili | 1991/06/21 |
+------+------+------------+

date和datetime之间的区别

date是短日期,只包括年月日

datetime是长日期,包括年月日,时分秒

mysql短日期默认格式:%Y-%m-%d
mysql长日期默认格式:%Y-%m-%d %h:%i:%s

create table t_user(id int,name varchar(32),birth date,create_time datetime
);insert into t_user(id,name,birth,create_time) values(123,'Tim','1990-10-01','2021-06-21 12:12:52');
mysql> select * from t_user;
+------+------+------------+---------------------+
| id   | name | birth      | create_time         |
+------+------+------------+---------------------+
|  123 | Tim  | 1990-10-01 | 2021-06-21 12:12:52 |
+------+------+------------+---------------------+

now()函数可以获取系统的时间,并且是datetime类型的。

insert into t_user (id,name,birth,create_time) values(122,'Jan','2012-12-23',now());
mysql> select * from t_user;
+------+------+------------+---------------------+
| id   | name | birth      | create_time         |
+------+------+------------+---------------------+
|  123 | Tim  | 1990-10-01 | 2021-06-21 12:12:52 |
|  122 | Jan  | 2012-12-23 | 2022-07-17 12:28:10 |
|  111 | Nik  | 2011-06-23 | 2022-07-17 12:28:34 |
+------+------+------------+---------------------+

当然了,datetime也是支持函数date_format进行格式化显示的

mysql> select id,name,birth,date_format(create_time,'%h/%i/%s %Y-%m-%d')as create_time from t_user;
+------+------+------------+---------------------+
| id   | name | birth      | create_time         |
+------+------+------------+---------------------+
|  123 | Tim  | 1990-10-01 | 12/12/52 2021-06-21 |
|  122 | Jan  | 2012-12-23 | 12/28/10 2022-07-17 |
|  111 | Nik  | 2011-06-23 | 12/28/34 2022-07-17 |
+------+------+------------+---------------------+

修改表中数据update

update 表名 set 字段名1=新值1,字段名2=新值2,字段名3=新值3...where 条件

这里的where条件是用来判断修改哪一行的数据。

mysql> select * from t_user;
+------+------+------------+---------------------+
| id   | name | birth      | create_time         |
+------+------+------------+---------------------+
|  123 | Tim  | 1990-10-01 | 2021-06-21 12:12:52 |
|  122 | Jan  | 2012-12-23 | 2022-07-17 12:28:10 |
|  111 | Nik  | 2011-06-23 | 2022-07-17 12:28:34 |
+------+------+------------+---------------------+
update t_user set birth='2013-12-01',create_time=now() where id=123;
mysql> select * from t_user;
+------+------+------------+---------------------+
| id   | name | birth      | create_time         |
+------+------+------------+---------------------+
|  123 | Tim  | 2013-12-01 | 2022-07-17 12:58:55 |
|  122 | Jan  | 2012-12-23 | 2022-07-17 12:28:10 |
|  111 | Nik  | 2011-06-23 | 2022-07-17 12:28:34 |
+------+------+------------+---------------------+

如果没有了where条件,就是更新了所有。

 update t_user set create_time=now();mysql> select * from t_user;
+------+------+------------+---------------------+
| id   | name | birth      | create_time         |
+------+------+------------+---------------------+
|  123 | Tim  | 2013-12-01 | 2022-07-17 13:00:18 |
|  122 | Jan  | 2012-12-23 | 2022-07-17 13:00:18 |
|  111 | Nik  | 2011-06-23 | 2022-07-17 13:00:18 |
+------+------+------------+---------------------+

删除表中数据delete

delete from 表名 where 条件;

如果没有条件,整个表都会被删除!!

delete from t_user where id=111;
mysql> select * from t_user;
+------+------+------------+---------------------+
| id   | name | birth      | create_time         |
+------+------+------------+---------------------+
|  123 | Tim  | 2013-12-01 | 2022-07-17 13:00:18 |
|  122 | Jan  | 2012-12-23 | 2022-07-17 13:00:18 |
+------+------+------------+---------------------+

insert插入多条数据

insert into t_user (id,name,birth,create_time) values
(1,'zs','1980-10-11',now()), 
(2,'lisi','1981-10-11',now()),
(3,'wangwu','1982-10-11',now());
mysql> select * from t_user;
+------+--------+------------+---------------------+
| id   | name   | birth      | create_time         |
+------+--------+------------+---------------------+
|    1 | zs     | 1980-10-11 | 2022-07-17 13:41:43 |
|    2 | lisi   | 1981-10-11 | 2022-07-17 13:41:43 |
|    3 | wangwu | 1982-10-11 | 2022-07-17 13:41:43 |
+------+--------+------------+---------------------+

语法:

insert into t_user(字段名1,字段名2...) values
(),
(),
(),
();

快速创建表(复制表)

create table emp2 as select * from emp;
mysql> show tables;
+------------------------+
| Tables_in_bjpowernnode |
+------------------------+
| dept                   |
| emp                    |
| emp2                   |
| salgrade               |
| t_student              |
| t_user                 |
+------------------------+
mysql> select * from emp2;
+-------+--------+-----------+------+------------+---------+---------+--------+
| EMPNO | ENAME  | JOB       | MGR  | HIREDATE   | SAL     | COMM    | DEPTNO |
+-------+--------+-----------+------+------------+---------+---------+--------+
|  7369 | SMITH  | CLERK     | 7902 | 1980-12-17 |  800.00 |    NULL |     20 |
|  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     30 |
|  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     30 |
|  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |    NULL |     20 |
|  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     30 |
|  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |    NULL |     30 |
|  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |    NULL |     10 |
|  7788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 | 3000.00 |    NULL |     20 |
|  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000.00 |    NULL |     10 |
|  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    0.00 |     30 |
|  7876 | ADAMS  | CLERK     | 7788 | 1987-05-23 | 1100.00 |    NULL |     20 |
|  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |    NULL |     30 |
|  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |    NULL |     20 |
|  7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |    NULL |     10 |
+-------+--------+-----------+------+------------+---------+---------+--------+

原理是将一个查询结果当作一张新表,实现快速表的复制

create table mytable as select empno,ename from emp where job = 'MANAGER';
mysql> select * from mytable;
+-------+-------+
| empno | ename |
+-------+-------+
|  7566 | JONES |
|  7698 | BLAKE |
|  7782 | CLARK |
+-------+-------+

将查询结果插入到表中

用的不多,了解就行了。

create table dept_bak as select * from dept;
mysql> select * from dept_bak;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
insert into dept_bak select * from dept;
mysql> select * from dept_bak;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+

快速删除表中所有数据

使用delete不增加where条件也能删除表中所有数据

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

但是它可以回滚数据:

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)
mysql> rollback;
Query OK, 0 rows affected (0.00 sec)mysql> select * from dept_bak;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
8 rows in set (0.00 sec)

但是从底层逻辑上来说,delete是一个个来删除表中的数据,效率比较低。

另外一个快速删除表中所有数据的方法是truncate

truncate table 表名;

这个操作属于DDL中的操作。

使用truncate可以快速删除表中的所有数据,但是不支持数据回滚,因此要考虑再三再去使用它。

delete语句删除数据的原理?(delete属于DML语句!!!)
表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放!!!
这种删除缺点是:删除效率比较低。
这种删除优点是:支持回滚,后悔了可以再恢复数据!!!
truncate语句删除数据的原理?
这种删除效率比较高,表被一次截断,物理删除。
这种删除缺点:不支持回滚。
这种删除优点:快速。

DDL中也有删除表的操作drop,但是drop是删除整个表,表和表的数据全部删除,truncate删除的仅仅只是表中的所有数据,表的结构还在。

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

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

相关文章

Docker使用数据卷挂载进行数据存储与共享

一、挂载和数据卷 在 Docker 中,挂载(Mounting)和数据卷(Data Volumes)是用于在容器和宿主机之间共享数据的机制。 挂载:将宿主机文件系统中的目录或文件与容器中的目录或文件进行关联的过程。数据卷&…

收入下降,亏损扩大,利润率急剧恶化,蔚来仍充满风险

来源:猛兽财经 作者:猛兽财经 蔚来第二季度财报分析 猛兽财经从蔚来(NIO)2023年第二季度财报中,获得的最大收获并不是该公司的收入下降或亏损扩大,而是由于价格竞争加剧,中国电动汽车行业整体上…

什么是安全运营中心(SOC),应该了解什么

安全运营中心(SOC) 是一种企业监视和警报设施,可帮助组织检测安全威胁、监视安全事件和分析性能数据以改进公司运营。 什么是安全运营中心(SOC) 安全运营中心(SOC)是一个中央监视和监视中心&a…

第二次作业

1.编写脚本for1.sh,使用for循环创建20账户,账户名前缀由用户从键盘输入,账户初始密码由用户输入,例如: test1、test2、test3、.....、 test10 编写脚本for1.sh 执行脚本:bash for.sh 2,编写脚本for2.sh,使用for循环,通…

springboot 集成 lucene

简介 数据每分钟产生200条,使用mysql储存。目前有数据超过700M。按照日期查询,按月查询包含每次超过20w条以上,时间比较长。计划使用lucene优化查询,不适用es是因为项目较小,没有更富裕的资源。 基本步骤 引入依赖。…

工业级大模型应用长啥样

我们可以通过开源工具,搭建大模型应用的“原型系统”,但是我要来“泼冷水”,因为这距离工业级大模型应用,还是有很大的差距。 这篇文章主要讨论这种”原型系统“可能带来的认知误区以及工业级大模型应用需要考量的因素。 “原型…

模糊测试面面观 | 模糊测试是如何发现异常情况的?

协议模糊测试是一种用于评估通信协议、文件格式和API实现系统安全性和稳定性的关键技术。在模糊测试过程中,监视器扮演着关键角色,它们能够捕获异常情况、错误响应、资源利用等,为测试人员提供有价值的信息,有助于发现潜在漏洞和问…

ceph Monitor原理和代码流程介绍

Monitor介绍 Monitor在Ceph集群中扮演管理者的角色,维护了整个集群的状态,集群的状态被抽象成几个Map对象,包括monmap、osdmap、mdsmap、authmap、logmap等,保证集群的相关组件在同一时刻能够达成一致,相当于领导层。…

删除maven中出现.lastUpdate结尾的文件

出现 .lastupdate 结尾的文件的原因:由于网络原因没有将maven的依赖下载完整. 解决方案: 1) 删除所有以 .lastupdate 结尾的文件 A) 1.切换到maven本地仓库 B)2.在当前目录打开cmd命令行(shift右键-->在此处打开命令窗口 或 直接在当前文件路径上敲cmd 或 右键-->…

el-dialog设置高度、使用resetFields清除表单项无效问题

初学者容易踩坑的的el-dialog、el-form问题 1. el-dialog设置高度2. el-form中表单项对不齐3. 使用resetFields清除表单项无效 1. el-dialog设置高度 在el-dialog中里面添加一个div设置固定高度&#xff0c;或者限制最小的高度。 <el-dialogtitle"选择图标"v-mod…

thinkphp:数据库查询,嵌套别的表的查询(别的表做子查询)

例子 从 vendors 表中选择记录。在 vendors 表中&#xff0c;筛选出具有满足以下条件的 vendor_code 值&#xff1a; 对应的采购订单&#xff08;在 po_headers_all 表中&#xff09;存在未完全接收的采购行&#xff08;在 po_lines_all 表中&#xff09;。相应的采购订单状态…

附录1-爬虫的一些技巧

目录 1 寻找url与显示内容的关系 2 修改请求头 3 局部刷新 4 阅读返回信息 5 多尝试页面其他的使用方式 6 尝试不同类型参数 7 表单类型的post多用data发&#xff0c;接口类型的post多用json发 8 消除degger 9 你在浏览器上看到的html与你下载下来的html不一…

嵌入式学习笔记(12)汇编写启动代码之设置栈和调用C语言

C语言运行时需求和栈的意义 “C语言运行时&#xff08;runtime&#xff09;”需要一定的条件&#xff0c;这些条件由汇编来提供。C语言运行时主要是需要栈。 C语言和栈的关系&#xff1a;C语言中的局部变量都是用栈来实现的。如果我们汇编部分没有给C部分预先设置合理合法的栈…

代码随想录训练营 dp

代码随想录训练营 dp 416. &#x1f338;分割等和子集&#x1f338;code 416. &#x1f338;分割等和子集&#x1f338; 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&#xff0c;使得两个子集的元素和相等。 code //看起来风轻云淡的…

【STM32】学习笔记-时间戳RTC

Unix时间戳 Unix 时间戳&#xff08;Unix Timestamp&#xff09;定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数&#xff0c;不考虑闰秒 时间戳存储在一个秒计数器中&#xff0c;秒计数器为32位/64位的整型变量 世界上所有时区的秒计数器相同&#xff0c;不同时区通…

命令执行漏洞复现攻击:识别威胁并加强安全

环境准备 这篇文章旨在用于网络安全学习&#xff0c;请勿进行任何非法行为&#xff0c;否则后果自负。 一、攻击相关介绍 原理 主要是输入验证不严格、代码逻辑错误、应用程序或系统中缺少安全机制等。攻击者可以通过构造特定的输入向应用程序或系统注入恶意代码&#xff…

Linux下 /sys/class 一些操作

Linux下&#xff0c;/dev、/sys/class的区别 /dev下面有很多节点&#xff0c;每一个节点代表一个设备&#xff0c;/dev目录下面是按物理器件进行分类&#xff1b;而/sys/class下面的更多是按功能抽象出来的。 参考1 demo 在正点原子的基础上进行演示 #include <linux/ty…

基于Matlab实现多个图像压缩案例(附上源码+数据集)

图像压缩是一种将图像数据量减少的技术&#xff0c;以减少存储空间和传输带宽的需求。在本文中&#xff0c;我们将介绍如何使用Matlab实现图像压缩。 文章目录 简单案例源码数据集下载 简单案例 首先&#xff0c;我们需要了解图像压缩的两种主要方法&#xff1a;有损压缩和无…

怎么样显卡叠加,什么是NVIDIA 显卡 非公、公版、涡轮卡

1、显存叠加的问题&#xff0c;因为这个跟是否是深度学习无关&#xff1a; 先说一下显存叠加的问题&#xff0c;因为这个跟是否是深度学习无关&#xff1a;一台机器有多张显卡&#xff0c;显存不会叠加&#xff01;显卡里面包含了显存、cache、计算单元、通信等&#xff0c;每…

防火墙日志分析工具

防火墙提供对进入组织网络的网络流量的来源和类型的可见性&#xff0c;这使得防火墙日志成为重要的信息源&#xff0c;包括所有连接的源地址、目标地址、协议和端口号等详细信息&#xff0c;此信息可以提供对未知安全威胁的见解&#xff0c;是威胁管理中的重要工具。 防火墙日…