2

我创建了一个名为employee 的表

CREATE TABLE employee(
     id INT,
     name VARCHAR(50),
     credit_card_number VARCHAR(20),
     expr_date CHAR(6),
     PRIMARY KEY(id)
)

然后我有一个存储信用卡信息的表

CREATE TABLE credit_card (
     credit_card_number VARCHAR(20),
     expr_date CHAR(6),
     o_datetime DATETIME
)

我想编写一个插入语句,将每个员工当前存储的信用卡信息插入到我的新信用卡表中。我也想o_datetime用当前日期时间填写我的。

这就是我最初的处理方式,但我不确定我是否做得对..

INSERT INTO credit_card(credit_card_number, expr_date, CURRENT_TIMESTAMP AS o_datetime)
SELECT credit_card_number, expr_date
FROM employees;

但是当我运行它时出现错误。我对 SQL 真的很陌生,所以我可能错过了一个简单的步骤,但我似乎无法弄清楚。

4

3 回答 3

3

首先,您永远不应该将未加密的信用卡号码存储在数据库中。这是邀请某人“借用”这些号码。您可以散列它们或以其他方式存储它们以防止未经授权的访问。

您的陈述的问题是o_datetime组件。默认值可以放在select语句中:

INSERT INTO credit_card(credit_card_number, expr_date, o_datetime)
    SELECT credit_card_number, expr_date, CURRENT_TIMESTAMP
    FROM employees;

但是,如果您始终希望这是插入数据的日期,则可以将其设为默认值:

CREATE TABLE credit_card (
     credit_card_number VARCHAR(20),
     expr_date CHAR(6),
     o_datetime DATETIME default CURRENT_TIMESTAMP
)

然后你可以这样做:

INSERT INTO credit_card(credit_card_number, expr_date)
    SELECT credit_card_number, expr_date
    FROM employees;

请注意,在旧版本的 MySQL 中,o_datetime需要是timestamp.

于 2015-03-08T21:07:29.020 回答
1

它应该如下所示:

INSERT INTO credit_card(credit_card_number, expr_date, o_datetime)
SELECT credit_card_number, expr_date, CURRENT_TIMESTAMP
FROM employee;

您需要定义插入的第三列,在这种情况下,CURRENT_TIMESTAMPo_datetime.

于 2015-03-08T21:01:42.707 回答
1

你的语法不正确。子句后面的列表into只能包含列名。所有值(即使它们是常量或函数返回值)都必须在select列表中给出:

INSERT INTO credit_card(credit_card_number, expr_date, o_datetime)
SELECT      credit_card_number, expr_date, CURRENT_TIMESTAMP
FROM        employees; 
于 2015-03-08T21:03:37.860 回答