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
。
我创建了一个名为 employee
的 tableCREATE 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
。