代码之家  ›  专栏  ›  技术社区  ›  J D

获取SQL外键时遇到问题,因为它显示错误1364“字段没有默认值”?

  •  -1
  • J D  · 技术社区  · 3 年前

    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中的用户ID填充它,但它不会继续。我想我不需要读数的默认值。用户id。我还检查了使用数据插入appusers,主键userid正确填充fine和autoincrements。我只是在努力让它继续下去。这是我缺少的简单东西,还是设计中的整体缺陷?

    提前谢谢!

    1 回复  |  直到 3 年前
        1
  •  1
  •   Aethereal    3 年前

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

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

    另一种方法是删除创建表时的“NOTNULL”条件,如下所示:

    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)
    

    );