【问题标题】:INSERT works in SQLite but not MySQLINSERT 适用于 SQLite 但不适用于 MySQL
【发布时间】:2011-12-24 07:08:39
【问题描述】:

我在 SQLite 数据库中创建的这张表:

CREATE TABLE [tickets] (
[id] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
[coupon_id] INTEGER  NULL,
[size] FLOAT  NULL,
[phone] VARCHAR(10)  NULL,
[date] DATE DEFAULT CURRENT_DATE NULL,
[time] TIME DEFAULT CURRENT_TIME NULL,
[product] TEXT  NULL
);

现在我在mysql中转换这个表

CREATE TABLE tickets (
id INTEGER  PRIMARY KEY AUTO_INCREMENT NOT NULL,
coupon_id INTEGER  NULL,
size FLOAT  NULL,
phone VARCHAR(10)  NULL,
date TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL,
time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL,
product TEXT  NULL
);

INSERT INTO "tickets" VALUES(429,9,18.16,'949-893-5032','2010-11-30','17:46:39','Kids’ Kups Berry Interesting™');
INSERT INTO "tickets" VALUES(430,9,12.04,'847-188-1359','2010-11-25','10:54:00','Raspberry Collider™');
INSERT INTO "tickets" VALUES(431,9,14.1,'204-682-5560','2010-12-08','15:34:07','Celestial Cherry High™');

当我插入这些值时出现错误ERROR 1293 (HY000): Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause.

我能够在 SQLite 中插入所有这些值,但我无法将所有这些值插入 MySQL。帮帮我?

【问题讨论】:

  • 您确定在INSERT 子句中得到错误吗?在CREATE TABLE 子句中获取它更可行,因为 MySQL 表具有错误消息中解释的限制。
  • Álvaro G. Vicario:) 是的,我得到了错误 1293 (HY000) 不正确的表定义;在默认更新子句中,只能有一个带有 current_timestamp 的 TIMESTAMP 列
  • 我很确定在CREATE TABLE时会发生这种情况。
  • @root,插入不是表定义。 (不要以root身份溢出堆栈:))

标签: mysql sqlite mysql-error-1293


【解决方案1】:

你可能想要转换

date TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL,
time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL,

created TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL,

并连接来自 SQLite 的值,或改变它们的类型

date date DEFAULT NULL,
time time DEFAULT NULL,

并使用trigger 添加当前日期/时间。

【讨论】:

  • rodneyrehm:) 你能把这个放在我的编码中吗?我是新手,我不再关心触发器
【解决方案2】:

据我所知,MySQL 不允许这样做。如果要在第二个字段中插入当前时间,可以考虑在插入时使用触发器来更新记录。

DELIMITER $$
CREATE TRIGGER curtime BEFORE INSERT ON tickets FOR EACH ROW
BEGIN
SET NEW.time = CURRENT_TIMESTAMP();
END;
$$
DELIMITER ;

【讨论】:

  • 或者切换到一个像样的 RDBMS :)
  • 创建触发器就像创建表一样,您在 SQL 编辑器中运行 SQL 语句。对于 MySQL,请尝试使用 Sequel Pro 或 phpmyadmin。
  • Ziminji :) 我现在有 phpmyadmin 和 wamp 服务器,所以我如何运行此代码我无法运行此表,请您编辑您的答案,我无法运行您的代码
  • 像 rodneyrehm 建议的那样,将默认值(至少在第二个字段,即“时间”)更改为 time TIMESTAMP DEFAULT NULL。这应该允许您创建表。
  • Ziminji:)我使用这个日期TIMESTAMP DEFAULT CURRENT_TIMESTAMP NULL,time TIMESTAMP DEFAULT NULL,但是它给出了一个错误Invalid default value for 'time'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 1970-01-01
  • 2020-10-12
  • 2011-03-12
  • 2012-04-14
相关资源
最近更新 更多