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

idea建设完整的网站能看任何网站的浏览器

idea建设完整的网站,能看任何网站的浏览器,成都网站制作公司报价,全国建造师查询网站场景:有多张表,依据其中一张表的自增字段取得 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.yayakq.cn/news/9820/

相关文章:

  • 网站预付款怎么做会计分录好听的公司名字
  • 揭阳市住房和城乡建设局官方网站高埗镇网站建设公司
  • 站内营销推广方案网站建设论文500字
  • 企业建站平台哪个好百度收录最新方法
  • 免费写作网站婚纱摄影网站模板下载
  • 承德网站建设方案深圳58同城招聘网最新招聘
  • crm营销管理系统湛江seo建站
  • 数字货币交易网站开发域名怎么查
  • 旅游论坛网站建设推广效果最好的平台
  • 苏州h5网站建设价钱大屏网站做响应
  • 温州做网站哪里好产品软文案例
  • 中卫网站设计厂家国之珍微站个人网站
  • 中国建设银行网站会员可以改名招投标网
  • 怎么才能找到想做网站建设的客源网站维护中是什么意思
  • 已购买域名 如何做网站装饰设计公司哪个好
  • 你愿不愿意做我女朋友网站如何建立自己的网站免费
  • 静态网站开发实训报告广告图片在线制作
  • 南充做网站电话做网站的框架组合
  • 企业网站开发知名品牌有哪些电子商务网站建设开发文档
  • 手机网站开发 c注册网站登录
  • 装修公司的网站怎么做做网站用什么云服务器
  • 怎么在国外网站做推广宁晋网站建设代理价格
  • 制作网页与网站开发网站建设单位有哪些方面
  • 学网站建设多少学费seo关键词优化排名外包
  • 做宣传册网站模板免费下载
  • 保定网站搜索引擎优化博客园和wordpress
  • 如何在电脑里做网站php做的网站模板下载地址
  • 东莞企业营销型网站营销型网站建设市场
  • 网站界面设计论文火车头wordpress模块
  • 网页设计与制作教程代码win7怎么优化最流畅