无法获取 SQL 外键,因为它显示错误 1364 "Field doesn't have default value"?

Trouble getting SQL foreign key as it says ERROR 1364 "Field doesn't have default value"?

SQL 的新学生。我知道类似的问题已经在这里被问过多次,但我似乎无法弄清楚问题出在哪里。我正在做一个记录血压的基本项目。我的想法是,以下代码将初始化用户 table(以跟踪谁登录)和读数 table(血压读数)的模式:

CREATE DATABASE IF NOT EXISTS bloodpressure;

USE bloodpressure;

CREATE TABLE IF NOT EXISTS appusers (
    userid INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
    username VARCHAR(25) UNIQUE NOT NULL,
    psword VARCHAR(25) NOT NULL
); 

CREATE TABLE IF NOT EXISTS bpreadings (
    reading INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
    user_id INT NOT NULL,
    sys DECIMAL(3 , 0 ) NOT NULL,
    dia DECIMAL(3 , 0 ) NOT NULL,
    pulse DECIMAL(3 , 0 ) NOT NULL,
    FOREIGN KEY (user_id)
        REFERENCES appusers (userid)
);

我运行遇到的问题是错误代码:

Error Code: 1364. Field 'user_id' doesnt have a default value

这是我之后 运行:

INSERT INTO appusers (username, psword) VALUES ("user1", "pwd1");

哪个 运行 正确然后尝试 运行:

INSERT INTO bpreadings (sys, dia, pulse) VALUES (128, 72, 88);

我最初的想法是使用FK从appusers中的userid填充它,但它没有结转。我认为我不需要 readings.user_id 上的默认值。我还检查了使用数据插入 appusers 和主键 userid 正确填充和自动增量。我只是在努力让它继续下去。是我遗漏了什么简单的东西还是设计中的整体缺陷?

提前致谢!

这是因为您将 user_id 声明为 NOT NULL 属性,这意味着它不能为空,您需要将查询更改为这样的内容:

INSERT INTO bpreadings (user_id, sys, dia, pulse) VALUES (1, 128, 72, 88);

另一种方法是删除 table 创建时的“NOT NULL”条件,它看起来像这样:

CREATE TABLE IF NOT EXISTS bpreadings (
reading INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
user_id INT,
sys DECIMAL(3 , 0 ) NOT NULL,
dia DECIMAL(3 , 0 ) NOT NULL,
pulse DECIMAL(3 , 0 ) NOT NULL,
FOREIGN KEY (user_id)
    REFERENCES appusers (userid));