2015-03-08 95 views
2

我创建了一个名为员工MySQL:有没有办法将值从一个表插入另一个表?

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很陌生,所以我可能会错过一个简单的步骤,但我似乎无法弄清楚。

+0

“但是当我运行这个时出现错误”---我们需要猜测它吗?但它显然是列的数量。你试图插入3列,只选择2. – zerkms 2015-03-08 21:00:11

回答

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

+0

我试着运行这个,但我得到一个错误,说我的表'credit_card'已经存在。怪异的.. – Kara 2015-03-08 21:02:58

+0

@Kara - 为我工作,看看发布的小提琴,并让我知道什么是错的...顺便说一句 - 你正在创建一个'employee'表,但在'insert'语句中调用'employees'。 – sgeddes 2015-03-08 21:06:50

1

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

INSERT INTO credit_card(credit_card_number, expr_date, o_datetime) 
SELECT  credit_card_number, expr_date, CURRENT_TIMESTAMP 
FROM  employees; 
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

+3

“你不应该在数据库中存储未加密的信用卡号码”---一般的建议是根本不存储它们,因为它“违反”PCI(引号,因为它不是,但如果有人问这样的问题 - 那么他们肯定不符合要求)。 – zerkms 2015-03-08 21:11:57

+0

是的。你在什么公司工作?我不想从你那里买任何东西。 – 2015-03-08 21:35:54

相关问题