2015-03-08 40 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

相關問題