MySQL:有没有办法将值从一个表插入另一个表?

时间:2015-03-08 20:58:53

标签: mysql sql insert-select

我创建了一个名为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
)

我想写一个insert语句,将每个员工当前存储的信用卡信息插入到我的新信用卡表中。我还想用当前日期时间填写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很陌生,所以我可能会错过一个简单的步骤,但我似乎无法弄明白。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

它应该是这样的:

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

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

答案 2 :(得分:1)

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

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