golang代码中mysql查询自动递增不工作
我正在使用以太坊区块链进行一个项目,我想用块数据填充数据库,但块id自动增量不起作用 下面的代码是创建查询golang代码中mysql查询自动递增不工作,mysql,go,auto-increment,Mysql,Go,Auto Increment,我正在使用以太坊区块链进行一个项目,我想用块数据填充数据库,但块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) );") 下面的代
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 1
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x38 pc=0x4e1930]
如合同规定:
如果未指定要插入的列名列表。。。值或插入。。。SELECT,表中每列的值必须由值列表或SELECT语句提供。如果不知道表中列的顺序,请使用descripe tbl_name查找
这意味着您的查询插入到块值(?,?)
将始终失败,因为您只指定了三个for值
因此,您需要指定列的列表,如下所示:
插入到块(块数、块散列、发送计数)值(?、、?)
到那时,MySql将不再抱怨,因为它知道缺少的列
block\u id
是自动递增的,所以它不需要一个值。问题可能在于您的SQL查询,请尝试插入到block(block\u num,block\u hash,tx\u count)值(?,?)
@fedemengo如果他的表只包含这些列,那么他的SQL应该按顺序工作,但我同意在INSERT中使用显式列更好,或者更不容易出错。@fedemengo这很有帮助。。。非常感谢。