我正在开发一个使用以太坊区块链的项目,我想用块数据填充数据库,但对于 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
是自动递增的,因此它不需要一个值。
- 1 回答
- 0 关注
- 190 浏览
添加回答
举报
0/150
提交
取消