我想知道你是否遇到过这种情况,当你点击phpMyAdmin上的Browse按钮时,自动增量的id号码没有按正确顺序排列- 这只是我吗?我在db表中设置错误的东西?
例如,当您将一系列数据插入到表中并且还删除了其中一些数据时,所以当您在phpMyAdmin上检查此表时,这些数据应该按照这样的顺序出现,
id
2
24
28
296
300
Run Code Online (Sandbox Code Playgroud)
但在我的大多数表格中,它们不会出现在订单中,而是出现在这样的表格中,
id
24
300
2
296
28
Run Code Online (Sandbox Code Playgroud)
如下图所示,

我们可以做些什么来使ID以正确的顺序出现吗?
编辑1:
我想大多数人都误解了我在这里突袭的问题.我的意思是当你点击phpMyAdmin上的Browser按钮列出表中的所有数据时 - 而不是当你使用SQL查询列出输出时order by.
是否有意义?

编辑2:
这是我的表格结构之一 - 它能帮助您查看其中的错误吗?
CREATE TABLE IF NOT EXISTS `root_pages` (
`pg_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`pg_url` varchar(255) DEFAULT NULL,
`pg_title` varchar(255) DEFAULT NULL,
`pg_subtitle` varchar(255) DEFAULT NULL,
`pg_description` text,
`pg_introduction` text,
`pg_content_1` text,
`pg_content_2` text,
`pg_content_3` text,
`pg_content_4` text,
`pg_order` varchar(255) DEFAULT NULL,
`pg_hide` varchar(255) DEFAULT '0',
`pg_highlight` varchar(255) DEFAULT …Run Code Online (Sandbox Code Playgroud) 如何将插入语法与自动递增的mysql列一起使用?
例如:
INSERT INTO table (auto, firstname, lastname) VALUES ('Dan','Davidson')
Run Code Online (Sandbox Code Playgroud)
上面的代码是否可以工作并在自动增加时填写firstname和lastname列?
我有一个现有的表,由于某种原因,设计者决定通过将最后使用的值存储在单独的表中来手动控制主键值(更改表以使用Identity现在不是一个选项).
我现在需要对此表进行大量更新,如下所示:
DECLARE @NeedFieldID int
SET @NeedFieldID = 62034
INSERT INTO T_L_NeedField (NeedID, NeedFieldID, FieldName, Sequence, DisplayAs, FieldPrompt, DataType, ValidOptions, IsRequiredForSale)
(
SELECT
DISTINCT n.NeedID,
@NeedFieldID + 1,
'DetailedOutcome',
999,
'Detailed Outcome',
'Select appropriate reason for a No Sale outcome',
'T',
'Pricing, Appointment Date / Time Not Available, Will Call Back, Declined',
0
FROM T_L_Need n
INNER JOIN T_L_NeedField nf
ON n.NeedID = nf.NeedID
WHERE (n.Need LIKE 'Schedule%' AND n.Disabled = 0)
)
Run Code Online (Sandbox Code Playgroud)
显然'@NeedFieldID + 1'不起作用(只是用它来显示我想做的事).当SQL插入每个不同NeedId的值时,如何增加@NeedFieldID?我正在使用SQL Server 2008.
我一直在通过不同的论坛搜索问题,并尝试了不同的解决方案,但我仍然无法找到任何正确的答案我的问题.
我正在使用hibernate4注释来映射我的实体.一切正常,但在mysql中使用hibernate创建表时,只检测不到自动增量键.
我有以下代码:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(unique = true, nullable = false)
private int responseId;
Run Code Online (Sandbox Code Playgroud)
我也试过了
@Id
@GenericGenerator(name="generator", strategy="increment")
@GeneratedValue(generator="generator")
private int responseId;
Run Code Online (Sandbox Code Playgroud)
使用hibernate它可以正常工作,id会自动分配给row,但在mysql表中它没有AutoIncrement Constraint.我必须手动将字段标记为AI.当我手动插入记录以进行测试或使用表的jdbc语句时,这会成为问题.Plz让我知道我在配置中缺少的是阻止hibernate在各个列上施加AutoIncrement Contraint.
我在C#app中触发了以下SQL I.
一切正常,但ID表不会自动递增.它为第一个条目创建值1,然后由于无法创建unquie ID而不允许其他插入.
这是SQL:
CREATE TABLE of_mapplist_raw (
id integer PRIMARY KEY NOT NULL,
form_name varchar(200) NOT NULL,
form_revi varchar(200) NOT NULL,
source_map varchar(200),
page_num varchar(200) NOT NULL,
fid varchar(200) NOT NULL,
fdesc varchar(200) NOT NULL
)";
Run Code Online (Sandbox Code Playgroud)
我确定这是一个小学生错误.
为了说明我的问题,我将使用作者和书籍的类比.
我有2个表"作者"和"书籍".作者是独一无二的,书籍使用外键约束与特定作者联系在一起.
我想知道是否有可能在"books"表中有一个名为"booknum"的列,它在单个作者的子集中自动递增.因此,如果表格有100行,并且即插入作者的第4本书,则会将4放入"booknum"列.

例如,如果books表有6行:
id | authors_id | booknum | name
1 | 1 | 1 | "hello"
2 | 1 | 2 | "goodbye"
3 | 2 | 1 | "booktitle"
4 | 3 | 1 | "more title"
5 | 1 | 3 | "nametwo"
6 | 2 | 2 | "nameone"
Run Code Online (Sandbox Code Playgroud)
这是可能在mysql中还是我需要去检查最后创建的书籍并在我添加书籍时手动增加?
我有一个表 - 用id它auto_increment和一个email定义为的列UNIQUE.
考虑将auto_increment其设置为1.
在我stored procedure当我INSERT的新行独特的电子邮件ID AUTO_INCREMENT列递增.正确的行为.
现在,当我再次尝试INSERT同一封电子邮件时UNIQUE KEY,违反了.我检查一下并做了一个ROLLBACK.但是auto_increment现在设置为2.为什么?
在第三次尝试中INSERT,这次使用唯一的电子邮件插入行,但id字段值为3.不好.
有没有办法可以将值减少到2.
使用Django和MySQL.我保存模型,没有ID出现.看过PostgreSQL和bigintegerfields的一些类似问题,但这些似乎都不适用于此.有任何想法吗?客户端确实通过MySQL自动增量在数据库的id字段中接收主键.
谢谢!
class Client(models.Model):
id = models.IntegerField(primary_key=True)
first_name = models.TextField(null=True, blank=True)
last_name = models.TextField(blank=True)
>>> client = models.Client(last_name="Last", first_name="First")
>>> client.last_name
'Last'
>>> client.save()
>>> client.id
>>> client.last_name
'Last'
>>> client.id
>>> client.pk
>>>
Run Code Online (Sandbox Code Playgroud)
在数据库中:
id first_name last_name
------------------------------------------
14 First Last
Run Code Online (Sandbox Code Playgroud) 我偶然发现了一个非常奇怪的行为:
想象一下,我们有一个表客户:
MariaDB [connections]> describe customers;
+--------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+----------------+
| customerId | int(11) | NO | PRI | NULL | auto_increment |
| customerName | varchar(50) | NO | | NULL | |
+--------------+-------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
插入几个值:
insert into customers(customerName) values('Foo');
insert into customers(customerName) values('Bar');
Run Code Online (Sandbox Code Playgroud)
然后删除所有内容并重置自动增量:
DELETE FROM customers;
ALTER TABLE customers AUTO_INCREMENT = 0;
Run Code Online (Sandbox Code Playgroud)
现在,使用customerId = 0插入一个新值:
INSERT INTO customers(customerId,customerName) VALUES(0,'Site owner');
Run Code Online (Sandbox Code Playgroud)
并看到结果: …
这可能很棘手.我有一个xlsx文件,其中包含一组具有相似列值的行.问题是客户端没有为我提供另一列的正确值(该列不存在).我需要根据另一列中的值自动增加一个新列.当列的值发生更改时,递增的var需要返回0.
EX:
Current
C1 | C2 |
1 | A |
2 | A |
3 | A |
4 | B |
5 | B |
Desired
C1 | C2 | C3 (NEW)
1 | A | 0
2 | A | 1
3 | A | 2
4 | B | 0
5 | B | 1
Run Code Online (Sandbox Code Playgroud)
是否可以通过SQL执行此操作?有没有更好的方法在Excel或Access中执行此操作?
auto-increment ×10
mysql ×7
sql ×3
sql-server ×2
create-table ×1
database ×1
django ×1
excel ×1
hibernate ×1
insert ×1
mariadb ×1
sql-insert ×1
t-sql ×1