SQL插入时间戳问题

时间:2017-04-07 11:52:34

标签: mysql sql

我正在尝试将user_id表中的两列(team_iduser)中的值插入到company_team的联结表中。但是,我在created_at中为updated_atcompany_team列插入值并且不知道如何通过它们的两种不同尝试时遇到错误。

在第一次尝试中,我只想用user表中的等效字段中的值更新两个字段:(两个表上的注释列都是DATETIME)

INSERT INTO `company_team` (`created_at`,`updated_at`,`user_id`, `company_id`)
SELECT `user_id`, `company_id`, `created_at`, `updated_at`
FROM `user` AS `u`
WHERE `u`.`company_id` IS NOT NULL;

错误:

Incorrect datetime value: '1' for column 'created_at' at row 1

然后我尝试在创建记录时使用当前日期/时间:

INSERT INTO `company_team` (NOW(),NOW(),`user_id`, `company_id`)
SELECT `user_id`, `company_id`, `created_at`, `updated_at`
FROM `user` AS `u`
WHERE `u`.`company_id` IS NOT NULL;

错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOW(),NOW(),`user_id`, `organization_id`)
SELECT `user_id`, `company_id`, `' at line 1

4 个答案:

答案 0 :(得分:2)

进行插入时,值的名称无关紧要。他们是匹配的位置。

所以,我认为你只需要重新排序列:

INSERT INTO company_team (user_id, company_id, created_at, updated_at)
    SELECT user_id, company_id, created_at, updated_at
    FROM `user` u
    WHERE u.company_id IS NOT NULL;

这改变了INSERT方面的顺序。也许作为习惯问题,我将创建和更新的日期放在最后 - 或者通过给出默认值来自动设置它们。

答案 1 :(得分:2)

您需要以与INSERT部分中列出的列相同的顺序选择项目:

INSERT INTO `company_team` (`user_id`, `company_id`, `created_at`, `updated_at`)
SELECT `user_id`, `company_id`, `created_at`, `updated_at`
FROM `user` AS `u`
WHERE `u`.`company_id` IS NOT NULL;

答案 2 :(得分:0)

在第二次尝试时,您使用NOW()作为要插入的列。值(和NOW()函数)应该在SELECT子句上。

答案 3 :(得分:0)

在第二次尝试中,您使用NOW()来创建created_at和updated_at值。这不会插入表user中的值,而是插入当前时间戳。在这种情况下,当您创建表created_at

时,更容易简单地为值updated_at和'DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'定义值company_team的'DEFAULT CURRENT_TIMESTAMP'

因此,您无需在创建时主动设置它们,因为它们将自动填充