golang代码中mysql查询自动递增不工作

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) );") 下面的代

我正在使用以太坊区块链进行一个项目,我想用块数据填充数据库,但块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这很有帮助。。。非常感谢。