MySQL插入数据

本文分享了在数据库操作中的优化技巧与高级应用方法,包括单条数据与多条数据的高效插入策略、检索数据的便捷方式,以及注意事项如字符串长度限制等。通过实例解析,帮助开发者提升数据库操作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      最近在做一个项目,一直在折腾数据库,本来这块是我的弱项,项目做完了,小结一下。

 

    1. 插入单条数据,这个就比较简单了:

     INSERT INTO tableName VALUES(`col1`, `col2`,`col3`.... );

    这种比较简单,但是不安全,而且高度依赖表中列的次序,当表结构改变时,程序就很容易出问题。

    INSERT INTO tableName(col1, col2, col3...) VALUES(`col1`, `col2`,`col3`.... );

    这种就不会依赖表中列的次序,而起由tableName后边括号中的列的顺序决定的,即使最后表结构有变动,这条sql也能执行成功

 

    2. 插入多条数据,我在做这个项目的时候是一条一条的插入,大概是5000多条数据吧,用了大约25s左右,非常的慢,然后我改用一次插入多条数据,天啊,真的是见证奇迹的时刻,只用了不到1s就插入成功了,所以在插入大量数据的时候,千万不要忘了这种方法。

    INSERT INTO tableName(col1, col2, col3...) VALUE(`col11`, `col12`,`col13`.... ),(`col21`, `col22`,`col23`.... );

    还有一点,当时我在程序中使用字符串拼接的sql,所以要注意String的最大长度,String做多可以存放65534个字节(java),千万不要超了,否则会报错哦(这可是需要4G的内存才能存下的String,谁会用到啊 囧!~)。字符串的长度可以参考http://www.iteye.com/topic/43102 这篇文章。

 

    3. 插入检索数据,这个我还没有用到,今天在书中看到的,然后就好想拍大腿,这么强的方法我怎么才看到呢!~晚上努力的实践一下。

    INSERT INTO tableName(col1, col2, col3...) SELECT col21, col22, col23...FROM tableName2

    这条语句可以将tableName2中的所有表都导入到tableName中,这样在开发的时候就不用取出表在存入,方便了很多,select语句中是可以包含where字句过滤的。

MySQL插入数据的耗时受多个因素影响。其中一些因素包括数据库服务器性能,硬盘速度,网络传输速度,代码解析效率,以及MySQL的相关配置。 具体来说,以下因素可能导致MySQL插入数据的耗时增加: 1. Mysql插入缓存(bulk_insert_buffer_size):Mysql插入数据时会使用插入缓存,而较小的缓存大小可能导致频繁的刷新操作,从而增加插入数据的耗时。 2. 数据库约束条件验证:每次插入数据时,MySQL都需要验证是否违反表中的约束条件(如主键、唯一约束等),这个验证过程也会增加插入数据的耗时。 3. 索引构建:在InnoDB存储引擎中,数据通常会先写入缓存,然后写入事务日志,最后写入数据文件。这个过程中,索引的构建也会带来一定的时间消耗。 4. 事务提交模式:默认情况下,MySQL的事务自动提交模式是开启的,这意味着每次执行插入语句都会立即提交事务,这会导致频繁的事务提交,从而降低插入数据的速度。可以通过手动开启事务,并在所有插入任务完成后再提交事务来提高插入数据的效率。 5. innodb_flush_log_at_trx_commit设置:如果将innodb_flush_log_at_trx_commit设置为2,MySQL会在每次事务提交时将日志缓冲区的数据写入日志文件。然而,刷新操作(即将数据刷到磁盘)并不会立即进行,而是每秒执行一次。这种设置可能会影响插入数据的耗时。 除了以上因素,还有其他一些因素可能会对MySQL插入数据的耗时产生影响,例如服务器性能、CPU性能、硬盘速度和网络传输速度等。 综上所述,MySQL插入数据的耗时受多个因素影响,包括Mysql插入缓存、约束条件验证、索引构建、事务提交模式和innodb_flush_log_at_trx_commit设置等。优化这些因素可以提高插入数据的速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值