我正在研究Go中的一个程序,它会大量使用MySQL。为了便于阅读,是否可以在INSERT语句中的每个列名后包含列的值?像:
INSERT INTO `table` (`column1` = 'value1', `column2` = 'value2'...);
而不是
INSERT INTO `table` (`column`, `column2`,...) VALUES('value1', 'value2'...);
这样可以更容易地看到哪个值与哪个列相关联,因为SQL字符串通常可以相当长
答案 0 :(得分:3)
不,你不能使用你提出的语法(虽然它会很好)。
一种方法是排列列名和值:
INSERT INTO `table`
(`column`, `column2`,...)
VALUES
('value1', 'value2'...);
更新以响应您的注释“语句包含来自字符串外部的变量”:如果您参数化SQL语句,那么将列名称与变量匹配很容易检查参数是否针对各自的列命名:{{1 }}
这实际上就是我在TSQL脚本中的表现:
@ColumnName
(将逗号放在行的开头也很常见)
但说实话,一旦你得到足够的列,就很容易混淆列的位置。如果它们具有相同的类型(以及相似的值范围),您可能不会立即注意到....
答案 1 :(得分:2)
虽然这个问题有点老了,但我会把它放在这里供未来的研究人员使用。
我建议使用SET语法而不是丑陋的VALUES列表语法。
INSERT INTO table
SET
column1 = 'value1',
column2 = 'value2';
恕我直言,这是MySQL中最干净的方式。
答案 2 :(得分:-1)
使用Golang数据库/ sql包时,连接到数据库的工作由您选择的SQL驱动程序执行,例如http://github.com/ziutek/mymysql或https://github.com/Go-SQL-Driver/MySQL/。
在Query()或Exec()等函数中使用SQL语句时,几乎所有驱动程序都会将SQL语句原样传递给数据库引擎。 MySQL实现了标准的SQL INSERT语法,并且不支持您提出的语法。因此,您不能将您的建议语法与现有的Golang MySQL驱动程序和MySQL数据库一起使用。
因此,如果您想使用语法,您的解决方案是: