我有这张桌子:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
1. insert into persons values (1, 'John', 'Smith', 'LA', 'LA');
2. insert into persons (p_id, lastname, firstname, address, city) values (2, 'John', 'Smith', 'LV', 'LV');
如何在不指定主键值的情况下将数据插入表中(主键没有“auto_increment”属性)。
我尝试过:
- 插入人物价值观('John','Smith','LA','LA');
- 插入人物值(null,'John','Smith','LA','LA');
- 插入人物价值(汽车,'约翰','史密斯','洛杉矶','洛杉矶');
醇>
但没有运气
答案 0 :(得分:6)
主键不能为空,如果你没有将它们设置为自动增量,那么MySQL如何知道你想要放在表中的内容?您需要指定ID(可能通过选择MAX(P_Id)并向其添加1)或将其设置为自动增量。
虽然简单地添加自动增量字段绝对是最好的方法,但您可以尝试这样的方法:
INSERT INTO Persons (P_Id, FirstName, LastName, Address, City)
VALUES ((SELECT MAX(P_Id) + 1 FROM Persons), 'John', 'Smith', 'LA', 'LA');
这使用了一个subselect,所以如果你使用的是旧版本的MySQL,它可能无效。
答案 1 :(得分:0)
我已经看到这实现为
我看到的另一种方法是从表中获取MAX并将其递增并将其放入新行。
我必须说,这两种方法都会导致错误的数据,导致锁定和阻塞以及降低性能。
在你的情况下,我没有看到除了实际指定PK值之外的其他方法。
答案 2 :(得分:0)
Select p_id+1 From Person OrderBy p_id desc limit 1;
答案 3 :(得分:0)
将行加载到具有自动增量的表中时,您可以指定一个值,前提是该值不小于该键中的最大值。这与UNIQUE键的作用相同,并且会出错,就好像它是重复的一样。否则,它会将新加载的值视为该键的新的最高值。
我很想知道为什么有人会想要在不使用自动增量的情况下使用主键。自动增量是避免在任何表中避免重复数据的最优雅方式。如果其余数据与该表中的另一行相同,则可以识别并修复/删除该数据。与另一行(这是一个唯一的密钥)结合使用时,表变得非常健壮。
ianm