xorm插入数据实例
package main import (
"fmt"
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
"log"
) var engine *xorm.Engine type User2 struct {
Name string `xorm:"varchar(25) 'usr_name'"`
Id int `xorm:"pk 'id' autoincr"`
} type User3 struct {
Name string `xorm:"varchar(25) 'usr_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(User2{})
if err!=nil {
log.Fatal(err)
return
} err = engine.CreateTables(User3{})
if err!=nil {
log.Fatal(err)
return
} //func (engine *Engine) Insert(beans ...interface{}) (int64, error)
//返回的第一个参数是受影响的行数
//插入一条数据,可以用Insert
stu:= new(User2)
stu.Name ="user"
affected ,err :=engine.Insert(stu)
if err!=nil {
log.Fatal(err)
return
}
fmt.Println("插入一条数据用Insert受影响的行数:",affected) //插入一条数据,也可以用InsertOne
stu1:= new(User2)
stu1.Name="user2222"
affected ,err =engine.InsertOne(stu1)
if err!=nil {
log.Fatal(err)
return
}
fmt.Println("InsertOne受影响的行数:",affected) /* 插入同一个表的多条数据,
此时如果数据库支持批量插入,那么会进行批量插入,
但是这样每条记录就无法被自动赋予id值。
如果数据库不支持批量插入,那么就会一条一条插入。*/
sts:=make([]User2,3)
sts[0].Name ="name"
sts[1].Name ="name"
sts[2].Name ="name" affected,err = engine.Insert(sts)
if err !=nil {
log.Fatal(err)
return
}
fmt.Println("插入同一个表的多条数据受影响的行数:",affected)
//使用指针Slice插入多条记录,同上
stus:=make([]*User2,3)
stus[0] =new(User2)
stus[0].Name="name"
stus[1] =new(User2)
stus[1].Name="name"
stus[2] =new(User2)
stus[2].Name="name" affected,err = engine.Insert(stus)
if err !=nil {
log.Fatal(err)
return
} fmt.Println("使用指针Slice插入多条记录受影响的行数:",affected) //插入不同表的一条记录
s := new(User2)
s.Name="s"
s1:= new(User3)
s1.Name="s1"
affected,err = engine.Insert(s,s1)
if err !=nil {
log.Fatal(err)
return
} fmt.Println("插入不同表的一条记录受影响的行数:",affected) //插入不同表的多条记录
ss:=make([]User2,3)
ss[0].Name ="name"
ss[1].Name ="name"
ss[2].Name ="name" ss1:=make([]User3,2)
ss1[0].Name ="name"
ss1[1].Name ="name" affected,err = engine.Insert(ss,ss1)
if err !=nil {
log.Fatal(err)
return
}
fmt.Println("插入不同表的多条记录受影响的行数:",affected) //插入不同表的一条或多条记录
s0:= new(User2)
s0.Name="s0" ss0:=make([]User3,2)
ss1[0].Name ="name"
ss1[1].Name ="name" affected,err = engine.Insert(s0,ss0)
if err !=nil {
log.Fatal(err)
return
}
fmt.Println("插入不同表的一条或多条记录受影响的行数:",affected) } /*输出:
插入一条数据用Insert受影响的行数: 1
InsertOne受影响的行数: 1
插入同一个表的多条数据受影响的行数: 3
使用指针Slice插入多条记录受影响的行数: 3
插入不同表的一条记录受影响的行数: 2
插入不同表的多条记录受影响的行数: 5
插入不同表的一条或多条记录受影响的行数: 3
*/
这里需要注意以下几点:
- 这里虽然支持同时插入,但这些插入并没有事务关系。因此有可能在中间插入出错后,后面的插入将不会继续。此时前面的插入已经成功,如果需要回滚,请开启事务。
- 批量插入会自动生成
Insert into table values (),(),()的语句,因此各个数据库对SQL语句有长度限制,因此这样的语句有一个最大的记录数,根据经验测算在150条左右。大于150条后,生成的sql语句将太长可能导致执行失败。因此在插入大量数据时,目前需要自行分割成每150条插入一次。
xorm插入数据实例的更多相关文章
- JDBC插入数据实例
在本教程将演示如何在JDBC应用程序中向数据库的一个表中插入数据记录. 在执行以下示例之前,请确保您已经准备好以下操作: 具有数据库管理员权限,以在给定模式中数据库表中插入数据记录. 要执行以下示例, ...
- MySQL 插入数据 通过命令提示窗口插入数据
MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下为向MySQL数据表插 ...
- MySQL 插入数据
MySQL 插入数据 MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下 ...
- 吴裕雄 10-MySQL插入数据
语法以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法:INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( ...
- 十一、MySQL 插入数据
MySQL 插入数据 MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下 ...
- 批量插入数据(基于Mybatis的实现-Oracle)
前言:做一个数据同步项目,要求:同步数据不丢失的情况下,提高插入性能. 项目DB框架:Mybatis.DataBase:Oracle. -------------------------------- ...
- python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
实例1.取得MYSQL版本 复制代码 代码如下: # -*- coding: UTF-8 -*-#安装MYSQL DB for pythonimport MySQLdb as mdbcon = Non ...
- MySQL为数据表的指定字段插入数据
username not null 没有默认值/有默认值 insert不插入username字段 均不报错 2014年07月23日21:05 百科369 MySQL为数据表的指定字段插入数据 ...
- 向Oracle数据库中插入数据出错:ORA-01036 无效的变量名或数据
向Oracle数据库中插入数据出错: 经过排查,因为Update数据时没有出错,所以OracleHelper没有问题: 看异常信息提示:无效的变量和数据,应该是SQL语句的问题,调试时所传的实例Use ...
随机推荐
- HTML音乐标签和滚动
<!-- 音乐标签 --> <embed src="1.mp3" type=""> <embed src="1.mp3& ...
- SQL基础-连接表
一.连接表 1.SQL JOIN 忘记在哪保存的某位网友的图,先明白SQL JOIN, 2.关于笛卡尔积 笛卡尔积: 两个集合的乘积 重新建student表和teacher表: student表: C ...
- vue-cli使用笔记
安装nodejs 安装vue-clinpm install -g vue-cli 使用vue-cli初始化项目vue init webpack my-project 进到目录cd my-project ...
- Java基础教程(全代码解析)
字面量: 整数字面量为整型(int) 小数字面量为双精度浮点型(double) 数据类型: byte short int long float double 接下来代码展示理解 public clas ...
- 缺陷描述(Description)
[tips1] 缺陷报告的用途在于: 记录bug 对bug进行分类(发现者.日期.版本.模块.严重程度.优先级) 跟踪bug(new-open-fixed-closed) 对bug进行统计分析.总结 ...
- mysql 创建时间字段
alter table table1 add order_date datetime null; mysql> select * from table1; +----------+------- ...
- vue 移动端禁用安卓手机返回键
//禁止手机返回键 下面这段代码直接复制在index.html中,可以生效// $(document).ready(function() { if (window.history &&a ...
- JdkDynamicAopProxy与CglibAopProxy介绍
继续上一篇的介绍 1.上一篇分析到createAopProxy方法,创建Aop代理对象 protected final synchronized AopProxy createAopProxy() { ...
- MySQL8新特性(2)--mysql的升级过程
在之前的版本中,安装新的版本mysql之后,mysql server在下一次启动时,会自动升级数据字典表,然后dba需要执行mysql_upgrade手动升级mysql schema中的系统表,以及其 ...
- Java基础 throw 抛出异常后,用try...catch捕获
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...