当前位置: 首页 > 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.ds6.com.cn/news/5859.html

相关文章:

  • 网站动态搜索框代码网站建站推广
  • 查网址是否安全网站seo诊断报告怎么写
  • 泊头做网站商丘网站优化公司
  • 西安网站建设网站建设企业网络营销推广方法
  • 济南建设网站制作网站关键词在线优化
  • 贵阳网站定制开发海外seo是什么
  • 网站备案取消线上推广渠道主要有哪些
  • 专门做活动的网站如何把网站推广
  • 东莞网站网络优化网络搜索引擎
  • 做网站怎么推广收益大什么是关键词举例说明
  • 羽毛球赛事2022赛程重庆店铺整站优化
  • 机房建设重庆seo推广外包
  • 网站建设需求问卷广州网站优化方案
  • 淘宝网首页官网电脑版优化课程体系
  • 网站建设一条龙包括哪些服务郑州网站建设最便宜
  • h5平台网站开发网站seo推广招聘
  • 定制网站型网站开发站长工具 站长之家
  • 免费咨询医生在线解答seo案例
  • 做外贸怎样打开国外网站黄冈网站推广软件有哪些
  • 免费的网站cms北京网站优化服务商
  • dede网站备份2024年的新闻
  • 南宁手机网站建设鞍山网络推广
  • 免费网站建设开发拼多多代运营收费标准
  • 家用宽带做网站服务器地推是什么
  • 做购物网站流程一套完整的运营方案
  • 网站备案依据如何做网站推广
  • wordpress导航主图福州网站seo公司
  • 设计品牌企业logoseo搜索引擎优化软件
  • 苏州新区做网站如何进行网站的宣传和推广
  • 网站推广类型漳州seo网站快速排名