Excel 文件数据库中的 PRIMARY KEY 约束和 AUTO INCREMENT

Posted

技术标签:

【中文标题】Excel 文件数据库中的 PRIMARY KEY 约束和 AUTO INCREMENT【英文标题】:PRIMARY KEY constraint and AUTO INCREMENT in an Excel file database 【发布时间】:2015-04-28 15:43:35 【问题描述】:

我使用 Excel 文件作为数据库,我想将 ID 列设置为主键,并在数据库中插入新记录时自动增加该列的值。

【问题讨论】:

基本上,Excel NOT 一个数据库并且没有这些概念 - 如果您需要一个数据库 - 使用一个 - 如 SQL Server 或 mysql 或类似的东西。 使用 MS Access 怎么样? 你能提供更多关于你的提议的细节/指示@JoshuaRoss 吗? 就像他们说的那样。但是,您可以通过 =ROW()-1 模拟 PK 自动增量,假设第 1 行是您的标题并且您没有删除行。但说真的,Excel 不是数据库 - 它是一把强大的锤子,但并非所有问题都是钉子 【参考方案1】:

TL:DR;

你不能。 Excel 不是数据库管理系统。

可能的替代方案

您可以使用 MS Access 轻松复制和粘贴到 Excel 或从 Excel 中粘贴,甚至设置计划导入,MS Access 随大多数(如果不是所有)Windows 的 MS Office 版本一起提供。这将为您提供您正在寻找的特定于 DBMS 的功能。

只需在 Access 中创建一个表,保留第一列 ID 原样,然后在其他列中粘贴/导入数据。 ID 列默认已经有PK和自增。


您还可以使用更“完整”的免费 DBMS,例如 MS SQL Server Express、MySQL 或 PostgreSQL。

【讨论】:

【参考方案2】:

以下是使用 Excel 自定义验证创建 PRIMARY KEY 以防止 Excel 单元格中出现重复条目​​的步骤。

1) 选择整个空列(没有输入的列)。

2) 转到数据 >> 数据验证

3) 从允许下拉列表中选择自定义

4) 在公式字段中粘贴=COUNTIF($A:$A,A1)=1

现在,您的列设置了主键,这意味着从 A1 开始到 A 列的整个范围的每个单元格只允许唯一值,如下所示。

所以现在如果你想在那个 excel 单元格中输入两个相同的值,那么你会得到以下错误:-

编辑:- 使用 excel 列的标题来选择行。请参见下图中的红色圆圈,单击此处在 Excel 中选择整列。然后从上述步骤中的第 2 步开始

【讨论】:

尝试您的公式时出现错误,显然语法不正确。 @Piyush 您如何选择在 Excel 中选择列(使用 excel 列的标题来选择行)请参阅编辑。我在新的excel中尝试过它可以工作。我有 Office Professional Plus 2010 版本。并确保您在公式中输入了正确的列名。如果您选择 A 列,则公式为 A。根据您的列名进行更改【参考方案3】:

根据上述 cmets Excel 不是执行此操作的工具,但是,如果您愿意,可以添加一个论坛来执行此操作。 Check this post

【讨论】:

【参考方案4】:

我只能用自动增量来帮助你;)

查看以下 VBScript 代码,只需运行 SELECT 以找出 ID 列的最后一个值,然后运行另一个 SQL 命令以使用 (LastValue+1) 插入新行。

Dim Conn, RS
Set Conn = CreateObject("ADODB.Connection")
Conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""D:/YourFile.xlsx"";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=0;"";" 'Use "IMEX=0" to be able to UPDATE. 
Conn.Open
Set RS = Conn.Execute("SELECT MAX([Id]) AS LastID FROM [Sheet1$A1:E10] ")
Conn.Execute("INSERT INTO [Sheet1$A1:E10] ([Id], [Field1], [FieldN]) VALUES ('" & CStr(Abs(RS("LastID")) + 1) & "', 'Some value', 'Another value')")
RS.Close
Conn.Close
Set RS = Nothing
Set Conn = Nothing

【讨论】:

【参考方案5】:

我想,如果 MS-Excel 可以生成一个随机数并将其固定在一个单元格上,那就太好了。就像,如果我可以将随机数加上 now() 公式的结果作为连接文本,问题就会得到解决。我在 VBA 上看到了一些提示,但并没有真正按照队友的要求。

【讨论】:

以上是关于Excel 文件数据库中的 PRIMARY KEY 约束和 AUTO INCREMENT的主要内容,如果未能解决你的问题,请参考以下文章

Django中的OnetoOne(primary_key = Tue)到ForeignKey

SQLServer之PRIMARY KEY约束

SQL PRIMARY KEY 约束

SQL 服务器查询以获取表中的列列表以及数据类型、NOT NULL 和 PRIMARY KEY 约束

利用python将文本文件导入数据库时,报错:Duplicate entry '...' for key 'PRIMARY'

Oracle之主键(Primary Key)用法详解