获取SQL外键时出错,因为它说ERROR 1364";字段不't具有默认值"



SQL新手。我知道类似的问题在这里被问了很多次,但我似乎不知道问题出在哪里。我正在做一个记录血压的基本项目。我的想法是,以下代码将初始化用户表(跟踪登录者(和读数表(血压读数(的模式:

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正确填充fine和autoincrements。我只是在努力让它继续下去。是我遗漏了一些简单的东西,还是设计中的整体缺陷?

提前谢谢!

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

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

另一种选择是删除您的";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));

最新更新