SQL 语法 DATATIME 选项中的错误

Posted

技术标签:

【中文标题】SQL 语法 DATATIME 选项中的错误【英文标题】:Error in SQL syntax DATATIME option 【发布时间】:2014-06-26 11:09:26 【问题描述】:

我开始编写一个新的 php 脚本,并且我第一次使用了 mysql 中的 DATATIME 选项。我认为这是问题所在。

我的sql表是:

id int(6) auto_increment,
name varchar(40) not null,
pseudo varchar(40) not null,
email varchar(40) not null,
password varchar(40) not null,
plan varchar(40) not null,
date DATETIME DEFAULT CURRENT_TIMESTAMP,
points int(6) not null,
primary key(id,name,pseudo,email,password,date,points,plan)

当我尝试执行这个查询时:

insert into users(NULL,"name","pseudo","email@email.com","Pass1919",NULL,
"100");

显示此错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在 'NULL 附近使用的语法, "name","pseudo","email@email.com","Pass1919",NULL,"100")' 在第 1 行

【问题讨论】:

为什么你有这么大的复合键主key(id,name,pseudo,email,password,date,points,plan) dev.mysql.com/doc/refman/5.5/en/insert.html 【参考方案1】:

试试这个..

    insert into users(name,pseudo,email,password,paln,date,poits)
 values("name","pseudo","email@email.com","Pass1919",NULL, "100");

【讨论】:

【参考方案2】:

正如其他人所说,并且

insert into users(name,pseudo,email,password,paln,date,poits)
values("name","pseudo","email@email.com","Pass1919",'', NULL, "100");

计划 varchar(40) 不为空,

他们错过的是计划不是空的,要么输入空作为日期,要么我宁愿完全省略它。

insert into users(name,pseudo,email,password,paln,poits)
values("name","pseudo","email@email.com","Pass1919",'', "100");

如果您计算上述某些响应中的字段和输入,它们不相等。字段列表在插入中是可选的,但我会使用它们,以提高可读性并确保输入的顺序和数量正确。

最后一件事是更改主键,仅更改自动增量字段,如果您需要其他复合索引,您应该单独添加它们并根据您的要求使其唯一。主键应该是代理键,以这种方式定义

该值在系统范围内是唯一的,因此从不重复使用 该值是系统生成的 用户或应用程序无法操作该值 该值不包含语义含义 该值对用户或应用程序不可见 该值不是由来自不同域的多个值组成。

其他键应该与数据相关,就像我说的,如果您需要复合唯一键,或者只是像电子邮件这样的唯一字段,请将其与主键分开。

【讨论】:

非常感谢..我很久没有使用mysql了..感谢提醒:))) (y)【参考方案3】:

你必须使用关键字值:

insert into users values(NULL,"name","pseudo","email@email.com","Pass1919",NULL,
"100");

【讨论】:

【参考方案4】:

不要将第一个参数作为NULL 传递,因为您已经将它指定为主键并且还自动递增。 用这个

insert into users values("name","pseudo","email@email.com","Pass1919",NULL, "100");

【讨论】:

【参考方案5】:

试试这个

INSERT INTO users(
  `name`,
  `pseudo`,
  `email`,
  `password`,
  `plan`,
  `points`
)
VALUES (
  NULL, 
 'name', 
 'pseudo', 
 'email@email.com', 
 'Pass1919', 
 NULL, 
 '100');

【讨论】:

@user3779014 如果有帮助,请不要忘记接受/投票【参考方案6】:

尝试使用values 关键字添加要插入值的表字段名称。如果您不想发送 id, date,自动增量 ID 也不能是 NULL values 离开它都会自动收集带有增量和当前时间戳的值

 insert into users(name,pseudo,email,password,plan,points) values ('name','pseudo','email@email.com','Pass1919','','100');

【讨论】:

【参考方案7】:

此外,当您处理整数时,插入时不需要将其括在引号中,因此您可以这样做

      insert into users(name,pseudo,email,password,plan,date,points)
 values("name","pseudo","joe.bloggs@mydomain.com","S3CuR3", "PLAN", "2014-06-26", 100);

【讨论】:

以上是关于SQL 语法 DATATIME 选项中的错误的主要内容,如果未能解决你的问题,请参考以下文章

mysql报语法错误

在JAVA中怎么获取mysql表中的mediumtext类型和datatime类型的字段并显示在控制台上?

数据库Datatime类型的数据,怎样只修改日期,时间保持不变,SQL怎么写

sql中datatime使用,vs中datatimepicker使用问题,语言类型C#

oracle如何检查sql语法错误

ogr执行sql语句,sql中有中文时包语法错误