【MySQL — 数据库增删改查操作】深入解析MySQL的create insert 操作
数据库CRUD操作
1 CRUD简介
CURD是对数据库中的记录进行基本的增删改查操作:
2. Create 新增
语法
INSERT [INTO] table_name[(column [,column] ...)]
VALUES(value_list)[,(value_list)] ... # value 后面的列的个数和类型,要和表结构匹配value_list: value,[,value] ...
示例
(1) 单行数据全列插入
插入记录时,值的数量必须与表定义的列数量及顺序一致,类型匹配;
mysql> create table student(id int , name varchar(20));
Query OK, 0 rows affected (0.09 sec)mysql> insert into student value(1, '小雷');
Query OK, 1 row affected (0.02 sec)mysql> select*from student;
+------+--------+
| id | name |
+------+--------+
| 1 | 小雷 |
+------+--------+
1 row in set (0.00 sec)
注意:
- 按向上的方向键可以查看之前输入的 SQL 指令;
- 需要确保,创建数据库的时候,指定了字符集是utf8 / gbk 等能支持中文的字符集,比如 mysql 5,默认的字符集是拉丁文;因此,如果发现插入的中文数据出现报错,大概率是创建数据库的时候没有正确指定字符集。
- 值的数量必须与表定义的列数量及顺序不一致:
mysql> insert into student value(2);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
- 插入的类型与表结构不匹配:
mysql> insert into student value('小美', 2);
ERROR 1366 (HY000): Incorrect integer value: '小美' for column 'id' at row 1
mysql> insert into student value('100',200);
Query OK, 1 row affected (0.01 sec)mysql> select*from student;
+------+--------+
| id | name |
+------+--------+
| 1 | 小雷 |
| 100 | 200 |
+------+--------+
2 rows in set (0.00 sec)
之前定义的列 list (int ,varchar),为什么此时可以成功插入 value('100' , 200) 呢?
解析:隐式类型转换
SQL 中的类型系统,和 Java 差异很大,上述插入数据的时候,value :
- 第一列写的是字符串类型 '100' ,但是会尝试自动转成 int,'100' => 100
- 第二列写的是整数类型 200 ,会尝试自动转成字符串,200 => '200'
- 之前插入 value('小美' , 2) 插入失败的原因是把' 小美 ' 尝试转成 int ,转换失败,就无法完成插入;
隐式类型转换在 Java 中是非常排斥的,但是 SQL 支持;
- 比较支持隐式类型转换,称为"弱类型系统”
- 不太支持隐式类型转换,称为"强类型系统”
拓展:关于类型转换,这里引入了 "弱类型系统” 和 "强类型系统” 两个新名词,除此之外,两个类型系统,动态类型和静态类型,但是这两组类型其实是互不相关的概念:
- 动态类型:程序运行过程中,一个变量的类型,是可以改变的:Python, js, Ruby, PHP.....
- 静态类型:程序运行过程中,变量的类型不能改变:C,C++,Java
如果 ' 0 ' 通过隐式类型转换,转换的是 0,而不是ASCII码值,因为'0'是一个字符串,而不是一个字符;
mysql> insert into student value('000',200);
Query OK, 1 row affected (0.00 sec)mysql> select*from student;
+------+--------+
| id | name |
+------+--------+
| 1 | 小雷 |
| 0 | 200 |
+------+--------+
3 rows in set (0.00 sec)
value 后面插入的是整数/浮点数,直接插入即可,如果是字符串,需要使用" "或者' '引起来
(2) 单行数据指定列插入
mysql> insert into student(name) value('小美');
Query OK, 1 row affected (0.01 sec)mysql> select*from student;
+------+--------+
| id | name |
+------+--------+
| 1 | 小雷 |
| NULL | 小美 |
+------+--------+
4 rows in set (0.00 sec)
NULL 在 sql 中表示 “空”,这个单元格里啥都没写;
插入记录时,值的数量必须与指定列数量及顺序一致:
mysql> insert into student(name, id) value('小雷',666);
Query OK, 1 row affected (0.00 sec)mysql> select*from student;
+------+--------+
| id | name |
+------+--------+
| 1 | 小雷 |
| NULL | 小美 |
| 666 | 小雷 |
+------+--------+
5 rows in set (0.00 sec)
(3) 多行数据指定列插入
mysql> insert into student(id, name) values (4, '小帅'), (5, '小明');
Query OK, 2 rows affected (0.13 sec)
Records: 2 Duplicates: 0 Warnings: 0mysql> select*from student;
+------+--------+
| id | name |
+------+--------+
| 4 | 小帅 |
| 5 | 小明 |
+------+--------+
7 rows in set (0.01 sec)
mysql 是一个"客户端-服务器"结构的程序;
现在我们要插入三条记录,可以一次插入一行,分三个 SQL 完成,也可以一次插入三行,一个 SQL 完成;这两种做法的差别是非常明显的:
如果插入一行,分三次SQL完成,就会涉及到三次客户端和服务器的交互过程;
一次插入三行,一次SQL完成,则只需要进行一次客户端服务器交互即可;
一个 sql 包含的数据多少,不是主要矛盾;除非数据差异太大了,可能有明显影响,如果只是差了几条,区别是不大的;所以客户端-服务器交互过程中,交互的次数越多,整体的开销就越大,花的时间就越长。
上述讨论的,一次插入多行,一次指定列插入,是可以配合使用的:
mysql> insert into student (name) values ('小雷'),('小美'),('小花');
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0mysql> select*from student;
+------+--------+
| id | name |
+------+--------+
| NULL | 小雷 |
| NULL | 小美 |
| NULL | 小花 |
+------+--------+
10 rows in set (0.00 sec)
(4) 插入时间日期
mysql> create table mytime(time datetime);
Query OK, 0 rows affected (0.17 sec)mysql> insert into mytime values('2025-01-23 11:34:00'); #注意插入的时间格式
Query OK, 1 row affected (0.02 sec)mysql> select*from mytime;
+---------------------+
| time |
+---------------------+
| 2025-01-23 11:34:00 |
+---------------------+
1 row in set (0.00 sec)
有的时候插入的时间日期,希望就是"当前时刻";SQL 作为一个编程语言,也支持一些库函数
mysql> insert into mytime values(now()); # now() -> 获取到当前的时间日期.
Query OK, 1 row affected (0.01 sec)mysql> select*from mytime;
+---------------------+
| time |
+---------------------+
| 2025-01-23 11:40:08 |
+---------------------+
2 rows in set (0.00 sec)
相关文章:

【MySQL — 数据库增删改查操作】深入解析MySQL的create insert 操作
数据库CRUD操作 1 CRUD简介 CURD是对数据库中的记录进行基本的增删改查操作: 2. Create 新增 语法 INSERT [INTO] table_name[(column [,column] ...)] VALUES(value_list)[,(value_list)] ... # value 后面的列的个数和类型,要和表结构匹配…...

每日OJ_牛客_小红的子串_滑动窗口+前缀和_C++_Java
目录 牛客_小红的子串_滑动窗口前缀和 题目解析 C代码 Java代码 牛客_小红的子串_滑动窗口前缀和 小红的子串 描述: 小红拿到了一个长度为nnn的字符串,她准备选取一段子串,满足该子串中字母的种类数量在[l,r]之间。小红想知道&…...

HTTP 配置与应用(局域网)
想做一个自己学习的有关的csdn账号,努力奋斗......会更新我计算机网络实验课程的所有内容,还有其他的学习知识^_^,为自己巩固一下所学知识,下次更新HTTP 配置与应用(不同网段)。 我是一个萌新小白…...

ultralytics 是什么?
ultralytics 是一个用于计算机视觉任务的 Python 库,专注于提供高效、易用的目标检测、实例分割和图像分类工具。它最著名的功能是实现 YOLO(You Only Look Once) 系列模型,特别是最新的 YOLOv8。 1. YOLO 是什么? YO…...

AI竞争:从技术壁垒到用户数据之争
标题:AI竞争:从技术壁垒到用户数据之争 文章信息摘要: AI市场呈现开放模型与封闭模型并存的双轨发展态势,但核心竞争力已从模型技术转向用户数据积累和使用习惯培养。商业模式正在多元化发展,从早期的价格战转向subsc…...

MySQL 主从复制(单组传统复制,GTID复制。双主复制)
案例环境 单组复制 master: 192.168.180.143 slave01:192.168.180.144 双组复制 master01:192.168.180.143 master02:192.168.180.144 案例过程 准备工作 关闭所有防火墙 setenforce 0 && systemctl stop firewa…...

python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖
【1】引言 前序学习了使用numpy创建单通道的灰色图像,并对灰色图像的局部进行了颜色更改,相关链接为: python学opencv|读取图像(九)用numpy创建黑白相间灰度图_numpy生成全黑图片-CSDN博客 之后又学习了使用numpy创…...

vue3 中如何监听 props 中的值的变化
在 Vue 3 中,你可以使用 watch 函数来监听组件的 props 值的变化。watch 函数允许你观察一个或多个响应式数据源,并在这些数据源发生变化时执行回调函数。 以下是一个示例,展示了如何在 Vue 3 中使用 watch 来监听 props 中的值的变化&#…...

Scrapy之一个item包含多级页面的处理方案
目标 在实际开发过程中,我们所需要的数据往往需要通过多个页面的数据汇总得到,通过列表获取到的数据只有简单的介绍。站在Scrapy框架的角度来看,实际上就是考虑如何处理一个item包含多级页面数据的问题。本文将以获取叶子猪网站的手游排行榜及…...

hive 自动检测、自动重启、记录检测日志、自动清理日志
最终效果 定时检测hive运行状态,进程不存在或者进程存在但是不监听端口的hiveserver2,自动重新拉起每次检测脚本执行的日志都会保存在log目录下.check文件,每一个月一个文件每月15日,删除2月前的检测日志开启hive自带日志输出后&…...

HFSS同轴替换波端口
波端口仿真正常 将波端口换成内径内径0.3mm外径0.6mm同轴之后 结果很不对 换成下面的尺寸就好了...

【2024年华为OD机试】 (C卷,100分)- 素数之积(JavaScriptJava PythonC/C++)
一、问题描述 RSA 因数分解问题 题目描述 RSA 加密算法在网络安全世界中无处不在,它利用了极大整数因数分解的困难度。数据越大,安全系数越高。给定一个 32 位正整数,请对其进行因数分解,找出是哪两个素数的乘积。 输入描述 …...

【C++模板】:如何判断自定义类型是否实现某个函数
一、引子 偶尔我们会面对这样的尴尬的场景,我们需要显示的去判断在某个自定义类型中,是否已经提供了我们期待的API接口,以避免产生“莫须有”的错误。阁下该如何破解此问题! 这里,直接给出一种通用的方法,…...

基于微信小程序的汽车保养系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...

电子应用设计方案102:智能家庭AI鱼缸系统设计
智能家庭 AI 鱼缸系统设计 一、引言 智能家庭 AI 鱼缸系统旨在为鱼类提供一个健康、舒适的生活环境,同时为用户提供便捷的管理和观赏体验。 二、系统概述 1. 系统目标 - 自动维持水质稳定,包括水温、酸碱度、硬度和溶氧量等关键指标。 - 智能投食&…...

【Elasticsearch】RestClient操作文档
RestClient操作文档 新增文档实体类API语法 查询文档删除文档修改文档批量导入文档小结 新增文档 将数据库中的信息导入elasticsearch中 以商品数据为例 实体类 定义一个索引库结构对应的实体。 Data ApiModel(description "索引库实体") public class ItemDoc{…...

内存条的构造、原理及性能参数
内存条的构造、原理及性能参数 一、内存条的构造1.1 外观结构1.1.1 芯片:大脑1.1.2 PCB板:骨架1.1.3 金手指:接口1.1.4 电容电阻:稳压、稳流1.1.5 防呆缺口:防错 1.2 内部层次结构 二、内存条的工作原理2.1 数据的“搬…...

鸿蒙模块概念和应用启动相关类(HAP、HAR、HSP、AbilityStage、UIAbility、WindowStage、window)
目录 鸿蒙模块概念 HAP entry feature har shared 使用场景 HAP、HAR、HSP介绍 HAP、HAR、HSP开发 应用的启动 AbilityStage UIAbility WindowStage Window 拉起应用到显示到前台流程 鸿蒙模块概念 HAP hap包是手机安装的最小单元,1个app包含一个或…...

SQLark 百灵连接工具便捷功能之生成数据库测试数据
参考此文: SQLark百灵连接工具--数据生成...

ChirpIoT技术的优势以及局限性
ChirpIoT是一种由上海磐启微电子开发的国产无线射频通讯技术,ChirpIoT技术基于磐启多年对雷达等线性扩频信号的深入研究,并在此基础上对线性扩频信号的变化进行了改进,实现了远距离传输的一种无线通信技术。相关产品型号有E29-400T22D、E290-…...

Jetpack架构组件学习——使用Glance实现桌面小组件
基本使用 1.添加依赖 添加Glance依赖: // For AppWidgets supportimplementation "androidx.glance:glance-appwidget:1.1.0"// For interop APIs with Material 3implementation "androidx.glance:glance-material3:1.1.0"// For interop APIs with Mater…...

C++函数——fill
在C中,std::fill 是标准库提供的一个算法适用于几乎所有类型的容器,只要这些容器支持迭代器操作。具体来说,std::fill 的适用性取决于容器是否提供了满足其要求的迭代器类型,用于将指定范围内的所有元素设置为某个特定值。它是一个…...

二叉树(了解)c++
二叉树是一种特殊的树型结构,它的特点是: 每个结点至多只有2棵子树(即二叉树中不存在度大于2的结点) 并且二叉树的子树有左右之分,其次序不能任意颠倒,因此是一颗有序树 以A结点为例,左边的B是它的左孩子,右边的C是…...

备赛蓝桥杯之第十五届职业院校组省赛第三题:产品360度展示
提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题࿰…...

业余无线电 对讲机常用频率使用
我自己的总结是,基本可以无忧使用: 144.035-145.800 146.000-148.000 430.000-431.900 432.240-435.000 438.000-439.000 50Mhz一般手台不支持,暂不记录。 以下为附录可以自行阅读,本文内容如有错误请留言指正。 特定波段…...

个性化的语言模型构建思路
将开源模型(如Llama3、Qwen、Falcon3 … 等)转变为个人专属的大语言模型,通常涉及知识库的构建、微调(fine-tuning)和模型定制等步骤。下面提供一个详细的技术解决方案,涵盖了如何利用现有的资料(如文档、PDF、Excel、PPT、图片、语音、视频等)将开源模型转换为个人专属…...

QT开发技术【QFileDialog卡顿问题】
一、直接用QFileDialog 在window 一般卡顿7秒 qDebug() << "begin:" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");QDateTime sTime QDateTime::currentDateTime();QString str QFileDialog::getOpenFileName(null…...

关于为什么java中nextInt()和nextLine()不能混用 | nextInt()和nextInt()之类的可以一起用
键盘录入的区别: 第一套体系:遇到空格、制表符、回车都结束,并且都不接收 nextInt()、nextDouble()、next() 遇到空格、制表符、回车就结束,只接收其之前的数据,空格以及空格之后的数据都在缓冲区内,如果…...

Android OpenGL(六) 纹理
纹理 纹理是一个2D图片(甚至也有1D和3D的纹理), 它可以用来添加物体的细节;你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的 房子上,这样你的房子看起来就像有砖墙外表了 纹理环绕方式 纹理坐…...

git和idea重新安装后提交异常
场景:我重装了系统,idea装了2024.3版本的,git也重新装了,但是项目中还是有.git文件夹的,下载了idea的码云插件后,提交报错如下: 异常:Error updating changes: detected dubious ow…...