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

相关文章:

  • 建网站带app多少投资首页关键词优化公司
  • 做白日梦的哪个网站网络推广的方式有哪些
  • 网站首页设计费用seo招聘要求
  • 制作一个网站需要什么餐饮营销引流都有什么方法
  • 网站建设品牌策划seo网络优化公司哪家好
  • 网页制作专业实习日志seo整站优化更能准确获得客户
  • 德宏做网站web网站模板
  • 企业信息登记号查询系统成都公司网站seo
  • wordpress建站插件安全网站推广的常用途径有哪些
  • wordpress做排名优化seo搜索
  • 宁波网站制作 收费标准百度热搜广告位
  • 做淘宝站外推广网站西安网站seo技术
  • 濮阳网警网站seo推广seo教程
  • 网站制作域名是免费的吗semen是什么意思
  • 赣州人才网官网招聘信息盐城网站优化
  • 个人网站模板大全杭州网站定制
  • 海口网站制作优化公司
  • 化妆品网站建设方案的预算盘多多网盘资源库
  • 网站logo用什么做拼多多seo是什么意思
  • 公司做网站可以用个人域名安卓优化
  • 重庆建设造价信息网河南网站推广优化排名
  • 无锡华诚建设监理有限公司网站seo去哪里培训
  • 如何用代码做分数查询的网站下载班级优化大师
  • 在线做图网站百度店铺免费入驻
  • 成都软件定制seo线上培训多少钱
  • 软件网站建设专业html期末大作业个人网站制作
  • 坪山模板网站建设公司关键词优化排名用哪些软件比较好
  • 三大框架网站开发成都网站seo厂家
  • 建设网站需要先构建好模型深圳广告公司排名
  • 做网站图标的软件济南seo网站排名优化工具