为了账号安全,请及时绑定邮箱和手机立即绑定

golang代码中mysql查询的自动增量不起作用

golang代码中mysql查询的自动增量不起作用

Go
海绵宝宝撒 2023-07-10 14:39:06
我正在开发一个使用以太坊区块链的项目,我想用块数据填充数据库,但对于 block_id 自动增量不起作用。下面的代码是创建查询stmt, err := db.Prepare("CREATE TABLE IF NOT EXISTS block( block_id bigint NOT NULL AUTO_INCREMENT, block_num varchar(200), block_hash varchar(200), tx_count int, PRIMARY KEY (block_id) );")下面的代码用于插入数据func InsertBlock(db *sql.DB, block_num string, block_hash string, tx_count int) {    stmt, err := db.Prepare("INSERT INTO block VALUES(?, ?, ?)")    if err != nil {        fmt.Println(err.Error())    } else {        fmt.Println("Preparation successfull for block insert: ")    }    _, err = stmt.Exec(block_num, block_hash, tx_count)    if err != nil {        fmt.Println(err.Error())    } else {        fmt.Println("Entry is block table is successfull: ")    }}怎样才能让它自动递增呢?这是我收到的错误:Error 1136: Column count doesn't match value count at row 1panic: runtime error: invalid memory address or nil pointer dereference[signal SIGSEGV: segmentation violation code=0x1 addr=0x38 pc=0x4e1930]
查看完整描述

1 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

如文档中所述:

如果没有为 INSERT ... VALUES 或 INSERT ... SELECT 指定列名列表,则表中每列的值必须由 VALUES 列表或 SELECT 语句提供。如果您不知道表中列的顺序,请使用 DESCRIBE tbl_name 来查找。

这意味着您的查询INSERT INTO block VALUES(?, ?, ?)将始终失败,因为您只指定了四个值中的三个。

因此,您需要指定列的列表,如下所示:

INSERT INTO block (block_num, block_hash, tx_count) VALUES(?, ?, ?)

那时 MySql 将不再抱怨,因为它知道缺失的列block_id是自动递增的,因此它不需要一个值。


查看完整回答
反对 回复 2023-07-10
  • 1 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信