我有一个带有“Id”列的 DataTable,它是 SQL Server 2005 数据库中的标识列。该列的 AutoIncrement 属性设置为 true。我不会用数据库中的数据填充表,因为我仅将其用于插入,因此它会从 1 开始分配虚假 ID。
但是在我调用 tableAdapter.Update() 后,我希望在该列中包含数据库分配的 REAL Ids 。
由于某种原因,只有第一行得到更新,其余的都没有更新。该表使用级联 DataRelation(分层结构)引用自身,并且对第一行的引用也会更新。
请告诉我如何使所有 Id 相应更新。
提前致谢!
插入语句:
INSERT INTO Components (ComponentId, OrderNo, SerialNo)
VALUES (@ComponentId, @OrderNo, @SerialNo)
Run Code Online (Sandbox Code Playgroud)
这里是组件表的架构:
Id BIGINT PK,
ComponentId BIGINT FK,
OrderNo int,
SerialNo int
Run Code Online (Sandbox Code Playgroud)
请注意,Id 列的名称是“Id”,“ComponentId”是 FK 引用列。
我现在正在处理的数据库有数十万条记录的添加和删除,因此,自动递增的关键数十万个大数字和自动递增的数字远达数十亿之间存在差距。
这些数字永远不会被存储来引用单个记录,而是在进行即时计算时用于引用记录。
是否有任何理由删除这些间隙并重置自动增量数字,或者这是无关紧要的?
id 字段是一个 unsigned int,我应该将其增加到一个 unsigned big int 吗?据我了解,现在如果达到 4,294,967,295 就会崩溃。
表上是否可以有一个 char 主键?例如“WC001”将自动加1,因此pk的下一条记录将是“WC002”,依此类推。
谁能给我举个例子吗?
谢谢
我有一个包含 1 列的表,用于存储 ID auto_increment 和该指令:
$query = "SELECT first_data, second_data, third_data
FROM table_data
WHERE condition = 'value_condition'";
$result = mysql_query($query) or die(mysql_error());
$no_of_rows = mysql_num_rows($result);
if ($no_of_rows > 0) {
while($row = mysql_fetch_assoc($result)) {
$valueone = $row['first_data'];
$valuetwo = $row['second_data'];
$valuethree = $row['third_data'];
$queryTwo = "INSERT INTO historial_ventas (reg1, reg2, reg3)
VALUES('$ivalueone','$valuetwo','$valuethree')";
$resultTwol = mysql_query($queryTwo) or die(mysql_error());
}
} else {
return false;
}
Run Code Online (Sandbox Code Playgroud)
信息存储如下:
ID(auto_increment) reg1 reg2 reg3
______________________________________________
1 value1 value2 value3
2 value1 value2 value3
3 …Run Code Online (Sandbox Code Playgroud) 我正在编写一个 Web 应用程序,它将向 MySQL 数据库表中插入新记录。大多数信息都是用户提供的,除了主键,我想使用 Auto_Increment 获取主键。当我从 Web 应用程序运行以下查询时:
SELECT Auto_Increment FROM information_schema.tables WHERE table_name='charlist';
Run Code Online (Sandbox Code Playgroud)
它不返回任何内容 - 我通过将查询结果存储在变量中然后echo对该变量进行检查,但没有输出任何内容。我还使用 MySQL 控制台运行此查询,它返回以下内容:
+----------------+
| Auto_Increment |
+----------------+
| NULL |
+----------------+
Run Code Online (Sandbox Code Playgroud)
我的表肯定有主键字段,并且有5条记录,主键字段被填充。这是表的结构。
+----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| bookIntroduced | int(11) | YES | | NULL | |
| pageIntroduced | int(11) | YES | | NULL | …Run Code Online (Sandbox Code Playgroud) 我在 mysql 数据库中有一个表,其中每一行都有一个自动递增的 id 列。id 值从 1 开始,到 639 结束。
我需要做的是更改每行的 id 列,以便计数不是从 1 开始,而是从 1924 开始。
我试过这个:
ALTER TABLE tablename AUTO_INCREMENT=1924;
Run Code Online (Sandbox Code Playgroud)
但这似乎并没有达到我的需要,它只会重置未来的计数,以便任何未来添加的行都从 1924 开始计数。
我需要更改现有行的现有ID 值。
我怎么做?
我有一个 postgresql 数据库,在迁移到新版本并导入旧数据后,我的主键出现了问题:
\n\norg.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint \n"browser_link_pkey" Detail: Key (id)=(173) already exists.\nRun Code Online (Sandbox Code Playgroud)\n\n所以我想重置我的序列,但运行:
\n\nselect nextval(\'browser_link_id_seq\')\nRun Code Online (Sandbox Code Playgroud)\n\n也失败:
\n\ncolumn \xe2\x80\x9ebrowser_link_id_seq\xe2\x80\x9c does not exist\nSQL Status:42703\nRun Code Online (Sandbox Code Playgroud)\n\n这是建表的SQL
\n\nCREATE TABLE browser_link (\n id bigint NOT NULL,\n....\n);\nALTER TABLE ONLY browser_link\nADD CONSTRAINT browser_link_pkey PRIMARY KEY (id);\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试选择串行序列,但似乎不存在:
\n\npostgres=# \\connect historify\nYou are now connected to database "historify" as user "postgres".\nhistorify=# select pg_get_serial_sequence(\'browser_link\', \'id\');\n pg_get_serial_sequence\n------------------------\n\n(1 row)\nRun Code Online (Sandbox Code Playgroud)\n\n我正在使用 postgresql 9.5.3。另外,在发生错误之前,id 列确实按预期增加,因此它确实可以工作。
\n\n现在我的两个问题:
\n\n需要帮助如何解决这个问题...我创建了一个用户表,其中包含以下列
Create table users
(
uid int(10) PRIMARY KEY AUTO_INCREMENT,
uname varchar(50),
password varchar(50),
email varchar(50)
);
Run Code Online (Sandbox Code Playgroud)
当我插入值时uid它执行成功:
Insert into users values(1,'ABC','Helloworld','ABC@gmail.com');
Run Code Online (Sandbox Code Playgroud)
但是当我尝试没有 uid
Insert into users values('SDC','Helloworld','SDC@gmail.com');
Run Code Online (Sandbox Code Playgroud)
它没有成功执行并给出错误
ERROR 1136 (21S01): Column count doesn't match value count at row 1
Run Code Online (Sandbox Code Playgroud)
我uid有AUTO_INCREMENT所以它应该自动增加..
我正在尝试在 Django 中构建一个包含公司和项目的应用程序的数据库。每个公司可以有多个项目,每个项目只能属于一个公司。
class Company(models.Model):
name = models.CharField(max_length=20)
class Project(models.Model):
company = models.ForeignKey(Company, on_delete=models.CASCADE)
project_id = models.PositiveIntegerField()
name = models.CharField(max_length=20)
Run Code Online (Sandbox Code Playgroud)
我希望模型项目中有一个字段或属性,其作用类似于公司内项目的自动增量整数。行为应该如下所示:
c1 = Company(name="C1")
c2 = Company(name="C2")
px = Project(company=c1, name="X")
py = Project(company=c2, name="Y")
pz = Project(company=c1, name="Z")
px.project_id
1
py.project_id
1
pz.project_id
2
Run Code Online (Sandbox Code Playgroud)
正确的做法是什么?
在我的应用程序中,大多数 ID(user_id、classroom_id、post_id、assessment_id 等)都是公开可用的,这意味着它们要么位于 URL 中,要么位于目录名称中。出于安全原因,我\xe2\x80\x98d 希望每个表都有 10 个字符的随机 ID,而不是自动递增的 ID。
\n\n我可以使用时间戳,但这并不是\xe2\x80\x98t 真正唯一的,并且添加随机数后,它会变得更长(例如,我必须添加 4 个随机数来处理每秒最多 10.000 个数据库插入到表中的操作。 ..纯粹是假设它是不可扩展的)。
\n\n现在我\xe2\x80\x99d更喜欢创建一个10个字符的随机ID,这会给我100亿种可能的ID组合。所以生成重复的机会很小,长度也可以接受。
\n\nuse Keygen;\n\n$id = Keygen::numeric(10)->generate();\nRun Code Online (Sandbox Code Playgroud)\n\n你觉得我的想法有道理吗?有谁知道使用 10 个字符的主 ID 是否会对我的数据库性能产生负面影响?谢谢!
\nauto-increment ×10
mysql ×5
php ×2
primary-key ×2
sql ×2
ado.net ×1
alter-table ×1
c# ×1
char ×1
database ×1
datatable ×1
django ×1
insert ×1
laravel ×1
model ×1
phpmyadmin ×1
postgresql ×1
sequence ×1
sql-server ×1