根据错误 1364,id 值需要一个默认值?
id value needs a default value according to error 1364?
我想创建两个表。 practice
有一个 AUTO_INCREMENT
附件并且是 PRIMARY KEY
。 continued
具有 ID 实体 continued_id
,它作为引用 practice(user_id)
的 FOREIGN KEY
存在。 Mysql 执行下面的代码直到第 19 行,我收到 1364 错误,指出 continued_id
没有默认值。
我很困惑。我认为 user_id
,auto_increments,它是 PK,其定义值为 1,2,3...我认为 continued_id
等同于 user_id
,因此它的默认值为1?也许我误解了 PK 和 FK 在 sql?
中的实际工作方式
错误:
20:03:02 INSERT INTO continued(hobby) VALUES("Tennis") Error Code: 1364. Field 'continued_id' doesn't have a default value 0.000 sec
CREATE TABLE practice(
user_id INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
user_name VARCHAR(60) NOT NULL,
user_real_name VARCHAR(60) NOT NULL
);
CREATE TABLE continued(
continued_id INT NOT NULL,
FOREIGN KEY(continued_id)REFERENCES practice(user_id),
hobby VARCHAR(25) NOT NULL
);
INSERT INTO practice(user_name,user_real_name)
VALUES("KittenKing","Henry");
INSERT INTO practice(user_name,user_real_name)
VALUES("DogDictator","Mary");
INSERT INTO practice(user_name,user_real_name)
VALUES("HamsterHam","Denver");
INSERT INTO continued(hobby)
VALUES("Tennis");
INSERT INTO continued(hobby)
VALUES("Hockey");
INSERT INTO continued(hobby)
VALUES("Spear Hunting");
SELECT * FROM practice,continued;
你的 table continued
在 table practice
中有外键 continued_id
,所以这个字段是必填的。
INSERT INTO continued(continued_id, hobby)
VALUES(1, "Tennis");
INSERT INTO continued(continued_id, hobby)
VALUES(2, "Hockey");
INSERT INTO continued(continued_id, hobby)
VALUES(3, "Spear Hunting");
您在 continued
中的插入需要链接到 practice
中的条目。您可以通过使用 LAST_INSERT_ID()
for continued_id
:
插入 continued
后立即插入 practice
来实现
INSERT INTO practice (user_name,user_real_name)
VALUES("KittenKing","Henry");
INSERT INTO continued (continued_id, hobby)
VALUES(LAST_INSERT_ID(), 'Tennis')
或使用 INSERT ... SELECT
查询引用 practice
中的相应条目:
INSERT INTO continued (continued_id, hobby)
SELECT user_id, 'Hockey'
FROM practice
WHERE user_real_name = 'Mary'
或
INSERT INTO continued (continued_id, hobby)
SELECT user_id, 'Spear Hunting'
FROM practice
WHERE user_name = 'HamsterHam'
请注意,您 不需要 将 continued_id
声明为 AUTO_INCREMENT
。
continued
的 id
需要是最后插入的 id 用于练习。假设你想每次练习一个爱好,我建议:
INSERT INTO practice (user_name, user_real_name)
VALUES('KittenKing', 'Henry');
INSERT INTO continued (continued_id, hobby)
VALUES(LAST_INSERT_ID(), 'Tennis');
INSERT INTO practice(user_name, user_real_name)
VALUES('DogDictator', 'Mary');
INSERT INTO continued (hobby)
VALUES (LAST_INSERT_ID(), 'Hockey');
INSERT INTO practice(user_name ,user_real_name)
VALUES('HamsterHam', 'Denver');
INSERT INTO continued (continued_id, hobby)
VALUES (LAST_INSERT_ID(), 'Spear Hunting');
我想创建两个表。 practice
有一个 AUTO_INCREMENT
附件并且是 PRIMARY KEY
。 continued
具有 ID 实体 continued_id
,它作为引用 practice(user_id)
的 FOREIGN KEY
存在。 Mysql 执行下面的代码直到第 19 行,我收到 1364 错误,指出 continued_id
没有默认值。
我很困惑。我认为 user_id
,auto_increments,它是 PK,其定义值为 1,2,3...我认为 continued_id
等同于 user_id
,因此它的默认值为1?也许我误解了 PK 和 FK 在 sql?
错误:
20:03:02 INSERT INTO continued(hobby) VALUES("Tennis") Error Code: 1364. Field 'continued_id' doesn't have a default value 0.000 sec
CREATE TABLE practice(
user_id INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
user_name VARCHAR(60) NOT NULL,
user_real_name VARCHAR(60) NOT NULL
);
CREATE TABLE continued(
continued_id INT NOT NULL,
FOREIGN KEY(continued_id)REFERENCES practice(user_id),
hobby VARCHAR(25) NOT NULL
);
INSERT INTO practice(user_name,user_real_name)
VALUES("KittenKing","Henry");
INSERT INTO practice(user_name,user_real_name)
VALUES("DogDictator","Mary");
INSERT INTO practice(user_name,user_real_name)
VALUES("HamsterHam","Denver");
INSERT INTO continued(hobby)
VALUES("Tennis");
INSERT INTO continued(hobby)
VALUES("Hockey");
INSERT INTO continued(hobby)
VALUES("Spear Hunting");
SELECT * FROM practice,continued;
你的 table continued
在 table practice
中有外键 continued_id
,所以这个字段是必填的。
INSERT INTO continued(continued_id, hobby)
VALUES(1, "Tennis");
INSERT INTO continued(continued_id, hobby)
VALUES(2, "Hockey");
INSERT INTO continued(continued_id, hobby)
VALUES(3, "Spear Hunting");
您在 continued
中的插入需要链接到 practice
中的条目。您可以通过使用 LAST_INSERT_ID()
for continued_id
:
continued
后立即插入 practice
来实现
INSERT INTO practice (user_name,user_real_name)
VALUES("KittenKing","Henry");
INSERT INTO continued (continued_id, hobby)
VALUES(LAST_INSERT_ID(), 'Tennis')
或使用 INSERT ... SELECT
查询引用 practice
中的相应条目:
INSERT INTO continued (continued_id, hobby)
SELECT user_id, 'Hockey'
FROM practice
WHERE user_real_name = 'Mary'
或
INSERT INTO continued (continued_id, hobby)
SELECT user_id, 'Spear Hunting'
FROM practice
WHERE user_name = 'HamsterHam'
请注意,您 不需要 将 continued_id
声明为 AUTO_INCREMENT
。
continued
的 id
需要是最后插入的 id 用于练习。假设你想每次练习一个爱好,我建议:
INSERT INTO practice (user_name, user_real_name)
VALUES('KittenKing', 'Henry');
INSERT INTO continued (continued_id, hobby)
VALUES(LAST_INSERT_ID(), 'Tennis');
INSERT INTO practice(user_name, user_real_name)
VALUES('DogDictator', 'Mary');
INSERT INTO continued (hobby)
VALUES (LAST_INSERT_ID(), 'Hockey');
INSERT INTO practice(user_name ,user_real_name)
VALUES('HamsterHam', 'Denver');
INSERT INTO continued (continued_id, hobby)
VALUES (LAST_INSERT_ID(), 'Spear Hunting');