【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: 0

mysql> 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: 0

mysql> 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)

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

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

相关文章

苍穹外卖—订单模块

该模块分为地址表的增删改查、用户下单、订单支付三个部分。 第一部分地址表的增删改查无非就是对于单表的增删改查,较基础,因此直接导入代码。 地址表 一个用户可以有多个地址,同时有一个地址为默认地址。用户还可为地址添加例如&q…

从ChatGPT热潮看智算崛起

2025年1月7日,科智咨询发布《2025年IDC产业七大发展趋势》,其中提到“ChatGPT开启生成式AI热潮,智能算力需求暴涨,算力供给结构发生转变”。 【图片来源于网络,侵删】 为何会以ChatGPT发布为节点呢?咱们一起…

【Uniapp-Vue3】setTabBar设置TabBar和下拉刷新API

一、setTabBar设置 uni.setTabBarItem({ index:"需要修改第几个", text:"修改后的文字内容" }) 二、tabBar的隐藏和显式 // 隐藏tabBar uni.hideTabBar(); // 显示tabBar uni.showTabBar(); 三、为tabBar右上角添加文本 uni.setTabBarBadge({ index:"…

【express-generator】06-RESTFUL API设计(第二阶段)

前言: 前面我们学习了第一阶段的express-generator内容以及做了对应练习,现在我们正式开始第二阶段的学习以及练习。本篇介绍的内容是RESTFUL API设计。 第二阶段的大纲如下: RESTful API 设计: 学习如何设计符合 REST 原则的 …

Python 预训练:打通视觉与大语言模型应用壁垒——Python预训练视觉和大语言模型

大语言模型是一种由包含数百亿甚至更多参数的深度神经网络构建的语言模型,通常使用自监督学习方法通过大量无标签文本进行训练,是深度学习之后的又一大人工智能技术革命。 大语言模型的发展主要经历了基础模型阶段(2018 年到2021年)、能力探索阶段(2019年…

【深度学习】2.视觉问题与得分函数

计算机视觉任务 可以通过神经网络搜索是什么类别的动物。 图像实际就是含有数值的三维矩阵。 像素值从0-255可以表示亮度递增的参数。数字越大,像素点越亮。 最后的3表示三个颜色通道,常见的如JPG、RGB等。 现实场景容易发生各种遮蔽现象。 计算机判断…

1.CSS的三大特性

css有三个非常重要的三个特性&#xff1a;层叠性、继承性、优先级 1.1 层叠性 想通选择器给设置想听的样式&#xff0c;此时一个样式就会覆盖&#xff08;层叠&#xff09;另一个冲突的样式。层叠性主要是解决样式冲突的问题。 <!DOCTYPE html> <html lang"en&…

使用Edge打开visio文件

使用Edge打开visio文件 打开Edge浏览器搜索‘vsdx edge’ 打开第一个搜索结果 Microsoft Support 根据上述打开的页面进行操作 第一步&#xff1a;安装Visio Viewer 第二步&#xff1a;添加注册表 桌面新增文本文件&#xff0c;将下面的内容放入新建文本中&#xff0c;修…

基于微信小程序的健身管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

GPS信号生成:C/A码序列生成【MATLAB实现】

GPS C/A码序列生成【MATLAB实现】 在本文中&#xff0c;将简要介绍GPS C/A码及其生成原理&#xff0c;并且用MATLAB代码实现。 GPS信号与C/A码 GPS的信号主要有三类&#xff1a;载波&#xff08;carrier&#xff09;、测距码&#xff08;也可以说是伪随机噪声码&#xff0c;…

redis离线安装部署详解(包括一键启动)

像上文一样 因为在学习的过程中没有查到一个详细的离线部署方案 所以在自己学习之后想要自己写一个文章 希望可以帮助后续学习redis离线部署的朋友少走一线弯路 首先就是下载安装包 可以自己在本地下载再传到机器上&#xff08;通过xftp或lrzsz都可&#xff09; http://d…

Hadoop•搭建完全分布式集群

听说这里是目录哦 一、安装Hadoop&#x1f955;二、配置Hadoop系统环境变量&#x1f96e;三、验证Hadoop系统环境变量是否配置成功&#x1f9c1;四、修改Hadoop配置文件&#x1f36d;五、分发Hadoop安装目录&#x1f9cb;六、分发系统环境变量文件&#x1f368;七、格式化HDFS文…

安卓动态设置Unity图形API

命令行方式 Unity图像api设置为自动,安卓动态设置Vulkan、OpenGLES Unity设置 安卓设置 创建自定义活动并将其设置为应用程序入口点。 在自定义活动中,覆盖字符串UnityPlayerActivity。updateunitycommandlineararguments (String cmdLine)方法。 在该方法中,将cmdLine…

Java春招面试指南前言

在当今竞争激烈的就业市场中&#xff0c;对于即将踏入职场的Java开发者而言&#xff0c;春招是一次宝贵的机会。本博客专栏旨在为大家提供一份全面且实用的Java春招面试指南&#xff0c;助力大家顺利通过面试&#xff0c;开启职业生涯的新篇章。 无论你是初出茅庐的应届生&…

记录一次k8s起不来的排查过程

我在k8s集群&#xff0c;重启了一个node宿主机&#xff0c;竟然发现kubelet起不来了&#xff01;报错如下 这个报错很模糊&#xff0c;怎么排查呢。这样&#xff0c;开两个界面&#xff0c;一个重启kubelet&#xff0c;一个看系统日志(/var/log/message:centos&#xff0c;/va…

利用Qt5.15.2编写Android程序时遇到的问题及解决方法

文章目录 背景1.文件读写 背景 目前我用的是Qt5.15.2来编写Qt程序&#xff0c;环境的配置看我这篇文章【Qt5.15.2配置Android开发环境】 项目中的一些配置的截图&#xff1a; 1.文件读写 假如直接用 QFileDialog::getExistingDirectory来获取路径的话&#xff0c;会得到类…

JVM深入学习(一)

目录 一.JVM概述 1.1 为什么要学jvm&#xff1f; 1.2 jvm的作用 1.3 jvm内部构造 二.JVM类加载 2.1类加载过程 2.2类加载器 2.3类加载器的分类 2.4双亲委派机制 三.运行时数据区 堆空间区域划分&#xff08;堆&#xff09; 为什么分区(代)&#xff1f;&#xff08…

o1 医学推理:基于推断时长扩展与旅程学习,仅用 500 条蒸馏示例,实现 6%~11% 性能提升

o1 医学推理&#xff1a;基于推断时长扩展与旅程学习&#xff0c;仅用 500 条蒸馏示例&#xff0c;实现 6%&#xff5e;11% 性能提升 论文大纲1. 提出背景是什么&#xff1f;2. 概念的性质是什么&#xff1f;是什么导致这个性质&#xff1f;3. 请举一个正例、一个反例&#xff…

微信小程序隐藏右侧胶囊按钮,分享和关闭即右侧三个点和小圆圈按钮

在微信小程序开发过程中&#xff0c;可能需要将右侧的胶囊按钮、即右侧的三个点和小圆圈按钮关闭掉。如图&#xff1a; 这时&#xff0c;我们只需在该页面的json文件中进行相关配置即可 {"navigationBarTitleText": "商品详情页","navigationStyle&q…

chrome小插件:长图片等分切割

前置条件&#xff1a; 安装有chrome谷歌浏览器的电脑 使用步骤&#xff1a; 1.打开chrome扩展插件 2.点击管理扩展程序 3.加载已解压的扩展程序 4.选择对应文件夹 5.成功后会出现一个扩展小程序 6.点击对应小程序 7.选择图片进行切割&#xff0c;切割完成后会自动保存 代码…