zoukankan      html  css  js  c++  java
  • 行语句mysql insert操作详解

    本文纯属个人见解,是对前面学习的结总,如有描述不准确的地方还请高手指正~

        

    mysql insert作操详解

        

    INSERT法语:

        

    INSERT [LOW_PRIORITY |DELAYED| HIGH_PRIORITY] [IGNORE]

        

    [INTO]tbl_name[(col_name,...)]

        

    VALUES ({expr| DEFAULT},...),(...),...

        

    [ON DUPLICATE KEY UPDATEcol_name=expr, ... ]

        

    或:

        

    INSERT [LOW_PRIORITY |DELAYED| HIGH_PRIORITY] [IGNORE]

        

    [INTO]tbl_name

        

    SETcol_name={expr| DEFAULT}, ...

        

    [ON DUPLICATE KEY UPDATEcol_name=expr, ... ]

        

    或:

        

    INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]

        

    [INTO]tbl_name[(col_name,...)]

        

    SELECT ...

        

    [ON DUPLICATE KEY UPDATEcol_name=expr, ... ]

        

    一、DELAYED的应用

        

    应用延迟插入作操

        

    DELAYED调节符应于用INSERT和REPLACE语句。当DELAYED插入作操达到的时候,服务器把据数行放入一个队列中,并当即给客户端返回一个态状信息,这样客户端以可就在据数表被真正地插入录记之前续继停止作操了。如果读取者从该据数表中读取据数,队列中的据数就会被保持着,直到没有读取者为止。接着服务器开始插入延迟据数行(delayed-row)队列中的据数行。在插入作操的同时,服务器还要检查是不是有新的读取请求达到和待等。如果有,延迟据数行队列就被挂起,答应读取者续继作操。当没有读取者的时候,服务器再次开始插入延迟的据数行。这个程过直一停止,直到队列空了为止。

        

    几点要注意事项:

        

    · INSERT DELAYED该应仅于用指定值清单的INSERT语句。服务器疏忽于用INSERT DELAYED...SELECT语句的DELAYED。

        

    · 服务器疏忽于用INSERT DELAYED...ON DUPLICATE UPDATE语句的DELAYED。

        

    · 因为行在被插入前,语句立刻返回,所以您不能应用LAST_INSERT_ID()来获得AUTO_INCREMENT值。AUTO_INCREMENT值可能由语句生成。

        

    · 对于SELECT语句,DELAYED行可不见,直到这些行确切被插入了为止。

        

    · DELAYED在属从制复服务器中被疏忽了,因为DELAYED不会在属从服务器中发生与主服务器不一样的据数。

        

    注意,前目在队列中的各行只保存在存储器中,直到它们被插入到表中为止。这意味着,如果您强行止中了MySQLd(例如,应用kill -9)或者如果mysqld不测停止,则全部没有被写入磁盘的行会都丧失。

        每日一道理
    自己把自己说服了,是一种理智的胜利;自己被自己感动了,是一种心灵的升华;自己把自己征服了,是一种人生的成功。

        

    二、IGNORE的应用

        

    IGNORE是MySQL于对相标准SQL的扩展。如果在新表中有复重关键字,或者当STRICT式模启动后涌现告警,则应用IGNORE制控ALTER TABLE的行运。如果没有指定IGNORE,当复重关键字错误发生时,制复作操被弃放,返回前一骤步。如果指定了IGNORE,则对于有复重关键字的行,只应用第一行,其它有冲突的行被除删。并且,对错误值停止修正,使之尽量亲近准确值。

        

     

        

    insert ignore into tb(...) value(...)

        

    这样不必校验是不是存在了,有则疏忽,无则添加。

        

    三、ON DUPLICATE KEY UPDATE的应用

        

    如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会致导在一个UNIQUE索引或PRIMARY KEY中涌现复重值,则执行旧行UPDATE。例如,如果列a被义定为UNIQUE,并且含包值1,则以下两个语句拥有雷同的果效:mysql>INSERT INTO table (a,b,c) VALUES (1,2,3)

        

    ->ON DUPLICATE KEY UPDATE c=c+1;

        

    mysql>UPDATE table SET c=c+1 WHERE a=1;

        

    如果行作为新录记被插入,则受影响行的值为1;如果原有的录记被更新,则受影响行的值为2。

        

    释注:如果列b也是一唯列,则INSERT与此UPDATE语句当相:

        

    mysql>UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;

        

    如果a=1 OR b=2与多个行向匹配,则只有一个行被更新。平日,您该应尽量免避对带有多个一唯关键字的表应用ON DUPLICATE KEY句子。

        

    您可以在UPDATE句子中应用VALUES(col_name)数函从INSERT...UPDATE语句的INSERT分部引用列值。换句话说,如果没有发生复重关键字冲突,则UPDATE句子中的VALUES(col_name)可以引用被插入的col_name的值。本数函别特适于用多行插入。VALUES()数函只在INSERT...UPDATE语句中有意思,其它时候会返回NULL。

        

    示例:

        

    mysql>INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)

        

    ->ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

        

    本语句与以下两个语句作用雷同:

        

    mysql>INSERT INTO table (a,b,c) VALUES (1,2,3)

        

    ->ON DUPLICATE KEY UPDATE c=3;

        

    mysql>INSERT INTO table (a,b,c) VALUES (4,5,6)

        

    ->ON DUPLICATE KEY UPDATE c=9;

        

    当您应用ON DUPLICATE KEY UPDATE时,DELAYED选项被疏忽。

        

    结总:DELAYED 做为倏地插入,是不并很关怀失效性,进步插入性能。

        

    ignore 只存眷主键对应录记是不存在,无则添加,有则疏忽。

        

    ON DUPLICATE KEY UPDATE 在添加时作操,存眷非主键列,注意与ignore的区分。有则更新指定列,无则添加。

    文章结束给大家分享下程序员的一些笑话语录: 有一天,一个男人穿越森林的时候,听到一个细微的声音叫住他。他低头一看,是一只青蛙。
    “如果你亲我一下,我会变成一个美丽的公主哦。”男人一言不发,把青蛙捡起来,放入口袋。
    “如果你亲我一下,我会变成一个美丽的公主哦。而且,我会告诉我遇到的每一个人,你是多么聪明和勇敢,你是我的英雄。”男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
    “如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一星期。”男人又把青蛙拿出来,对着它微微一笑,把它放回口袋。
    “如果你亲我一下,我会变成一个美丽的公主,然后我愿意成为你的爱人一年,而且你可以对我做任何事。”再一次,男人把青蛙拿出来,对着它微微一笑,又把它放回口袋。
      最后,青蛙无力地问:“我开出了这么好的条件,为什么你还不肯吻我?”男人说:“我是一个程序员,我可没时间和什么公主鬼混。不过,拥有一个会说话的青蛙,倒是蛮酷的。”

  • 相关阅读:
    StarRTC , AndroidThings , 树莓派小车,公网环境,视频遥控(二)小车端
    StarRTC , AndroidThings , 树莓派小车,公网环境,视频遥控(一)准备工作
    公司名称后缀 Inc. Co.,Ltd.
    Linux C定时器使用指南
    配置QQ企业邮箱小结
    常用PHP文件操作函数
    Git基本命令 -- 基本工作流程 + 文件相关操作
    Git基本命令 -- 创建Git项目
    Entity Framework Core 2.0 入门
    用VSCode开发一个asp.net core2.0+angular5项目(5): Angular5+asp.net core 2.0 web api文件上传
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3060045.html
Copyright © 2011-2022 走看看