【问题标题】:Problem with inserting data to 'datacharmer/test_db' database将数据插入“datacharmer/test_db”数据库时出现问题
【发布时间】:2020-12-25 05:13:06
【问题描述】:

问题

我目前正在尝试将新员工插入到具有相同名称的测试数据库的employees 表中。 如果我尝试添加指定 emp_no 的新员工,则成功完成:

insert into employees.employees(
    emp_no, 
    birth_date, 
    first_name, 
    last_name, 
    gender, 
    hire_date
) 
values(
    500500, 
    date('1970-05-12'), 
    'John', 
    'Smith', 
    'M', 
    date('1991-10-08')
);

但是当我尝试删除emp_no 时,它不会被数据库增加。 我正在寻找一种使数据库增加 emp_no 本身的方法,但我自己无法找到它。

数据库

Here 是标题数据库本身的链接以供参考。

到目前为止我尝试了什么

我尝试了如下原生查询:

insert into employees.employees(
    birth_date, 
    first_name, 
    last_name, 
    gender, 
    hire_date
) 
values(
    date('1970-05-12'), 
    'John', 
    'Smith', 
    'M', 
    date('1991-10-08')
);

但我收到以下错误:

Error Code: 1364. Field 'emp_no' doesn't have a default value

所以根据hereherehere 的解决方案,我尝试启用自动递增emp_no

ALTER TABLE employees.employees MODIFY emp_no int NOT NULL AUTO_INCREMENT;

但这又给了我一个错误

Error Code: 1833. Cannot change column 'emp_no': used in a foreign key constraint 'dept_emp_ibfk_1' of table 'employees.dept_emp'

我什至不知道这是否是导致问题的原因,也不知道我是否应该继续这样做。也许问题本身存在于其他地方?如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 最简单的解决方案是在INSERT-statement 中添加emp_no 的值。
  • 我意识到我问错了问题 - 它现在正在更新。

标签: mysql database-design


【解决方案1】:

这里是来自 Github 链接的 empoyees 表的 DDL,其中 AUTO_INCREMENT 属性添加到 emp_no 列:

CREATE TABLE employees (
    emp_no      INT             NOT NULL AUTO_INCREMENT,
    birth_date  DATE            NOT NULL,
    first_name  VARCHAR(14)     NOT NULL,
    last_name   VARCHAR(16)     NOT NULL,
    gender      ENUM ('M','F')  NOT NULL,    
    hire_date   DATE            NOT NULL,
    PRIMARY KEY (emp_no)
);

发布的原始代码现在应该可以工作了(没有 emp_no)。日期和字符串周围的双引号仍然需要。

insert into employees.employees(
    birth_date, 
    first_name, 
    last_name, 
    gender, 
    hire_date
) 
values(
    date('1970-05-12'), 
    'John', 
    'Smith', 
    'M', 
    date('1991-10-08')
);

【讨论】:

  • 我刚刚意识到我问错了问题(编辑传入) - 我正在寻找一种方法让数据库增加 emp_no 本身,但我自己无法找到它.如果您对解决方案有任何想法,请分享:)
  • 我更新了将 Identity 属性添加到主键并仍然修复引号 :)
  • 我会试试看,几分钟后告诉你
  • ERROR 1064 (42000) at line 41: 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,在第 2 行的“IDENTITY(1,1) NOT NULL,birth_date DATE NOT NULL,first_name”附近使用正确的语法
  • mysql的版本是5.7.31
猜你喜欢
  • 1970-01-01
  • 2011-01-21
  • 2021-07-01
  • 1970-01-01
  • 2019-03-08
  • 2013-08-27
  • 2020-11-01
  • 1970-01-01
  • 2017-08-23
相关资源
最近更新 更多