MYSQL基础01(新增,修改,删除)
首先说明一下,本人之前一直都是用MSSQL,由于工作原因,每天写上百条sql语句,并持续了几年;由于换了工作目前主要接触的MYSQL;所以现在开始学习MYSQL。
我的学习计划很简单,我在MSSQL使用或学习到的功能,都会尝试在MYSQL实现,所以如果我都尝试了一遍,我认为MYSQL的使用也学的差不多了,当然工作中遇到的问题和解决经验也会总结下来。
刚开始工作中最首先使用的也是最常用的当然就是增删改查了,所以第一遍就会介绍MYSQL的新增,修改,删除;查询是很大的一块,所以会另外展开
INSERT
1.插入一条记录 ,很简单的标准sql
insert into mytable(col1,col2,col3) values('val1','val2',4);
说明:请留意最后的分号; 用惯了mssql ,最不适应的地方就是,mysql中每条sql语句必须用分号间开,否则如果想一次执行多条语句,就会报错.
另外,如果使用自增ID,插入时也可以设置自增ID的值,而不报错; 这对于数据迁移是一大方便.
2.复制表的数据,这跟mssql是一样的
insert into mytable(col1,col2,col3)
select col1,col2,col3 from copytable;
3.新增表并同时复制数据,这个跟mssql不同 (ms:select * into newtable from copytable)
CREATE TABLE newtable SELECT * FROM copytable WHERE 1=2;
说明:跟mssql一样,只是单纯复制表结构,索引什么的并不会复制过来; 去掉where 条件将会复制所有数据
4.批量插入,mysql的特点,有点似链式写法 (相当好用!)
insert into mytable (col1,col2,col3) values ('A','VAL1',1),('B','VAL2',2),('C','VAL3',3);
说明:执行效率相当高,同时插入数万记录也只是10秒以内;而且对于项目中的处理字符,实现批量插入相当轻松,我特别喜欢这个语句.
UPDATE
1.标准sql
UPDATE mytable SET col1='A',col2='val1',col3=1 where id='';
2.表连接更新,同时更新多列,部分跟mssql一致
UPDATE newtable a,oldtable b set a.col1=b.col1,a.col2=b.col2 where a.id=b.id;
说明:mssql的写法更加灵活,支持该写法: update newtable set col1=oldtabel.col1,col2=oldtabel.col2 from oldtabel where newtable.id=oldtabel.id
3.批量更新
REPLACE INTO mytable (id,name)VALUES ('','hello'),('','haha');
说明:跟批量插入的格式是一样的, 当values后面的数据插入到mytable中不会引起主键冲突或唯一索引冲突时,那么就会直接新增数据, 否则就会修改数据.简单点说就是,如果记录存在则更新,如果记录不存在则插入; 上例中,如果执行插入操作,受影响行数为2, 如果执行修改操作,受影响行数为4; 所以执行修改操作的本质是先delete,然后再插入.所以如果更新的字段不齐,其它字段将变为默认值 下面是该功能的增强版
INSERT INTO mytable(id,name,col)VALUES (78,'',''),(88,'','d') ON DUPLICATE KEY UPDATE name=VALUES(name),col=VALUES(col);
INSERT INTO mytable(id,name,col)VALUES (78,'456','55'),(88,'456','d') ON DUPLICATE KEY UPDATE name=VALUES(name); --只更新name
说明:跟replace 是一样的,唯一不同的是可以选择更新的列, 其它的列的值并不会受影响.
DELETE
1.标准sql
delete from mytable where id='';
2.清空表, 跟mssql是一样的
truncate table mytable;
说明:执行后,自增ID也会从1开始编号.
处理数据时注意事项
1.对日期类型的列插入数据时,如果插入的值不符合日期格式,mysql 并不会报错,但是会保存为'0000-00-00 00:00:00'的格式, 一般的程序并不会承认,所以你会发现后台读取数据没有问题,而应用程序读取数据时会报错. 这个我被坑惨了.
下面是网上找到的解决办法,并没有实际测试
给jdbc url加上 zeroDateTimeBehavior参数:
datasource.url=jdbc:mysql://localhost:3306/testdbuseUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
zeroDateTimeBehavior=round是为了指定MySql中的DateTime字段默认值查询时的处理方式;默认是抛出异常,
对于值为0000-00-00 00:00:00(默认值)的纪录,如下两种配置,会返回不同的结果:
zeroDateTimeBehavior=round //结果: 0001-01-01 00:00:00.0
zeroDateTimeBehavior=convertToNull //结果 null
目前关于mysql的新增更新删除就是以上内容,遇到新情况再补充吧
MYSQL基础01(新增,修改,删除)的更多相关文章
- Oracle忘记用户名和密码以及管理员用户新增修改删除用户
Oracle忘记密码: 1.以管理员身份登录,打开dos窗口,输入 sqlplus / as sysdba 回车 2.查看当前用户和状态 select username, account_status ...
- Java代码操作properties文件(读取,新增/修改,删除)
项目中需要用到操作properties文件中的数据,记录一下 package com.bonc.savepic.save; import java.io.FileNotFoundException; ...
- mysql 数据库 添加查询 修改 删除
cmd 命令行模式操作数据库 添加查询 修改 删除 ( 表 字段 数据) 一 查看数据库.表.数据字段.数据 1 首先配置环境变量 进入mysql 或者通过一键集成工具 打开mysql命令行 ...
- 解决mysql表不能查询修改删除等操作并出现卡死
问题现象1:进程wait卡住 测试环境mysql出现了一个怪表:select查询表卡死,alter修改表卡死,甚至我不想要这个表了,delete.truncate.drop表都卡死卡主了...... ...
- BizTalk 新增/修改/删除 XmlDocument 名字空间的高效方法
新增一个名字空间 public class AddXmlNamespaceStream : XmlTranslatorStream { private String namespace_; priva ...
- spring-data-jpa 新增 修改 删除 查询 分页
1.查询所有数据 findAll() 2.分页查询 findAll(new PageRequest(0, 2)) 3.根据id查询 findOne() 4.根据实体类属性查询: findByPro ...
- sql 新增 修改 删除 列操作
IF COL_LENGTH('SYS_Department', 'CreatedBy') IS NOT NULL --判断 SYS_Department 中是否存在 CreatedBy 字段 EXEC ...
- oracle 数据库更新 新增 修改 删除
数据增加 INSERT INTO 表名称 [(字段,字段,...)] VALUES (值,值,...) ; 考虑到日后代码的可维护性,一定要使用完整的语法进行数据的增加. 数据修改 UPDATE 表名 ...
- .net操作xml文件(新增.修改,删除,读取) 转
今天有个需求需要操作xml节点.突然见遗忘了许多.上网看了些资料.才整出来.脑袋真不够用.在这里把我找到的资料共享一下.方便以后使用.本文属于网摘/ 1 一.简单介绍2 using System.Xm ...
随机推荐
- Spring MVC 3.0 深入
核心原理: . 用户发送请求给服务器.url:user.do . 服务器收到请求.发现DispatchServlet可以处理.于是调用DispatchServlet. . DispatchServle ...
- 教你用Cocosdx导出安卓安装文件(.apk)(一)
我也是刚弄出来,过程可能有点混乱和不具体,我尽我所能写完整.各位看官多多包涵 设备环境: 我所用的是mac 10.8.5 64位 Cocosdx-3.0rc2 xcode 5.0 一.准备 ND ...
- 0c-34-自动释放池
#import <Foundation/Foundation.h> #import "Person.h" Person * creatPerson() { Person ...
- GAC(Global Assembly Cache)注册/卸载 dll
当发现有多个解决方案引用一个dll时,为了不重复引用所以将.net的一个dll注册到GAC中去. gacutil.exe. 记得使用管理员权限打开 开始菜单-Microsoft Visual Stud ...
- $.getJSON()方法的 callback说明
$.getJSON()方法跨域 去取得服务器的json对象的时候,url的后缀最后带一个"callback=?"的参数作为成功的回调函数:如: var url = "${ ...
- 1.4 Documents,Fields和Schema设计--目录
1.4.1.Documents,Fields和Schema概述 1.4.2 solr字段类型 1.4.2 solr字段类型--(1.4.2.1)字段类型定义和字段类型属性 1.4.2 solr字段类型 ...
- 互联网时代的社会语言学:基于SNS的文本数据挖掘
今年上半年,我在人人网实习了一段时间,期间得到了很多宝贵的数据,并做了一些还算有意义的事情,在这里和大家一块儿分享.感谢人人网提供的数据 与工作环境,感谢赵继承博士.詹卫东老师的支持和建议.在这项工作 ...
- C++: byte 和 int 的相互转化
原文链接:http://blog.csdn.net/puttytree/article/details/7825709 NumberUtil.h // // NumberUtil.h // MinaC ...
- 《算法导论》习题解答 Chapter 22.1-7(关联矩阵的性质)
主对角线:出度+入度 其他:arr[i][j]=-n,则i与j之间有n条边. 证明: (原文点此,索引目录.感谢xiazdong君 && Google酱.这里是偶尔做做搬运工的水果君( ...
- JSONP跨域原理和jQuery.getJSON用法
JSONP是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式).本文主要介绍JS ...