如何将一个值扫描为零而不进行处理?

时间:2018-07-06 14:04:11

标签: mysql sql go

在Go语言中,我试图编写一种处理MySQL表结构的工具,因此我必须使用很多类似这样的查询

show keys from`table`where`Key_name`='Primary'

在MySQL中,我无法将此命令与select命令一起包装并选择所需的列,因此,当我只想要一个列(在这种情况下为Column_name)时,该如何处理我不要吗因为此查询也返回所有其他这些列; Table, Non_unique, Key_name, Seq_in_index, Column_name, Collation, Cardinality, Sub_part, Packed, Null, Index_type, Comment, Index_comment

在我的Go代码中,我的行看起来像这样

err = keysData.Scan(columnName)

如果我可以做这样的事情

err = keysData.Scan(_, _, _, _, columnName)

但这并不能真正起作用,得到cannot use _ as value

我是否必须为这些不需要的列中的每一个声明废弃值?

2 个答案:

答案 0 :(得分:6)

我将使用INFORMATION_SCHEMA。这比SHOW KEYS更通用,因为您可以选择单个列。例如:

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_NAME='mytable' AND INDEX_NAME='PRIMARY'
ORDER BY SEQ_IN_INDEX

请参见https://dev.mysql.com/doc/refman/8.0/en/statistics-table.html

答案 1 :(得分:1)

对于您的用例,我还建议避免使用您的方法,并按照@ bill-karvin的建议使用INFORMATION_SCHEMA。

但是要严格回答您的问题,您可以使用总是成功但不执行任何操作的虚拟sql.Scanner

type dummyScanner struct{}

func (dummyScanner) Scan(v interface{}) error {
    return nil
}

var skip dummyScanner

err = keysData.Scan(skip, skip, skip, skip, columnName, skip, skip, skip, skip, skip, skip, skip, skip)