mariadb不能导入与mysql可以,mysql/mariadb知识点总结(12):insert语句总结
这篇文章总结了mysql中的insert语句,delete、update、select等DML语句将会在其他文章中单独总结。
在本博客中,”mysql”是一个系列文章,这些文章主要对mysql/mariadb的常用知识点进行了总结,每一篇博客总结的知识点有所不同,具体内容可参考mysql文章列表。
mysql文章列表直达链接:mysql知识点总结
insert常用语句
mysql中insert语句的语法如下
insert into tablename(字段1名称,字段2名称,…) values(字段1值,字段2值,…)
示例如下:
向表tb1中插入一条数据,插入数据对应的字段为name和age,name的值为tom,age为33。
insert into tb1 (name,age) values('tom',33);
向表tb1中插入多条数据,具体含义同上,只不过是插入多条语句。
insert into tb1 (name,age) values('jerry',22),('naruto',28);
也可以不指定字段,表示对应每个字段都会有插入的数据。
insert into tb1 values (4,'Sasuke',28),(5,'hinata',25);
其实,除了使用上述的语法插入数据,我们还能够使用如下语法
insert into tablename set 字段1名称=字段1值,字段2名称=字段2值
示例如下:
insert into tbl2 set id=2,name="test",age=18,gender='M';
聪明如你一定发现了,上述两种语法的不同之处在于,字段名称与字段值是否分开了,使用set的方式字段名与字段值是在一起的。
除了这一点不同之处,其实,他们还有另外一点不同,就是,使用set的方式插入数据时,insert语句中字段的顺序可以与表中字段的顺序不同,而第一种语法中,字段顺序必须与表中字段的顺序相同。
还需要注意的是,mysql默认的sqlmode为宽松模式,这意味着即使插入的数据并不是完全符合数据类型的要求,也有可能也能插入数据。示例如下:
可以从上图中看到,tb表中的name字段的数据类型为char(5),也就是说name字段最多只能插入5个字符,当我们插入的数据为naruto时,超过了5个字符的长度,但是仍然插入成功了,插入的数据自动被截取为narut,少了一个字母”o”,同理,age字段的值的最大取值为255,当我们插入大于255的数据时,数据自动变为了255,这样虽然能够插入数据,但是跟我们预期不一样,这种情况就属于对数据的校验不严格导致的,我们再看另一种情况,如下图:
tb1表中的name字段是不允许为空的,并且name字段没有对应的默认值,但是我们如果不对name字段设置对应的值,数据也能插入,mysql自动将其值设置为了空字符串,如果按照严格的标准,这样应该不允许插入数据。上述两种情况都属于对数据的校验不严格造成的。
如果我们不期望这样的事情发生,可以通过设置sql_mode参数的值进行严格限制,我们可以通过运行时设置的方式(参考”mysql数据库变量(参数)管理“)与修改配置文件的方式设置sql_mode, 此时,如果你想要在不重启的mysql情况让以后的所有连接都遵循严格的限制,需要先在运行时设置中,将global.sql_mode变量的值设置为TRADITIONAL(使用的存储引擎为innodb),同时在配置文件中设置sql_mode=TRADITIONAL(使用的存储引擎为innodb),以免重启后失效。
sql_mode最常用的几种重要模式如下:
ANSI:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据截断保存,报警告信息,默认应该就是这种。
STRICT_TRANS_TABLES:只在事务型表中进行严格限制。
STRICT_ALL_TABLES:对所有表进行严格限制。
TRADITIONAL :严格模式,当插入数据时,进行数据的严格校验,错误的数据将不能被插入,报error错误。用于事物时,会进行事物的回滚,官方提醒我们说,如果我们使用的存储引擎是非事务型的存储引擎(比如myisam),当我们使用这种模式时, 如果执行非法的插入或更新数据操作时,可能会出现部分完成的情况。
sql_mode更多模式可以官方文档
mariadb不能导入与mysql可以,mysql/mariadb知识点总结(12):insert语句总结相关推荐
- 将mysql表数据拼接成oracle的insert语句
(1)将表名传入下面的select,将生成的sql复制出来执行就可以得到insert语句 select CONCAT('select CONCAT(\'INSERT INTO ',TABLE_NAME ...
- mysql数据库insert语句怎么写_MySQL数据库Insert语句7种写法
简介 很多开发人员工作了几年之后,都会自嘲,自己啥技术都没学到,就会CRUD,可是我要说的是,CRUD你真的都会吗,你在MySQL数据库中,会几种insert语句写法呢.在这里我会7种写法,下面我就来 ...
- mysql数据库使用一条insert语句同时插入多条数据
我们常见的MySQL数据库插入数据的方法是insert语句,例如: INSERT INTO student(name,no,age,address) VALUES ('张三','1001',20,'上 ...
- 如何在 MySQL / MariaDB 中导入导出数据,导入导出数据库文件、Excel、CSV
文章目录 本教程将详细讲解 1. MySQL / MariaDB 数据库数据「导出」 2. MySQL / MariaDB 数据库数据「导入」 3. 使用「卡拉云」一键导入导出 MySQL / Mar ...
- mariadb mysql同步_MySQL(Mariadb)主从同步基础
一.准备阶段 两台linux虚拟机centos7版本,都安装了mariadb 5.5.6 进行主从同步配置: 首先防火墙要开放3306端口, 主库服务器ip:192.168.211.100 从库服务器 ...
- MySQL迁移至MariaDB
为什么要用MariaDB来代替MySQL MariaDB是MySQL社区开发的分支,也是一个增强型的替代品.它由MySQL前开发者们带头组织的基金会开发,使用起来和MySQL完全一样.自从Oracle ...
- mysql迁移到mariadb_项目从MYSQL迁移至MARIADB教程
准备数据库(MySQL),若已有MySQL,可忽略. build MySQL table; 连接MySQL; mysql -u root -p 创建数据表; mysql> create data ...
- Mysql数据库迁移Mariadb完整方案
Mysql数据库迁移Mariadb方案 一. 文档描述 l 目的:测试window和linux上MariaDB支持性. l 原则:window下保留原有Mysql ,安装MariaDB ...
- mariadb 没有mysql表_数据未插入mySQL表(MariaDB)
我目前正在尝试实现一个python脚本,它将在我的SQL数据库(MariaDB)的表中插入两个虚拟值.我在我的覆盆子皮上使用拉伸操作系统.在 我首先在MariaDB的现有数据库中成功地创建了一个表.在 ...
最新文章
- HDU1089-1096 A+B for Input-Output Practice 系列问题(输入输出格式练习)
- 三点弯曲弹性模量怎么计算公式_拉力试验机常用力学计算公式
- 应用Rational 工具简化基于J2EE的项目(二)启动项目
- markdown 表格对齐方式、换行、内嵌列表、...
- LeetCode 110平衡二叉树-简单
- ride中for循环的使用_robotframework-ride使用(Builtin标准库)
- 中国天然金红石市场趋势报告、技术动态创新及市场预测
- c++ floor 赋值_C++之floor函数
- 【译】BMP格式与JPG格式之间的区别
- 分布式架构入门心得小结(1)
- 【优化预测】基于matlab粒子群算法优化BP神经网络(多输入多输出)【含Matlab源码 1418期】
- sklearn库里几种回归模型
- matlab取整函数与取余函数
- 关于升级短信源码开发接入SMPP通道
- 目标检测yolo, voc, coco的BBox格式转换
- 监控树莓派Raspberry Pi的CPU/GPU的温度
- 简单实现dom4j解析xml
- 各种线上推广手段的投入产出比数字公布
- form表单的action属性设置相对路径
- 订阅号微信公众号历史文章爬虫php,2019.9月最新爬取微信公众号历史文章的办法...
热门文章
- WinSocket模型的探讨——完成端口模型
- 杨元庆:出身中国是联想吸引国际用户的障碍
- 程序员:你的效率可以提高三倍
- 代码的简单就在于——直接能看懂
- 面试了一个 39 岁程序员,全程让我都感觉有点慌.....
- Google推出了Python最牛逼的编辑器,你知道吗?
- 想都不敢想!这8个神奇“黑科技”原来已经有人弄出来了
- sql去重复查询distinct_SQL的简单查询
- Nature公开1300多篇论文工厂论文的期刊分布,这个杂志高居榜首
- 给地球上的22.8万种植物建立图像索引