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

    <签名>很多人看似很努力,但是你连看起来也不努力.
  • 相关阅读:
    macOS 遇到 svnadmin无法使用的情况
    语音识别进化简史:从造技术到建系统
    你是什么垃圾?人工智能面对干垃圾和湿垃圾“有点蒙”
    垃圾分类的事,让机器人做去吧!
    怎样才能叫一只奶牛自愿挤奶?
    第一次,脑机接口可以实时读取人类语言了
    机器人工作原理的超详细解析,生动、形象!
    1900页数学基础:面向CS的线性代数、拓扑、微积分和最优化
    微软Azure AI负责人:OpenAI只在微软云上训练模型
    Velodyne收购高清地图公司 将研发更安全的ADAS系统
  • 原文地址:https://www.cnblogs.com/sadkilo/p/4820785.html
Copyright © 2011-2022 走看看