问题描述
|
我无法理解此sql语句出了什么问题
INSERT INTO tbl_car_model_year_rate
SET car_model_id =4,FROM =2008,TO =2011,with_driver =1,per_day =1000,ten_days =10000,twenty_days =20000,thirty_days =30000,image = \'1303166512test.jpg\',created_at = Now( ),created_by =1
数据类型
car_model_id int(11)
image text
from year(4)
to year(4)
with_driver tinyint(1)
per_day int(11)
ten_days int(11)
twenty_days int(11)
thirty_days int(11)
created_at datetime
created_by int(11)
错误讯息
You have an error in your sql Syntax; check the manual that corresponds to your MysqL server version for the right Syntax to use near \'from =2008,to =2011,per_day =1000,twenty\' at line 1
解决方法
如果将代码更改为:
INSERT INTO tbl_car_model_year_rate SET car_model_id =4,`FROM` =2008,`TO` =2011,with_driver =1,per_day =1000,ten_days =10000,twenty_days =20000,thirty_days =30000,image = \'1303166512test.jpg\',created_at = NOW( ),created_by =1
会的。
如果您在反引号\“`\”中添加字段和/或表名,则几乎可以使用任何名称。
失败原因
FROM
是保留字(如select *
FROM
tablename
)
您通过使用FROM
作为列名(select * FROM FROM WHERE FROM = AND
)来混淆MySQL
我的建议
不要为字段名使用保留字。
将列名从“ 4”更改为“ 11”或“ 12”
从TO
到YearTo
或EndYear
。
使用保留字作为列名很容易引起混淆,在所有内容周围加上反引号只会使内容难以阅读和丑陋,同时仍然令人困惑。,您正在使用保留字作为列名。
某些字词,例如SELECT,DELETE,
或BIGINT保留,并要求
特殊处理
标识符,例如表和列
名称。这对于
内置函数的名称。
保留字被允许为
标识符,如果您引用为
在第8.2节“架构”中进行了介绍
对象名称”:
有关保留字的更详细列表,包括版本之间的差异,请参见MySQL 5.5中的保留字。
http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html,TO和FROM是保留字,您应该将其放在单个\ out中,例如\'FROM \',\'TO \'。
并记住避免在生成表时对列使用保留字。请参见下面的链接,以获得mysql保留字的完整参考
http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html,这是在MySQL中正确使用Year字段的示例:
MySQL:将当前年份添加为字段“ year”的默认值