- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景:我有一个名为“联系人”的数据库表。我系统的所有用户在此表中都有其联系人的详细信息,包括名字、姓氏以及名为“UniqueId”的 varchar 字段。系统用户可以在 UniqueId 字段中输入任何内容,只要它与该用户的其他联系人的唯一 ID 不同即可。
目标:我现在需要更改我的代码,以便在用户未提供唯一 ID 的情况下自动生成唯一 ID。这应该很短并且视觉上令人愉悦。理想情况下,它可能只是一个自动递增的数字。但是,AUTO_INCRMENT 适用于整数字段,而不适用于 varchar 字段。
另请注意,每个联系人 UniqueId 需要与该用户的其他联系人不同,但对于整个系统不一定是唯一的。因此,以下 UniqueId 是有效的:
Contact
UserId Firstname Lastname UniqueId
1 Bob Jones 1
1 Harold Smith 2
2 Joe Bloggs 1
问题:那么,我怎样才能实现这一目标呢?是否有一种可靠且干净的方法让数据库为现有 UniqueId varchar 字段中的每个联系人生成唯一的 id(如果可能的话,这是我的偏好)?或者我是否被迫让Java去获取下一个可用的唯一ID,如果是这样,最可靠的方法是什么?或者有其他解决方案吗?
编辑 - 4 月 11 日上午:我们使用 hibernate 来映射我们的字段。我刚刚开始研究这是否可以提供替代解决方案?有意见吗?
编辑 - 4 月 11 日下午:目前有 2 个选项很突出,但似乎都没有我想要的那么理想。
1. 正如 @eis 所建议的,除了当前的 varchar 字段之外,我还可以有一个自动递增字段。然后,当保存联系人时,也可以将 int 保存在 varchar 字段中,或者当检索联系人时,如果 varchar 为空,则可以使用 int。但使用两个字段而不是一个字段感觉很困惑和错误
2.我正在考虑使用 hibernate 生成器,如here所述。但这涉及到在其他地方保存下一个 id 的计数和 Java 代码,并且似乎使过程变得过于复杂。
如果我现有的 uniqueId 字段是一个 int 字段,那么 AUTO_INCRMENT 就可以工作,而且工作得很好。有没有办法让数据库生成这个但将其保存为字符串?
最佳答案
我认为你真正应该做的是放弃当前的“uniqueid”并生成在整个系统中真正唯一的新ID,始终自动生成并且从不由用户提供。您需要执行单独的工作才能迁移到新系统。这是我认为保持理智的唯一方法。如果需要,用户可以提供别名之类的东西,以便在视觉上更令人愉悦。
从好的方面来说,您可以使用自动增量。
<小时/>好吧,如果您确实想要您所要求的内容,那么还有一个额外的选择。您可以有一个用户永远不允许的前缀,例如 §§§§
,并且始终基于该前缀自动生成 id,例如 §§§§1
、 §§§§2
等。如果您不允许最终用户以该前缀开头的任何内容,您就会知道不会发生冲突,并且您可以在需要时一一生成它们。
序列是为其生成数字的理想选择。 MySQL 中没有序列,但您可以模拟它们,例如 like this .
关于java - 自动生成唯一的 varchar 字段 - mySQL、Java、Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15930232/
我在 presto 中有表,名为(“mappings”)的列将键值对作为字符串 从 hello 中选择映射; 例如:{“foo”:“baar”,“foo1”:“bar1”} 我想将“映射”列转换为 M
我总是会在表格的特定列中输入 20 个字符的内容。 我需要此列是唯一的。 如果我将此列设置为 varchar(255) 而不是 varchar(20),SELECT 查询的速度会有任何差异吗? (输入
我在 the Dapper .NET project home page 上发现了以下评论. Dapper supports varchar params, if you are executing
我有以下代码。 Case 语句将列出的数字转换为文本并将其余代码转换为 NULL,但我不断收到以下错误:将 VARCHAR 值“RDG5”转换为数据类型 INT 时转换失败。 RDG5 是被转换为 N
运行此脚本时出现以下错误。我尝试过使用以下内容:整理 Latin1_General_CI_AS。请问可以排序吗?谢谢 Msg 457, Level 16, State 1, Line 8 Implic
是否可以将 SQL Server 2008 数据库中的列类型从 varchar(255) 更改为 varchar(MAX),而无需删除表并重新创建? 每次我尝试使用它来执行此操作时,SQL Serve
每次我对选择 varchar(max) 或 varchar(fix) 数据类型感到困惑。假设我有一个大约 5000 个 varchar 的数据列。列不是 null 类型。 我应该将其设置为 varch
您好,我遇到问题,我的 friend 拒绝更改字段的数据类型,所以我在使用 order by 时遇到问题,这里是示例数据 04-07-2016(mm-dd-yyyy) 和字段名称名为 regis_da
对于文字游戏,我正在尝试向 VARCHAR 数组添加 CHECK 约束: CREATE TABLE words_games ( gid SERIAL PRIMARY KEY,
我有一个 varchar 字段,其内容如下: a,b,c,d e,d,a,c b,q,d,e 我需要执行一个查询,仅选择具有与输入字符串相等的元素的字段的行。 前输入:c,a 选择的行: a,b,c,
大家好,我计划创建包含 10 列的表,该表应该至少有 10,000,000 行,并且在其中,我将有列 description - VARCHAR(600) 和索引。 所以问题是,在该列上查询 LIKE
我读过这个question关于MySQL中VARCHAR(254)和VARCHAR(255)的区别。 HiveQL 中是否有必须考虑的类似内容?也许 HiveQL 实现了一些类似于 MySQL 的存储
在 MySQL 中,VARCHAR(1024) 和 VARCHAR(512) 有什么区别?如果我的项目永远不会超过 512 个字符,那么使用 VARCHAR(1024) 我会失去什么? 最佳答案 不知
由于 Varchar 字段的存储要求基于输入的字符串的实际长度,将每个 Varchar 字段指定为最大可能的缺点是什么:Varchar (65535)?那么,除了最大字段 > 255 个字符的 1 个
我正在尝试搜索具有数据类型 map(varchar,varchar) 的列。现在访问列的一种方法是使用这个结构,name_of_column[' key '],它将给出该键的值。但我想知道什么是可能的
快速提问。如果我将使用十进制字段限制或十六进制(比如 16、32、64 而不是 10、20、50),从存储数据的角度来看是否重要? 我问是因为我想知道这是否与 HDD 上的集群有关? 谢谢! 最佳答案
我发现我可以写 SELECT CAST(Min(mynumber) AS VARCHAR(Max))+'mystring' AS X 作为 SELECT CAST(Min(mynumber) AS V
我必须将字符串“johnmelling”值插入到列为 的表中[用户密码] varbinary NOT NULL。 请有人建议我,插入“johnmelling”的最佳转换是什么? 我尝试插入如下, In
我已经在 MSDN 论坛和此处阅读了此内容,但仍然不清楚。我认为这是正确的: Varchar(max) 将存储为文本数据类型,因此有缺点。假设您的字段可靠地少于 8000 个字符。就像我的数据库表中的
我有一个这样描述的表: mysql> describe easy_table; +---------------------+--------------+------+-----+---------
我是一名优秀的程序员,十分优秀!