2019-08-01 21:24
浏览 123


I am working on a project using ethereum blockchain and I want to populate db with blocks data but for block_id autoincrement is not working.

code below is the create query

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) );")

code below is used to insert the data

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 {
    } else {
        fmt.Println("Preparation successfull for block insert: ")

    _, err = stmt.Exec(block_num, block_hash, tx_count)
    if err != nil {
    } else {
        fmt.Println("Entry is block table is successfull: ")

How can I make it auto increment?

Here is the error i am getting:

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]

图片转代码服务由CSDN问答提供 功能建议



  stmt,err:= db.Prepare(“如果不存在,则创建表 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字符串,block_hash字符串,tx_count int){
 stmt,err:= db.Prepare(“  INSERT INTO block VALUES(?,?,?)“)
 if err!= nil {
} else {
 fmt.Println(”准备成功插入块 :“)
 _,err = stmt.Exec(block_num,block_hash,tx_count)
如果err!= nil {
} else {\  n fmt.Println(“条目成功进入阻止表:”)  



 [信号SIGSEGV:分段违规代码 = 0x1 addr = 0x38 pc = 0x4e1930] 
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dto52236 2019-08-01 22:06

    As specified in the documentation:

    If you do not specify a list of column names for INSERT ... VALUES or INSERT ... SELECT, values for every column in the table must be provided by the VALUES list or the SELECT statement. If you do not know the order of the columns in the table, use DESCRIBE tbl_name to find out.

    That means that your query INSERT INTO block VALUES(?, ?, ?) will always fail because you are specifying only three out of for values.

    So you need to specify the list of the columns, like this:

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

    At that point MySql will not complain anymore because it knows that the missing column block_id is auto incremented so it doesn't need a value for that.

    打赏 评论

相关推荐 更多相似问题