在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
我是否必须为这些不需要的列中的每一个声明废弃值?
答案 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)