我创建了一个名为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很陌生,所以我可能会错过一个简单的步骤,但我似乎无法弄明白。
答案 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_TIMESTAMP
为o_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;