数据库索引

本文探讨了主键ID作为索引的作用,详细解释了唯一索引在数据库操作中的特性,如插入时的冲突处理及对查询与插入速度的影响。并通过Beego框架的readOrCreate函数展示了有则更新,无则插入的功能实现。

主键ID也是索引的一种,所以索引的条款就是和id一样的

下面是唯一索引,插入时:无则插入,有则插不上;查询速度加快,插入速度变慢;

【如果要实现"有则更新,无则插入"的功能可以使用beego的readOrCteate函数,索引就是和主键ID一样,不会有其他作用】


 索引:

插入一条索引相同时,不会插入和更新:

 

全代码:

func getLogsheetByFid(fid int64) (err error) {

	yesterdayStart := time.Now().AddDate(0, 0, -1).Format("2006-01-02") + " 00:00:00"
	yesterdayEnd := time.Now().AddDate(0, 0, -1).Format("2006-01-02") + " 23:59:59"
	yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
	currentTime := time.Now().Format("2006-01-02 15:04:05")

	o := orm.NewOrm()
	logsheetQs := o.QueryTable("logsheet")
	logsheetRecordQs := o.QueryTable("logsheet_record")
	logsheetQs = logsheetQs.Filter("frequency_id", fid)

	var l []models.Logsheet
	if _, err = logsheetQs.Limit(123000).All(&l); err == nil {
		for _, v := range l {
			logsheetRecordQs = logsheetRecordQs.
				Filter("logsheet_id", v.Id).
				Filter("created_at__gte", yesterdayStart).
				Filter("created_at__lte", yesterdayEnd)
			var lr []models.LogsheetRecord
			if nums, err := logsheetRecordQs.Limit(100000).All(&lr); err == nil {
				if nums == 0 {
					models.AddWarning(&models.Warning{v.Id, v.Name, v.Name + "缺少" + yesterday + "的更新", currentTime, 0, 0, "123", "123", "123"})
				}
			} else {
				return err
			}
		}
		return nil
	} else {
		return err
	}
}

 

func AddWarning(m *Warning) (id int64, err error) {
	o := orm.NewOrm()
	id, err = o.Insert(m)
	return
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值