我无法在mysql表中发布日期

时间:2019-06-25 15:25:05

标签: mysql

我无法在此处插入日期。我的桌子是:

python logEverything.py |& tee -a logFile.text

我给的时候:

CREATE TABLE salary
(
    emp_id int NOT NULL,
    basic int,
    net_salary double,
    salary_date date,
    FOREIGN KEY(emp_id) REFERENCES employee(emp_id)
)

它显示一条错误消息:

1064-您的SQL语法有错误;检查与您的MariaDB服务器版本相对应的手册以在第1行的'2019-06-21)'附近使用正确的语法

N.B .:我没有将net_salary设置为0 / null,因为我已经进行了查看:

INSERT INTO `salary`(`emp_id`, `basic`, `net_salary`, `salary_date`) 
VALUES (121,5000, ,2019-06-21)

即net_salary应从基本计算。

1 个答案:

答案 0 :(得分:0)

缺少net_salary的值,我们需要在日期文字周围使用单引号。要摆脱语法错误,它需要像这样:

INSERT INTO `salary` (`emp_id`, `basic`, `net_salary`, `salary_date`) 
VALUES (121,5000,NULL,'2019-06-21')
                 ^^^^ ^          ^ 

如果要计算net_salary的值,可以在INSERT语句中执行。

如果WHERE子句视图中显示的条件:

(basic+0.45*basic-0.09*basic-0.15*basic) = net_salary

实际上代表了我们用来根据net_salary计算basic的公式,

然后我们可以将其表示为一项作业:

net_salary := ( basic*1.0 ) + ( basic*+0.45 ) + ( basic*-0.09 ) + ( basic*-0.15 )

我们可以将其分解为等效表达式:

net_salary :=  basic * ( (1.0) + (0.45) + (-0.09) + (-0.15) )

这样,我们可以执行以下操作为插入行的net_salary提供一个值:

INSERT INTO `salary` (`emp_id`, `basic`, `net_salary`, `salary_date`) 
VALUES (121,5000, 5000 * ( (1.0) + (0.45) + (-0.09) + (-0.15) ) ,'2019-06-21')
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

但是,如果始终以这种方式计算net_salary的值,则基于basic的值,将其存储为列似乎是多余的,因为我们可以在需要时随时计算该值。例如:

 SELECT s.emp_id 
      , s.basic
      , s.basic * ( (1.0) + (0.45) + (-0.09) + (-0.15) ) AS calc_net_salary
      , s.salary_date
   FROM salary
  WHERE ... 

如果这样做,则可以从表中删除net_salary列。

但是如果我们必须将计算出的值存储在列中,那么我们可以让BEFORE INSERTBEFORE UPDATE触发器为我们计算值。

DELIMITER $$

CREATE TRIGGER salary_bi
BEFORE INSERT ON salary
FOR EACH ROW
BEGIN 
  SET NEW.net_salary := NEW.basic * ( (1.0) + (0.45) + (-0.09) + (-0.15) );
END$$ 

DELIMITER ;