首先说明一下,本人之前一直都是用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的新增更新删除就是以上内容,遇到新情况再补充吧

最新文章

  1. Theano Inplace
  2. C# 对MongoDB 进行增删改查的简单操作 (转)
  3. 硬盘缓存的最佳方案,DiskLruCache完全解析
  4. 启动tomcat不出现命令窗口
  5. Datatable转成Json方式两则
  6. CentOS 7下安装xampp和testlink
  7. NUll在oracle与sqlserver中使用相同与区别
  8. CSS3 旋转 太阳系
  9. 一道看似简单的sql需求(转)
  10. 从零开始学习PYTHON3讲义(二)把Python当做计算器
  11. new 和 newInstance 的区别
  12. 使用Nodejs在Windows上调用CMD命令
  13. 三、后门的编写和 ShellCode 的提取
  14. nginx优化参考
  15. ES系列六、ES字段类型及ES内置analyzer分析
  16. Python学习记录之(五)-----类进阶篇
  17. delphi EncdDecd.pas单元中Encoding方法出现#$D#$A的解决方法
  18. [z]protobuf实现c++与java之间的数据传递,beancopy数据到前台
  19. git将本地项目发布到远端
  20. JQuery之ContextMenu(右键菜单)

热门文章

  1. php或js判断网站访问者来自手机或者pc机
  2. [Oracle] - 性能优化工具(2) - ASH
  3. Oracle中删除重复的经典方案
  4. Ubuntu Nginx搭建Gitweb服务器
  5. javascript 拷贝
  6. innodb_io_capacity >=innodb_lru_scan_depth*inoodb_buffer_pool_instances。与 checkpoint
  7. 进程间通信和同步:pipe、FIFO、消息队列、信号量、共享内存、信号
  8. Linux服务器集群系统(四)--转
  9. View Controller 视图管理总结
  10. Quoit Design