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的区分。有则更新指定列,无则添加。

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

  • 相关阅读:
    Luogu 1080 【NOIP2012】国王游戏 (贪心,高精度)
    Luogu 1314 【NOIP2011】聪明的质检员 (二分)
    Luogu 1315 【NOIP2011】观光公交 (贪心)
    Luogu 1312 【NOIP2011】玛雅游戏 (搜索)
    Luogu 1525 【NOIP2010】关押罪犯 (贪心,并查集)
    Luogu 1514 引水入城 (搜索,动态规划)
    UVA 1394 And Then There Was One / Gym 101415A And Then There Was One / UVAlive 3882 And Then There Was One / POJ 3517 And Then There Was One / Aizu 1275 And Then There Was One (动态规划,思维题)
    Luogu 1437 [HNOI2004]敲砖块 (动态规划)
    Luogu 1941 【NOIP2014】飞扬的小鸟 (动态规划)
    HDU 1176 免费馅饼 (动态规划)
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3060045.html
Copyright © 2011-2022 走看看