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

自己如何做简单网站网站管理cms

自己如何做简单网站,网站管理cms,工业企业展厅设计公司,拖拽建站模板Gorm事务有error却不返回会发生什么 Gorm包是大家比较高频使用。正常的用法是,如果有失败返回error,整体rollback,如果不返回error则commit。下面是Transaction的源码: // Transaction start a transaction as a block, return …

Gorm事务有error却不返回会发生什么

Gorm包是大家比较高频使用。正常的用法是,如果有失败返回error,整体rollback,如果不返回error则commit。下面是Transaction的源码:

// Transaction start a transaction as a block, return error will rollback, otherwise to commit. Transaction executes an
// arbitrary number of commands in fc within a transaction. On success the changes are committed; if an error occurs
// they are rolled back.
func (db *DB) Transaction(fc func(tx *DB) error, opts ...*sql.TxOptions) (err error) {panicked := trueif committer, ok := db.Statement.ConnPool.(TxCommitter); ok && committer != nil {// nested transactionif !db.DisableNestedTransaction {err = db.SavePoint(fmt.Sprintf("sp%p", fc)).Errorif err != nil {return}defer func() {// Make sure to rollback when panic, Block error or Commit errorif panicked || err != nil {db.RollbackTo(fmt.Sprintf("sp%p", fc))}}()}err = fc(db.Session(&Session{NewDB: db.clone == 1}))} else {tx := db.Begin(opts...)if tx.Error != nil {return tx.Error}defer func() {// Make sure to rollback when panic, Block error or Commit errorif panicked || err != nil {tx.Rollback()}}()if err = fc(tx); err == nil {panicked = falsereturn tx.Commit().Error}}panicked = falsereturn
}

神奇用法

但如果我瞎搞呢?如果有error我仍然返回nil,会发生什么?

err := db.Transaction(func(tx *gorm.DB) error {var err errorisInserted, err = d.TxCreate(tx, record)if err != nil {return nil}err = d.TxUpdate(tx, opt)if err != nil {return errors.Wrap(err, "failed to update")}return nil})

解释

这种情况下,本质看MySQL自身的设计。事务具有原子性,理论上应该要么全部成功,要么全部失败。但如果在一条语句失败后执行COMMIT,MySQL 会尽力提交已成功执行的语句。例如:

START TRANSACTION;
INSERT INTO test (id, value) VALUES (2, 'data3'); 
INSERT INTO test (id, value) VALUES (3, 'data4'); 
-- 故意让这条语句失败(假设id冲突)
INSERT INTO test (id, value) VALUES (2, 'data5'); 
COMMIT; 

在上述例子中,前两条INSERT语句可能已经成功执行并修改了数据库,而第三条失败。执行COMMIT后,前两条语句的修改会被永久保存到数据库中,而失败的语句不会回滚整个事务。

其实十分不建议这么用。数据库状态可能会出现部分操作生效,部分未生效的情况,破坏了事务的原子性。这可能导致数据不一致问题,例如业务逻辑上要求某些数据必须同时存在或不存在,但由于这种部分提交的情况,无法保证这种一致性。

MySQL表数据时间的记录时刻

假设数据库是这样的

CREATE TABLE `conversation_new_message` (`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',`conversation_new_id` bigint unsigned NOT NULL COMMENT '自增id',`message` json DEFAULT NULL COMMENT 'conversation history, a json map',`turn` bigint NOT NULL COMMENT '轮数',`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '上一次更新时间',PRIMARY KEY (`id`),
) ENGINE=InnoDB

起一个事务,按照下面的时间点执行,最终的创建时间是多少?是按照insert时刻的时间来的(不同记录不一样),还是按照真正落库的时间来的(不同记录一样)?

在这里插入图片描述

发现是按照真正写入的时间来的。其实也比较好理解,虽然我们没有直接赋值,但CURRENT_TIMESTAMP本身在记录创建的时候就已经设置好值了。

在这里插入图片描述


文章转载自:

http://jQQ78Icy.nrzkg.cn
http://WLfiT4yQ.nrzkg.cn
http://WYCqBgIc.nrzkg.cn
http://JuaFJ9xp.nrzkg.cn
http://JJWliPrz.nrzkg.cn
http://JuzoYTCX.nrzkg.cn
http://oz2n2qN3.nrzkg.cn
http://g1W0nuCz.nrzkg.cn
http://Mily30Cd.nrzkg.cn
http://Vie2PAH4.nrzkg.cn
http://fk3G6Nwq.nrzkg.cn
http://P60cKNML.nrzkg.cn
http://DNSrDmHH.nrzkg.cn
http://gVotKZMS.nrzkg.cn
http://Fwn56zHn.nrzkg.cn
http://5dT8dDVo.nrzkg.cn
http://cVQ5x0lq.nrzkg.cn
http://NpUrmXNC.nrzkg.cn
http://w14yiiNE.nrzkg.cn
http://2uIRhNME.nrzkg.cn
http://U6p25UAp.nrzkg.cn
http://EtEvnYai.nrzkg.cn
http://cTHMNDOh.nrzkg.cn
http://U7tNkYy5.nrzkg.cn
http://IlgTnrTB.nrzkg.cn
http://XT9Fq4nD.nrzkg.cn
http://0vIxqIsn.nrzkg.cn
http://6xsUqgWO.nrzkg.cn
http://m5UyBWuO.nrzkg.cn
http://0TKBZjYT.nrzkg.cn
http://www.dtcms.com/wzjs/680022.html

相关文章:

  • 农村建设自己的网站首页360免费wifi连不上
  • 唐山的做网站的企业wordpress怎么升级
  • mvc中手把手做网站山东省城乡与住房建设厅网站首页
  • 生产管理网站开发网站是如何建立的呢
  • 深圳营销外贸网站制作网站开发 activex
  • 贺州市八步区建设局网站网站主办者是什么意思
  • 响应式网站的设计尺寸做网站上传那个目录
  • 射阳网站开发wordpress内容类型
  • 找外包公司做网站价钱代加工订单
  • 怎样建设邮箱网站网站设计风格的关键词
  • 网站模版免费下载深圳公众号开发公司
  • 350做网站深圳手机自己做网站
  • 网站设计 网站建设 手机网站建设深圳网站制作公司售后
  • dw中怎样做网站二级页面特价网站建设价格低
  • 郑州工程建设信息网站赣州人才网招聘信息
  • 宁德网站建设国家企业信用信息没有网站怎么做
  • 网站开发工期安排表多语言网站建设
  • 班级网站页面设计营销是什么意思
  • 可以看那种东西的手机浏览器科学新概念seo外链
  • 成都市公园城市建设局网站酒店营销策划与运营
  • 图书网页设计网站上海华讯网络公司排名
  • 制作一个静态网站的步骤做微信投票的网站
  • js网站模板怎么用wordpress配置数据库失败
  • 做网站需要什么图片网站制作优势
  • 网站屏蔽国内ip用动易做的诗歌协会网站
  • 帝国cms 网站地图 xml自己做网络推广怎么做
  • 网站建设合同书模板网站管理员权限怎么设置
  • 做菠菜网站代理犯法吗江西做网站优化好的
  • 湖州网站建设策划网站建设 项目经验
  • 珠海营销型网站建设公司交互式网站的发展