精华内容
下载资源
问答
  • mysql 插入/更新数据

    2021-01-18 23:15:52
    mysql 插入/更新数据INSERT 语句1、一次性列出全部字段的值,例如:INSERT INTO student VALUES('Chenqi','M', 29);INSERT INTO student VALUES('Bush','M', 60),('Obama', 'M', 45);允许同时插入多个数据行;2、只...

    mysql 插入/更新数据

    INSERT 语句

    1、一次性列出全部字段的值,例如:

    INSERT INTO student VALUES('Chenqi','M', 29);

    INSERT INTO student VALUES('Bush','M', 60),('Obama', 'M', 45);

    允许同时插入多个数据行;

    2、只对部分字段赋值

    INSERT INTO student(name, sex) VALUES ('Abby', 'F'),('Joseph', 'M');

    没有在INSERT语句中出现的字段将被赋予默认值。允许同时插入多个数据行;

    3、使用SET子句

    INSERT INTO student SET name='Stein', sex='M';

    没有在SET子句里出现的字段被赋予默认值。这种形式的ISNERT语句不允许一次插入多个数据行。

    REPLACE 语句

    REPLACE语句和INSERT语句用法非常相似,唯一的区别就是,在一个UNIQUE索引或PRIMARY KEY中出现重复值的时候,REPLACE会先删除旧行后再插入新行,INSERT语句则报错。

    如果数据表没有使用PRIMARY KEY或UNIQUE索引,则REPLACE与INSERT语句完全一样。

    INSERT ... ON DUPLICATE KEY UPDATE Syntax

    如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。

    例如,如果列 a 为拥有UNIQUE索引,并且包含值1,

    CREATE TABLE t (id INT AUTO_INCREMENT,a INT, b INT, c INT, PRIMARY KEY(id), UNIQUE KEY(a));

    INSERT INTO t (a,b,c) VALUES (1,9,11);

    则以下两个语句具有相同的效果:

    INSERT INTO t (a, c) VALUES (1, 3) ON DUPLICATE KEY UPDATE c=c+1;

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

    如果行作为新记录被插入,则受影响行(affected-rows)的值显示1;如果原有的记录被更新,则受影响行的值显示2。

    f4f4d99bcfca0e57ccd1945e7beb1003.png

    也可以INSERT多行记录:

    INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=c+1;

    执行后,c 的值会变为 13 (c 在原值上+1).

    eabf16a4560dc236faa8d0b568652971.png

    使用VALUES函数:

    INSERT INTO t(a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=VALUES(c)+1;

    执行后,c 的值会变为 8 (c 在插入值上+1).

    9b88ba573835cda562719c468c26ba9c.png

    LOAD DATA LOCAL INFILE file_name INTO TABLE table_name

    默认情况下,LOAD DATA语句假设各字段的值以'\t'分隔,数据行以'\n'分隔,数据值的排列顺序与字段在数据表里的先后顺序一致。

    LOCAL关键字可以使客户程序读取数据文件并发送到服务器以加载,如果省略LOCAL关键字,就表示数据文件是保存在服务器主机上的,而你必须拥有相应的FILE服务器访问权限才能把文件里的数据加载到数据表里去。

    加载数据文件的另一种方法是使用mysqlimport工具,例如:

    mysqlimport -r -L -u username -p passwd -h hostname -P port db_name file_name

    该命令将生成一条把file_name文件里的数据值加载到db_name的指定数据表里去的LOAD DATA语句。

    注意:mysqlimport 程序是根据数据文件的名字来确定与之对应的数据表的,例如:

    mysqlimport -L sampdb member.txt

    就是将member.txt数据文件加载到sampdb.member数据表的。

    mysqlimport 的选项:

    -r:--replace,对于unique key上的重复记录,使用新行取代旧记录;

    -i:--ignore,对于unique key上的重复记录,忽略不处理;

    -L:--local,从客户端本地主句读取输入文件;

    -c,--columns,指定输入数据文件中的字段列表(有序);

    -D,--delete,在导入新数据文件之前,清空数据表;

    有效加载数据

    MySQL对于大规模数据加载(mass insertion)的场景,通常考虑以下几个方面:

    1、批量加载的效率比逐行加载的效率高,因此要尽量使用INSERT INTO语句一次插入多个数据行的功能;

    2、使用LOAD DATA语句要比使用INSERT语句效率高,服务器只需要对一个语句进行语法分析和解释,并且索引只在所有数据行都处理完成后才需要刷新;

    3、使用LOAD DATA语句要比使用LOAD DATA LOCAL语句效率高,因为前者服务器可以直接从磁盘上读取文件,后者则需要通过网络将数据文件送到服务器上。

    如果只能使用多个INSERT语句,要尽可能地对它们分组以减少索引的刷新次数,可以通过事务而不用自动提交的方式来实现这一点:

    START TRANSACTION

    INSERT INTOtbl_name ... ;INSERT INTOtbl_name ... ;INSERT INTOtbl_name ... ;COMMIT;

    对于非事务性的存储引擎,可以通过对数据表加写锁定的方式来实现:

    LOCK TABLES tbl_name WRITE;INSERT INTOtbl_name ... ;INSERT INTOtbl_name ... ;INSERT INTOtbl_name ... ;

    UNLOCK TABLES;

    对于MyISAM数据表,减少索引刷新次数的另一个策略是使用DELAY_KEY_WRITE数据表选项。

    参考文档:

    展开全文
  • MySQL触发器在插入/更新事件所以我有两个这样的桌子ext_words ------------- | id | word | ------------- | 1 | this | ------------- | 2 | that | ------------- | 3 | this | ------------- ext_words_count ---...

    MySQL触发器在插入/更新事件

    所以我有两个这样的桌子

    ext_words ------------- | id | word | ------------- | 1 | this | ------------- | 2 | that | ------------- | 3 | this | ------------- ext_words_count --------------------- | id | word | count | --------------------- | 1 | this | 2 | --------------------- | 2 | that | 1 | ---------------------

    我试图创build一个触发器,将:

    更新ext_words_count.count时更新ext_words_count.count 。

    事情进一步复杂化,

    如果ext_words.word在ext_words.word中不存在,当ext_words更新时,我想将其插入到ext_words_count ,并将count设置为1。

    我一直在看类似的问题:

    1. 使用自动增量栏插入触发之前/之后 ,以及

    2. 使用触发器更新另一个数据库中的表

    试图结合2.这是我迄今为止:

    DELIMITER $$ CREATE TRIGGER update_count AFTER UPDATE ON ext_words FOR EACH ROW BEGIN UPDATE ext_words_count SET word_count = word_count + 1 WHERE word = NEW.word; END; $$ DELIMITER ;

    任何意见和方向,不胜感激。 或者可能的其他方法,我已经忽略了,并一如既往的感谢!

    更新:

    我select使用2个触发器,一个用于INSERT,另一个用于UPDATE,因为我不熟悉MySQL中的条件语句。

    DELIMITER $$ CREATE TRIGGER insert_word AFTER INSERT ON ext_words FOR EACH ROW BEGIN INSERT IGNORE INTO ext_words_count (word) VALUES (NEW.word); END; $$ DELIMITER ;

    DELIMITER $$ CREATE TRIGGER update_word AFTER UPDATE ON ext_words FOR EACH ROW BEGIN UPDATE ext_words_count SET word_count = word_count + 1 WHERE word = NEW.word; END; $$ DELIMITER ;

    INSERT查询工作得很好,但UPDATE查询不更新word_count 。 有没有什么我错过了更新查询..?

    有了Grijesh的完美帮助和他使用条件语句的build议,我能够得到一个触发器来完成这两项任务。 再次感谢Grijesh

    DELIMITER $$ CREATE TRIGGER update_count AFTER INSERT ON ext_words FOR EACH ROW BEGIN IF NOT EXISTS (SELECT 1 FROM ext_words_count WHERE word = NEW.word) THEN INSERT INTO ext_words_count (word) VALUES (NEW.word); ELSE UPDATE ext_words_count SET word_count = word_count + 1 WHERE word = NEW.word; END IF; END $$ DELIMITER;

    避免使用像count这样的关键字被sql方法使用一段时间它的创build错误,但一些运行良好

    DELIMITER $$ CREATE TRIGGER update_count AFTER UPDATE ON ext_words FOR EACH ROW BEGIN SELECT count INTO @x FROM ext_words_count LIMIT 1; UPDATE ext_words_count SET count = @x + 1 WHERE word = NEW.word; END; $$ DELIMITER ;

    展开全文
  • 基本上,它执行约7,000次插入和/或更新,但需要花费很长的时间(例如将近9分钟…平均每个查询约0.08秒)。从本质上讲,我正在寻求提高速度来处理多个此类请求(我不希望对我模糊的示例提出具体的答案……只是希望,可以...

    我有一个应用程序,需要通过大量条目更新大量数据。基本上,它执行约7,000次插入和/或更新,但需要花费很长的时间(例如将近9分钟…平均每个查询约0.08秒)。从本质上讲,我正在寻求提高速度来处理多个此类请求(我不希望对我模糊的示例提出具体的答案……只是希望,可以帮助解释)。

    以下是对请求进行概要分析的一些示例:

    SELECT `habitable_planets`.* FROM `habitable_planets` WHERE (timestamp = '2010-10-15T07:30:00-07:00') AND (planet_id = '2010_Gl_581_c')

    INSERT INTO `habitable_planets` (`planet_id`, `timestamp`, `weather_air_temp`, `weather_cell_temp`, `weather_irradiance`, `weather_wind_float`, `biolumin_to_date`, `biolumin_detected`, `craft_energy_usage`, `craft_energy_consumed_to_date`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

    SELECT `habitable_planets`.* FROM `habitable_planets` WHERE (timestamp = '2010-10-15T07:45:00-07:00') AND (planet_id = '2010_Gl_581_c')

    INSERT INTO `habitable_planets` (`planet_id`, `timestamp`, `weather_air_temp`, `weather_cell_temp`, `weather_irradiance`, `weather_wind_float`, `biolumin_to_date`, `biolumin_detected`, `craft_energy_usage`, `craft_energy_consumed_to_date`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

    重复一遍恶作剧(大约7,000次)。这是一个更新,它收集在24小时内定期生成的数据,然后每天对数据库进行一次大规模更新。鉴于我所展示的有限,您对加快此过程有什么建议吗?

    例如…是否有意义,而不是对每个时间戳进行选择,而是一次对一个范围进行选择,然后在脚本中对其进行迭代?

    模糊地喜欢:

    SELECT `habitable_planets`.* FROM `habitable_planets` WHERE (planet_id = '2010_Gl_581_c')

    将该结果分配给$foo然后执行:

    foreach ($foo as $bar)

    {

    if ($bar['timestamp'] == $baz) // where $baz is the needed timestamp

    {

    // do the insert here

    }

    }

    编辑: 对此添加一点,在我的情况下,提高了响应能力的一件事是更改了一堆代码,以检查是否存在现有记录,并根据结果使用INSERT... ON

    DUPLICATE KEY UPDATESQL查询进行插入或更新。在我的特殊情况下,这导致大约30%的速度提高,因为它使方程式中至少减少了一次数据库访问,并且确实增加了数千个请求。

    展开全文
  • #UPDATE s010UPDATE s010 SET qty=qty+(SELECT SUM(qty) from s040,s041 WHERE s040.inputid=s041.inputid AND s040.inputid=pro_inputidAND s010.rootstockid=s040.root_stockid AND s010.pno=s041.pno AND s010....

    #UPDATE s010

    UPDATE s010 SET qty=qty+(SELECT SUM(qty) from s040,s041 WHERE s040.inputid=s041.inputid AND s040.inputid=pro_inputid

    AND s010.rootstockid=s040.root_stockid AND s010.pno=s041.pno AND s010.cno=s041.cno AND s010.sno=s041.sno

    GROUP BY s040.root_stockid,s041.pno,s041.cno,s041.sno

    ), create_date=NOW();

    #add s010

    INSERT INTO s010 (rootstockid,pno,cno,sno,qty,create_date)

    SELECT s4.root_stockid,s41.pno,s41.cno,s41.sno,SUM(s41.qty),NOW() from s040 s4,s041 s41

    WHERE s4.inputid=s41.inputid AND s4.inputid=pro_inputid  AND  NOT EXISTS(SELECT * from s010 s1

    WHERE s1.rootstockid=s4.root_stockid AND s1.pno=s41.pno AND s1.cno=s41.cno AND s1.sno=s41.sno)

    GROUP BY s4.root_stockid,s41.pno,s41.cno,s41.sno;

    展开全文
  • 本节内容:mysql数据库中批量插入与批量更新数据。在数据库插入更新大量数据时,批量处理比挨条处理要快许多。以下介绍insert 和 update 批量处理数据的方法。insert 的语法为insert into table (id,value) values...
  • 另一个表是以下字段: SID CID Per 如何为以下内容编写触发器: 如果在att表上的h1-h0的任何字段中发生更新 使用以下值更新每个表中的每列: ((1的总数 – 0的总数)/(1的总数不是0的总数))/ 100 提前致谢 我开发了...
  • 今天创建数据库时,在插入数据时出现了几个问题。(首次在LInux环境下创建数据库)一个是关于SQL Error [1146] [42S02]: Table 'struts2exec.s_user' doesn't exist网上搜查到的帖子如下:项目在开发的时候在WINDOWS...
  • 经常会遇到一行数据在特定条件下如果存在就更新列,不存在就插入新的行,用replace和duplicate语法都可以实现,但是也是有区别的。如果是数据覆盖就用replace,如果只是想实现update就用duplicate。如下表:CREATE ...
  • Mysql SQL语句执行更新或者插入添加条件判断 – 更新操作 – INSERT INTO materials (ID,Name,Remaining,Total) VALUES (1,‘SolidWaste’,0,1400) on DUPLICATE KEY UPDATE Total=1400,Remaining=0; – 不存在 id=6...
  • 然而在使用中想要创建时间在创建的时候自动设置为当前时间,更新时间在更新时自动更新为当前时间。创建表 stuCREATE TABLE `stu` ('id' int NOT NULL AUTO_INCREMENT,'createTime' timestamp DEFAULT CURRENT_...
  • 插入数据:INSERT语句插入数据要求指定表名称和插入到新记录中的值。基本语法为:INSERT INTO table_name (column_list) VALUES (value_list); table_name指定要插入数据的表名,column_list指定要插入数据的那些列...
  • mysql8.0 的安装就不说了,上网搜索一大堆的教程,再写到博文里面就有点多余了哦咱们来说说 5.6 升级到 8.0 之后插入数据慢的问题写一个存储过程循环往表里面插入 3000 条数据先来看 5.6 的表现:1.4s 还是可以接受...
  • 数据迁移、数据恢复往往都需要做大数据量的插入操作,但是,不同的插入方法对性能的影响也是非常大的 插入数据分析 一次插入多行的值 插入行所需的时间由以下因素决定(参考 MySQL 5.7 参考手册: 8.2.4.1 优化 ...
  • 一般情况下我们会写两条sql去操作select 查询当前插入的数据是否已经存在如果不存在就插入新的记录,如果存在就提示用户该记录已经存在在mysql里面可以这么操作,如果记录存在就跳过或者更新,不存在就插入!...
  • 最近 MySQL 数据库经常报错 Duplicate key 的错误,虽然我已经在 Insert 之前使用 query 进行了判断,如果已有则更新,但是还是经常会报这个错误,经过一段查询资料,发现 MySQL 已经提供了两种解决方法:ON ...
  • 插入数据一、前提,新建表:create table student( sid varchar(50),snamevarchar(50),sagevarchar(50),ssexvarchar(50));select * from student;二、多种方式插入数据:insert into student( sid,sname,sage,ssex )...
  • MySQL插入或替换

    2021-01-19 21:34:25
    我想创建一个系统来跟踪...MySQL插入或替换播放器的所有属性都以json格式存储,然后由PHP或JS进行解析。一旦玩家加入一个组,就会设置比较= 0的条目。比较= 1的条目应该在玩家第一次点击时创建更新统计信息并且从...
  • 无效原因 在 这里 中文原因, 在 官网 上也找到英文原因了,简单的说就是 python 操作mysql 是用 事物的方式来实现的,所以在update 或 insert 的时候 必须有commit 提交的过程,否则数据表不会生效; This method ...
  • MySQL-插入更新同一表的触发器我想做的是:当有一个新的INSERT放到桌子上ACCOUNTS,我需要更新行ACCOUNTS哪里pk=NEW.edit_on通过设置status='E'表示特定(旧)帐户已被编辑。DELIMITER$$DROPTRIGGERIFEXISTS`...
  • MySQL插入数据

    千次阅读 2021-02-06 23:52:45
    MySQL 插入数据MySQL 表中使用 INSERT INTO SQL语句来插入数据。你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据。语法以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法...
  • 唯一插入 首先我们先创建一个用户表: DROP TABLE IF EXISTS `nb_sys_user`; CREATE TABLE `nb_sys_user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '...
  • 遇到批量更新(先查询,再插入更新)时,有以下可选方案:第一种方案: 批量查询,再批量插入/批量更新先逐个查询,需要插入的放到一个insertList中进行批量插入,需要更新的放到另一个updateList中进行批量更新。...
  • mybatis+mysql批量插入和批量更新一、批量插入批量插入数据使用的sql语句是:insert into table (字段一,字段二,字段三) values(xx,xx,xx),(oo,oo,oo)mybatis中mapper.xml的代码如下:useGeneratedKeys="true">...
  • MySQL插入json问题

    2021-02-02 01:33:41
    MySQL5.7.8之后开始支持一种可高效获取JSON文本中数据的原生JSON类型,该类型具有以下优点:存储时自动验证,验证不通过将报错更好的存储结构。采用一种针对告诉读取JSON文本元素的内部结构进行存储。新的服务器是...
  • MySQL插入重复数据

    2021-01-18 22:49:48
    MySQL中批量insert into时防止更新插入重复数据去重的方法,主要是讲到了ignore,Replace,ON DUPLICATE KEY UPDATE三种方法方案一:使用ignore关键字如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免...
  • 我正在尝试向数据库中插入更新数据。即使我很确定插入成功,它也会返回false。根据“执行” API,返回值是“如果第一个结果是ResultSet对象,则为true;如果是更新计数或没有结果,则为false”。如何确定插入或...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 583,591
精华内容 233,436
关键字:

mysql插入更新

mysql 订阅