zoukankan      html  css  js  c++  java
  • 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='0001';

    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 ('01','hello'),('02','haha');

    说明:跟批量插入的格式是一样的, 当values后面的数据插入到mytable中不会引起主键冲突或唯一索引冲突时,那么就会直接新增数据, 否则就会修改数据.简单点说就是,如果记录存在则更新,如果记录不存在则插入; 上例中,如果执行插入操作,受影响行数为2, 如果执行修改操作,受影响行数为4; 所以执行修改操作的本质是先delete,然后再插入.所以如果更新的字段不齐,其它字段将变为默认值  下面是该功能的增强版

    INSERT INTO mytable(id,name,col)VALUES (78,'456','55'),(88,'456','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='001';

    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的新增更新删除就是以上内容,遇到新情况再补充吧

    <签名>很多人看似很努力,但是你连看起来也不努力.
  • 相关阅读:
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    OA办公系统 Springboot Activiti6 工作流 集成代码生成器 vue.js 前后分离 跨域
    java企业官网源码 自适应响应式 freemarker 静态引擎 SSM 框架
    java OA办公系统源码 Springboot Activiti工作流 vue.js 前后分离 集成代码生成器
    springcloud 项目源码 微服务 分布式 Activiti6 工作流 vue.js html 跨域 前后分离
    java 视频播放 弹幕技术 视频弹幕 视频截图 springmvc mybatis SSM
    最后阶段总结
    第二阶段学习总结
    第一阶段学习总结
  • 原文地址:https://www.cnblogs.com/sadkilo/p/4820785.html
Copyright © 2011-2022 走看看