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

标签 mysql

我无法在此处插入日期。我的 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/

相关文章:

javascript - mysql检查整数是否存在于分号分隔的字符串中,并在where子句中完全匹配

php - PHP 与 MYSQL 的连接繁忙?

mysql - MySQL 中何时使用单引号、双引号和反引号

java - 无法在 Spring MVC 上创建 bean

javascript - 在链接单击上运行数据库查询并仍然加载链接 URL

mysql - 校验和问题 : Upgrading from MySQL version 5. 1 到 5.6

java - 我创建了一个表,但在向其中插入值时出错

php - 自动提交动态选择表单

php - jquery ajax 上的 Textarea 没有发送到 mysql,只是输入字段

mysql - VB.NET - MySQL 如何在应用程序强制关闭时终止来自 MySQL 服务器的查询