作为标题,我有一个现有的表已经填充了150000条logging。 我添加了一个Id列(当前为空)。 我假设我可以运行一个查询来填充此列增量数字,然后设置为主键,并打开自动增量。 这是继续进行的正确方法吗? 如果是这样,我该如何填写最初的数字?
在我们团队的一次相当热烈的讨论中,我想到了大多数人喜欢的主键。 我们有以下几组 – Int / BigInt是自动增加的主键。 至less应该有3列组成主键。 Id,GUID和人类可读的行标识符都应该被区别对待。 什么是最好的PK方法? 如果你能certificate你的观点,那将是非常棒的。 上面有没有更好的方法? 编辑:任何人都有一个简单的样本/algorithm来生成可伸缩的行的人类可读标识符?
我正在使用Rails迁移来pipe理数据库模式,并且我正在创build一个简单的表,我希望使用非整数值作为主键(特别是一个string)。 为了从我的问题中抽象出来,我们假设有一个employees表,员工用一个字母数字string标识,例如"134SNW" 。 我已经尝试在这样的迁移中创build表: create_table :employees, {:primary_key => :emp_id} do |t| t.string :emp_id t.string :first_name t.string :last_name end 这给了我什么似乎完全忽略行t.string :emp_id并继续前进,并使其成为一个整数列。 有没有其他的方式来让轨生成PRIMARY_KEY约束(我使用PostgreSQL)为我,而不必在execute调用中写入SQL? 注 :我知道最好不要使用string列作为主键,所以请不要只是说添加一个整数主键的答案。 无论如何,我可以加一个,但这个问题仍然有效。
这是我正在与一个激烈的设置过分简化。 table_1和table_2都有自动递增代理主键作为ID。 info是一个包含关于table_1和table_2信息的表。 table_1 (id, field) table_2 (id, field, field) info ( ???, field) 我试图决定是否应该使信息的主键是来自table_1和table_2的ID的组合。 如果我要这样做,哪个最有意义? (在这个例子中,我将ID 11209与ID 437结合) INT(9) 11209437 (我能想象为什么这是不好的) VARCHAR (10) 11209-437 DECIMAL (10,4) 11209.437 或者是其他东西? 将这个作为MYSQL MYISAM DB的主键就可以吗?
在使用INT和VARCHAR作为MySQL的主键之间是否存在可衡量的性能差异? 我想使用VARCHAR作为引用列表的主键(比如美国,国家代码),同事不会把INT AUTO_INCREMENT作为所有表的主键。 我的论点, 这里详细说明的是,INT和VARCHAR之间的性能差异是可以忽略的,因为每个INT外键引用都需要一个JOIN来表示引用,VARCHAR键将直接显示信息。 那么,有没有人有这个特定用例的经验和与之相关的性能问题?
我有一个主键字段有AUTO_INCREMENT的MySQL表。 在阅读其他文章后,我注意到有同样问题和不同答案的人。 有些人build议不要使用这个function,有些则说不能“固定”。 我有: table: course fields: courseID, courseName 例如:表中logging的数量:18.如果我删除logging16,17和18 – 我期望input的下一个logging具有16的courseID,但是它将是19,因为最后input的courseID是18。 我的SQL知识并不奇妙,但无论如何刷新或更新这个计数与查询(或phpMyAdmin接口中的设置)? 该表格将与数据库中的其他人相关联。 鉴于所有的build议,我决定忽略这个“问题”。 我会简单地删除和添加logging,同时让自动增量做它的工作。 我想这个数字并不重要,因为它只被用作唯一标识符,并没有(如上所述) 业务意义。 对于那些可能与我原来的post混淆的人:我不想用这个字段来知道我有多lesslogging。 我只是希望数据库看起来整洁,并且有更多的一致性。
这里我们再去,旧的观点仍然出现… 我们最好有一个商业密钥作为主键,或者我们宁愿有一个代理ID(即SQL Server身份)在商业密钥字段上的唯一约束? 请提供例子或证据来支持你的理论。
我遇到了我的主键序列不与我的表行同步的问题。 也就是说,当我插入一个新行时,我得到一个重复的键错误,因为序列数据types中隐含的顺序返回一个已经存在的数字。 这似乎是由导入/恢复不正确地维护序列造成的。
我开始用googlesearch,并find了这篇谈论互斥表的文章 。 我有一张约有1400万条logging的表格。 如果我想以相同的格式添加更多的数据,有没有办法确保我想要插入的logging不存在,而不使用一对查询(即,一个查询来检查和一个插入是结果集是空)? 一个字段上的unique约束是否保证insert将失败,如果它已经在那里? 似乎只有一个约束,当我通过php发出插入,剧本呱呱叫。
我有一个在几乎所有表中都使用GUID作为主键的应用程序,并且我读过使用GUID作为主键时存在性能问题。 老实说,我没有看到任何问题,但我即将开始一个新的应用程序,我仍然想要使用GUID作为主键,但我想使用复合主键(GUID和可能是另一个字段。) 我使用的是一个GUID,因为当你有不同的环境,如“生产”,“testing”和“开发”数据库,以及数据库之间的迁移数据,它们很好,易于pipe理。 我将使用entity framework4.3,我想在应用程序代码中分配Guid,然后将其插入到数据库中。 (即我不想让SQL生成Guid)。 创build基于GUID的主键的最佳做法是什么,以避免与此方法相关的假定的性能命中?