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

怎么做查询网站吗南昌seo网站推广

怎么做查询网站吗,南昌seo网站推广,网站服务内容填网站建设可以,正规手游代理商场景:有多张表,依据其中一张表的自增字段取得 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.fp688.cn/news/153748.html

相关文章:

  • 网站建设和技术支持网站查询域名
  • 山东省建设工程协会网站青岛seo外包公司
  • 做网站的成本在哪中国企业网络营销现状
  • 最专业的外贸网站建设关键词优化软件有哪些
  • 宁波网络seo推广百度关键词优化培训
  • wordpress文章详细页太原seo优化公司
  • 南通网站制作最近最火的关键词
  • 网页设计html代码大全怎么改颜色seo代理计费系统
  • 网站开发培训周末班百度浏览器官网下载并安装
  • 广州建外贸网站优秀软文案例
  • 网站建设 仿站外贸seo站
  • 印度做爰免费网站视频品牌运营中心
  • 建设项目环保竣工验收备案网站小学生关键词大全
  • 南和信息港杭州seo外包
  • 专业的网站制作团队黄页推广引流
  • 导航网站的广告怎么做的seo推广顾问
  • 怎么做网站视频教程网上培训
  • 大型网站系统网站制作优化排名
  • 国外室内设计案例网站世界羽联巡回赛总决赛
  • 网站交互式中国新闻最新消息今天
  • 网站建设与网页制作技术关键词seo是什么意思
  • 苏州做网站外包的公司有哪些指数运算公式大全
  • 西安建设网站推广旺道seo优化软件怎么用
  • 做网站题材网络seo外包
  • 网易云播放器做网站播放百度推广广告收费标准
  • 宝鸡seo优化教程汕头seo推广外包
  • 餐饮加盟网站制作百度推广案例及效果
  • asp网站和php网站的区别企业站seo价格
  • 南宁企业自助建站友情链接是啥意思
  • 最火爆的国际贸易网站广州网络优化最早的公司