当前位置: 首页 > news >正文

淄博做企业网站哪家好微信小程序怎么开通

淄博做企业网站哪家好,微信小程序怎么开通,公司设计网站详情,东台做网站的公司场景:有多张表,依据其中一张表的自增字段取得 id 值作为对象ID,然后使用这个Id插入到其他它表中。 如下一张 MySQL 的 innodb 表 X,用 go 编写程序,不指定 a 的值,指定 b 和 c 的值,往表 X 插入…

场景:有多张表,依据其中一张表的自增字段取得 id 值作为对象ID,然后使用这个Id插入到其他它表中。

如下一张 MySQL 的 innodb 表 X,用 go 编写程序,不指定 a 的值,指定 b 和 c 的值,往表 X 插入数据,如果数据已经存在则执行更新操作,成功后取得该笔插入或者更新的记录对应的 a 字段的值。

create table X (a int unsigned AUTO_INCREMENT, b int, c int,PRIMARY KEY (a), UNIQUE KEY(b) 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

非事务版本:

package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql"
)func main() {db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/dbname")if err != nil {panic(err)}defer db.Close()// 插入或更新记录query := `INSERT INTO X (b, c) VALUES (?, ?)ON DUPLICATE KEY UPDATE c = VALUES(c), a = LAST_INSERT_ID(a)`result, err := db.Exec(query, "value1", "value2")if err != nil {panic(err)}// 获取自增IDlastInsertID, err := result.LastInsertId()if err != nil {panic(err)}fmt.Printf("LastInsertID: %d\n", lastInsertID)
}

非事务版本不能保持 a 值的连续性。

事务版本:

package mainimport ("database/sql""fmt""sync"_ "github.com/go-sql-driver/mysql"
)func upsertRecord(db *sql.DB, b, c int) (int, error) {// 开始事务tx, err := db.Begin()if err != nil {return 0, err}defer tx.Rollback()// 尝试查找记录var id interr = tx.QueryRow("SELECT a FROM X WHERE b = ?", b).Scan(&id)if err != nil {if err == sql.ErrNoRows {// 记录不存在,插入新的记录result, err := tx.Exec("INSERT INTO X (b, c) VALUES (?, ?)", b, c)if err != nil {return 0, err}lastInsertID, err := result.LastInsertId()if err != nil {return 0, err}id = int(lastInsertID)} else {// 其他错误return 0, err}} else {// 记录存在,更新记录_, err = tx.Exec("UPDATE X SET c = ? WHERE a = ?", c, id)if err != nil {return 0, err}}// 提交事务err = tx.Commit()if err != nil {return 0, err}return id, nil
}func main() {db, err := sql.Open("mysql", "dswrite:ds#582701@tcp(9.134.177.242:3306)/dsdb")if err != nil {panic(err)}defer db.Close()var wg sync.WaitGroupfor i := 0; i < 10; i++ {wg.Add(1)go func(i int) {defer wg.Done()id, err := upsertRecord(db, 20+i, 100+i)if err != nil {fmt.Printf("Error: %v\n", err)} else {fmt.Printf("ID: %d\n", id)}}(i)}wg.Wait()
}

该版本可以保持 a 值的连续性。实际可以再优化,去掉 select,先 insert 或者 update 即可。

http://www.yidumall.com/news/63570.html

相关文章:

  • 做彩网站有哪些今日头条关键词排名优化
  • 免费自助建站代理seo内容优化心得
  • 视频网站开发报告网络游戏推广平台
  • 医疗ppt模板下载免费完整版seo模拟点击软件源码
  • 网站开发jsp 很少优化建站
  • 做公司网站源代码怎么写企业网站建设方案范文
  • 商丘网站建设费用什么样的人适合做策划
  • 1 高端品牌网站定制推广网站的文案
  • 网站做优化的好处网络营销团队
  • 无锡做网站seo互联网广告
  • 青岛公路建设集团网站seo在线优化平台
  • 网站备案必须是企业吗安卓优化大师官网
  • 网站建立数据库连接时出错seo渠道是什么意思
  • 临沂高端网站建设搜索引擎营销的实现方法有哪些
  • 外贸视频网站开发正规网站建设公司
  • 做纺织外贸哪个贸易网站好企业网页设计公司
  • 学校网站建设必要性seo文章推广
  • 成都做一个小企业网站需要多少钱成都网站seo外包
  • 多大的服务器可以做视频网站怎么注册一个自己的网址
  • 郴州前达网络科技智能网站排名优化
  • 如何加强企业网站建设 论文市场调研报告
  • 慈溪网站建设哪家好1小时快速搭建网站
  • 交易平台网站怎么做公关团队
  • 兰州自媒体公司有哪些郑州seo网站管理
  • 网站代码在哪里写企业营销推广怎么做
  • 做图片网站用什么程序百度店铺
  • 河南建设工程信息网一体化平台查询宁波seo推广咨询
  • 做生蚝的网站东莞网站建设seo
  • 2019为赌博网站做代理被判缓刑seo如何优化一个网站
  • 网站服务器 虚拟主机微信推广软件