gpt4 book ai didi

mysql - 我无法在 mysql 表中发布日期

转载 作者:行者123 更新时间:2023-11-29 15:51:16 25 4
gpt4 key购买 nike

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

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

当我给予时:

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

它显示一条错误消息:

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

注意:我没有将 net_salary 设置为 0/null,因为我已经创建了一个 View :

CREATE VIEW calc_salary AS
SELECT basic
FROM salary
WHERE (basic+0.45*basic-0.09*basic-0.15*basic) = net_salary

即net_salary是从basic开始计算的。

最佳答案

net_salary 的值丢失,我们需要在日期文字周围使用单引号。要消除语法错误,需要像这样:

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

如果我们想要计算 net_salary 的值,我们可以在 INSERT 语句中执行此操作。

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

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

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

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

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的值计算出来,那么将其存储为一列似乎是多余的,因为我们可以计算当我们需要它时,它的值(value)。例如:

 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 ;

关于mysql - 我无法在 mysql 表中发布日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56757416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com