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

MySQL: Is there a way to insert values from one table to another?

我创建了一个名为 employee

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

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

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

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

它应该是这样的:

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

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

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

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

您的陈述的问题是 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