xorm-删除和软删除实例
- 删除数据Delete方法,参数为struct的指针并且成为查询条件。注意:当删除时,如果user中包含有bool,float64或者float32类型,有可能会使删除失败
package main
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
"log"
)
var engine *xorm.Engine
type User struct {
Name string `xorm:"varchar(25) 'name'"`
Id int `xorm:"pk 'id' autoincr"`
}
func main() {
var err error
engine, err = xorm.NewEngine("mysql", "root:123456@/test")
if err != nil {
log.Fatal(err)
return
}
//创建表和插入数据
/*err = engine.CreateTables(User{})
if err != nil {
log.Fatal(err)
return
}
u := make([]User, 3)
u[0].Name = "u0"
u[1].Name = "u1"
u[2].Name = "u2"
_, err = engine.Insert(u)
if err != nil {
log.Fatal(err)
return
}*/
uu := new(User)
has ,err :=engine.Id(2).Get(uu)
if err !=nil {
log.Fatal(err)
return
}
if has {
fmt.Println("删除Deleted,用户名:",uu.Name)
}else {
fmt.Println("该数据现在已经不存在")
}
affected, err := engine.Id(2).Delete(uu)
if err != nil {
log.Fatal(err)
return
}
fmt.Println("删除Delete,受影响的行数:", affected)
fmt.Println()
has ,err =engine.Id(2).Get(uu)
if err !=nil {
log.Fatal(err)
return
}
if has {
fmt.Println("删除Deleted,用户名:",uu.Name,"deleteAt:")
}else {
fmt.Println("该数据现在已经不存在")
}
affected, err = engine.Id(2).Delete(uu)
if err != nil {
log.Fatal(err)
return
}
fmt.Println("删除Delete,受影响的行数:", affected)
fmt.Println()
/*
输出:
删除Deleted,用户名: u1
删除Delete,受影响的行数: 1
该数据现在已经不存在
删除Delete,受影响的行数: 0
*/
}
软删除Deleted, Deleted可以让您不真正的删除数据,而是标记一个删除时间。使用此特性需要在xorm标记中使用deleted标记,对应的字段必须为time.Time类型。在Delete()时,deleted标记的字段将会被自动更新为当前时间而不是去删除该条记录
package main import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
"log"
"time"
) var engine *xorm.Engine type User struct {
Name string `xorm:"varchar(25) 'name'"`
Id int `xorm:"pk 'id' autoincr"`
Version int `xorm:"version"`
UpdatedAt time.Time `xorm:"updated"`
DeletedAt time.Time `xorm:"deleted"`
} func main() {
var err error
engine, err = xorm.NewEngine("mysql", "root:123456@/test")
if err != nil {
log.Fatal(err)
return
}
//创建表和插入数据
/* err = engine.CreateTables(User{})
if err != nil {
log.Fatal(err)
return
} u := make([]User, 3)
u[0].Name = "u0"
u[1].Name = "u1"
u[2].Name = "u2" _, err = engine.Insert(u)
if err != nil {
log.Fatal(err)
return
}*/ uu := new(User)
has ,err :=engine.Id(2).Get(uu)
if err !=nil {
log.Fatal(err)
return
}
if has {
fmt.Println("软删除Deleted,用户名:",uu.Name,"deleteAt:",uu.DeletedAt)
}else {
fmt.Println("该数据现在已经不存在")
} affected, err := engine.Id(2).Delete(uu)
if err != nil {
log.Fatal(err)
return
}
fmt.Println("软删除Delete,受影响的行数:", affected)
fmt.Println() has ,err =engine.Id(2).Get(uu)
if err !=nil {
log.Fatal(err)
return
}
if has {
fmt.Println("软删除Deleted,用户名:",uu.Name,"deleteAt:",uu.DeletedAt)
}else {
fmt.Println("该数据现在已经不存在")
} affected, err = engine.Id(2).Delete(uu)
if err != nil {
log.Fatal(err)
return
}
fmt.Println("软删除Delete,受影响的行数:", affected)
fmt.Println() //那么如果记录已经被标记为删除后,要真正的获得该条记录或者真正的删除该条记录,需要启用Unscoped,如下所示:
// 此时将可以获得记录,此时将可以真正的删除记录 has ,err =engine.Id(2).Unscoped().Get(uu)
if err !=nil {
log.Fatal(err)
return
}
if has {
fmt.Println("启用Unscoped,用户名:",uu.Name,"deleteAt:",uu.DeletedAt)
}else {
fmt.Println("该数据现在已经不存在")
} affected, err = engine.Id(2).Unscoped().Delete(uu)
if err != nil {
log.Fatal(err)
return
}
fmt.Println("启用Unscoped,受影响的行数:", affected) /*
输出:
软删除Deleted,用户名: u1 deleteAt: 0001-01-01 00:00:00 +0000 UTC
软删除Deleted,受影响的行数: 1 该数据现在已经不存在
软删除Deleted,受影响的行数: 0 启用Unscoped,用户名: u1 deleteAt: 2019-05-28 15:12:38 +0800 CST
启用Unscoped,受影响的行数: 1
*/ }
xorm-删除和软删除实例的更多相关文章
- 深入理解 EF Core:使用查询过滤器实现数据软删除
原文:https://bit.ly/2Cy3J5f 作者:Jon P Smith 翻译:王亮 声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的.其中可能会去除一些本人实在不知道如何组织 ...
- tp5 model 中的软删除
model中需use traits\model\SoftDelete; // 数据表中需添加一个 delete_time 字段保存删除时间 namespace app\index\model; use ...
- Laravel5.1 模型 --软删除
软删除是比较实用的一种删除手段,比如说 你有一本账 有一笔记录你觉得不对给删了 过了几天发现不应该删除,这时候软删除的目的就实现了 你可以找到已经被删除的数据进行操作 可以是还原也可以是真正的删除. ...
- laravel框架总结(九) -- 软删除
当模型被软删除时,它们并不会真的从数据库中被移除.而是会在模型上设置一个 deleted_at 属性并将其添加到数据库.如果对应模型被软删除,则deleted_at字段的值为删除时间,否则该值为空. ...
- laravel5.2总结--软删除
当模型被软删除时,它们并不会真的从数据库中被移除.而是会在模型上设置一个 deleted_at 属性并将其添加到数据库.如果对应模型被软删除,则deleted_at字段的值为删除时间,否则该值为空. ...
- 在FreeSQL中实现「触发器」和软删除功能
前言 最近做新项目,技术栈 AspNetCore + FreeSQL 这个ORM真的好用,文档也很完善,这里记录一下两个有关「触发器」的功能实现 修改实体时记录更新时间 模型代码 我的模型都是基于这个 ...
- 软删除脏数据job笔记
某次处理一个case,发现线上库里有很多数据有问题.于是决定写一个job来将有问题的数据软删除掉.涉及到的两条SQL语句如下: <select id="loadTSKTVBillDai ...
- 关于Domino数据库的软删除
在Domino的数据库属性的 “高级” 附签(选择文件->数据库->属性),选中“允许软删除”,这样我们就启用了软删除功能,当一个文档没有删除的时候我们可以使用NotesDatabase的 ...
- Mysql软删除
所谓软删除(Soft Deleting),即在删除数据表中的数据时,并不直接将其从数据表中删除,而是将其标志为删除,即在每张表中设置一个删除字段(如:IsDeleted)等,默认情况下其值为0,及未删 ...
随机推荐
- Linux 系统管理——系统安全及应用
chagen -d 0 ____用户名:下次登录时必须修改密码 ctrl+R:查看历史记录 history:查看历史记录 清除历史记录: >.bash _history echo“”>.b ...
- 《ELK Stack权威指南》读书笔记
Logstack: 1.Logstack介绍:Logstash is an open source data collection engine with real-time pipelining c ...
- 记一次MyBatisPlus问题(如果表名是数据库关键字怎么办)
问题信息:如果表名是数据库关键字怎么办? 正常来说,如果是我们自己写sql的话,给表名加反引号即可解决问题. 但是由于我们使用MyBatisPlus,相关的sql基本上都是封装并自动生成的.如果是这种 ...
- pyqt(day2)
一.安装python 二.安装pyqt5 pip install pyqt5 三.安装pycharm 四.第一个pyqt程序 import sys from PyQt5.QtWidgets impor ...
- /etc/resolv.conf文件中的search项作用
resolv.conf文件中有search项时,主机名解析规则顺序: DNS配置文件如下: # vi /etc/resolv.conf # Generated by NetworkManager se ...
- XML External Entity Injection(XXE)
写在前面 安全测试fortify扫描接口项目代码,暴露出标题XXE的问题, 记录一下.官网链接: https://www.owasp.org/index.php/XML_External_Entity ...
- mysql-创建用户报错ERROR 1396 (HY000): Operation CREATE USER failed for 'root'@'localhost'
创建用户: create user ‘test’@’%’ identified by ‘test’; 显示ERROR 1396 (HY000): Operation CREATE USER faile ...
- ubuntu16 修改gitlab root密码
搭建了一个gitlab的git服务器,默认的管理员为root; 长时间不用root忘记了root密码: 我们可以在服务器上直接重置root的密码: 以下操作在终端下执行 #进入gitlab控制台 su ...
- 图片上传: ajax-formdata-upload
传送门:https://www.cnblogs.com/qiumingcheng/p/6854933.html ajax-formdata-upload.html <!DOCTYPE html& ...
- sessionid 特性
本文为博主原创,转载请注明出处: sessionid 是服务器用来辨别客户端浏览器身份的号码,就像人的身份证一样.当用户第一次访问网站时,服务器会分配一个独一无二的 sessionid 给用户浏览器: ...