当mySQL生成的UUID()不是唯一的时候会发生什么?如果这是针对主要键的列,MySQL错误是否已输出,或者尝试生成另一个UUID,直到找到真正唯一的独特之处? 解决方案 好吧,如果您致电UUID()两次并获得相同的结果,那么最有问题的是"东西被损坏"(TM).据我所知,它应该是唯一的,应该永远是. 将没有可用的"再生"代码:该功能即使在跨计算机之间创建唯一的键,所以它甚至知道它的结果不是唯一的? 来自 http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid uuid被设计为一个在空间上具有全球唯一独特的数字 时间.预计uuid()的两个电话将产生两个不同的电话 值,即使在两台单独的计算机上执行这些调用 没有相互连接的. 也许你是其他意思?例如,如果您使用UUID()生成某种内容应该是唯一的(例如主键或唯一字段等),并且您以前添加了相同的数字(例如
以下是关于 unique-key 的编程技术问答
我正在尝试编写一种方法,该方法将根据唯一但非主要键返回冬眠对象.如果实体已经存在于数据库中,则我要返回它,但是如果不是,我想创建一个新实例并在返回之前保存它. 更新:让我澄清一下,我正在为此写的应用程序基本上是输入文件的批处理处理器.该系统需要逐行读取文件,然后将记录插入数据库.文件格式基本上是我们架构中几个表的不规范视图,因此我要做的就是将父记录插入DB中,以便我可以获得一个新的合成密钥,或者如果已经存在,请选择它.然后,我可以在其他具有外键的表中添加其他关联记录回到该记录. 这变得棘手的原因是,每个文件都需要完全导入或根本不导入,即为给定文件完成的所有插入和更新都应是一个事务的一部分.如果只有一个过程正在进行所有导入,这很容易,但是如果可能的话,我想在多个服务器上分解它.由于这些限制,我需要能够留在一个交易中,但是处理已经存在记录的例外. 父母记录的映射类看起来像: @Entity public class Foo { @Id @Generat
我对一个项目有要求 我需要生成独特的ID. ID必须是上层案例. 我无法检查数据库以查看以前是否已使用ID. 我们希望每个月将数百万记录添加到数据库中. 我在这里尝试了解决方案: php:如何生成随机,独特的字母字符串? 虽然他们一开始似乎有效,但我的测试表明会随着时间的流逝而有重复. 现在,我正在考虑将UNIQID与前缀一起使用.我发现使用UniQID没有前缀的问题是,当同一请求在同一时间同时进入服务器时,将生成重复.我希望使用前缀可以解决这个问题. 我正在考虑使用此功能: private function generate_id() { $alpha_numeric = 'ABCDEFGHIJKLMNPQRSTUVWXYZ0123456789'; $max = strlen($alpha_numeric); $prefix = ''; for ($i = 0; $i
我需要添加一个基于组合和价值的约束检查 我的表结构是 CREATE TABLE IF NOT EXISTS `ContactPhone` ( `ContactPhoneId` int(10) unsigned NOT NULL, `ContactId` int(11) NOT NULL, `PhoneId` smallint(5) unsigned NOT NULL, `Status` tinyint(1) NOT NULL DEFAULT '1' ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1; -- -- Indexes for dumped tables -- -- -- Indexes for table `ContactPhone` -- ALTER TABLE `ContactPhone` ADD PRIMARY KEY (`ContactPhoneId`); -- -- A
哪一个更可靠并且性能更好?设置MySQL唯一键,然后使用插入物忽略或首先检查数据库上是否存在数据并根据结果行动? 如果答案是第二个,是否有任何方法可以进行单个SQL查询而不是两个? 更新:我问,因为我工作的公司中的同事认为,应在应用程序部分中处理此类问题,这是根据他们更可靠的. 解决方案 您的应用程序不会捕获重复. 两个并发调用可以插入相同的数据,因为每个过程都不会看到彼此的,而您的应用程序会检查唯一性.每个过程都认为可以插入. 您可以强制某种序列化,但是您有一个瓶颈和性能限制.而且您 Will 也有其他客户写入数据库,即使它只是一个发行脚本 - 这就是为什么通常有唯一的索引和约束之类的原因.外键,触发器,检查约束,空/NULL/NIOT NULL,数据类型约束都在那里实施数据完整性 也有一些代码猴子以为它们可以做得更好的傲慢. 请参阅programmers.se: 其他解决方案 设置一个唯一的键更好.它将减少您需要进行一次操作的
我正在为我的页面使用angularjs.我想从JSON对象过滤值,以免存在冗余.但是我找不到任何方法可以从Angular NG重复中获取唯一值.无论如何有什么可以吗? 好,以下是有关问题的一些描述.我有这种格式的JSON.这个JSON我正在从服务中获得.因此,我们不能期望重复的数据如何发生. result = [ { _id: "500004", subject: "Complete the task", date: "25 Aug, 2013" }, { _id: "500004", subject: "Complete the task", date: "25 Aug, 2013" }, { _id: "
在尝试添加唯一键时,我在MySQL上有错误.这是我想做的.我有一个名为" unique_id"的列,即varchar(100).表上没有定义索引.我遇到了这个错误: #1062 - Duplicate entry '' for key 'unique_id' 当我尝试添加一个唯一的密钥时.这是我如何在phpmyadmin中进行设置的屏幕截图: 这是由phpmyadmin生成的mySQL查询: ALTER TABLE `wind_archive` ADD `unique_id` VARCHAR( 100 ) NOT NULL FIRST , ADD UNIQUE ( `unique_id` ) 我过去遇到了这个问题,从未解决过,所以我只是从头开始重建桌子.不幸的是,在这种情况下,我无法做到这一点,因为表中已经有很多条目.感谢您的帮助! 解决方案 错误说明了一切: Duplicate entry '' 因此运行以下查询: SELECT
我在SQL Server 2005中使用外键有一个表,我希望该外键是独特的值或无效.我将其设置为唯一键,但是它不允许我在同一张表中有多个null.可以做我想做的吗? 解决方案 这是关于SQL Server唯一约束/索引的长期投诉.最好的解决方案是使用Schemabinding创建视图,然后在该列上放置一个唯一的索引: Create View dbo.MyUniqueColView With SchemaBinding As Select MyColToBeUnique From MyTable Where MyColToBeUnique Is Not Null GO Create Unique Clustered Index IX_MyTable_MyColToBeUnique On MyUniqueColView ( MyColToBeUnique ) 其他解决方案 您无法使用SQL Server 2005中的表级别约束来执行此功能,但是您可以使用定义SELEC
可能的重复: SQL Server中允许多个空值的约束 我的表中有一个列,所有值必须是唯一的,也必须是null. 我尝试在此列为表中添加一个唯一键,但这似乎意味着我只能有1个空值? 如何设置约束,以使所有值都是唯一的,除非它们为null? 解决方案 SQL Server 2008已过滤了允许的索引,但在2005年不可用.在SQL Server 2005中,您可以创建带有定义 的索引视图 CREATE VIEW dbo.Foo WITH SCHEMABINDING AS SELECT bar FROM dbo.baz WHERE bar IS NOT NULL 然后在其上创建一个唯一的聚类索引. CREATE UNIQUE CLUSTERED INDEX ix ON dbo.Foo(bar)
我有一个表(其中包含数据的现有表),该表具有一个列用户名. 我希望这个用户名独特. 因此,我添加了这样的约束: ALTER TABLE Users ADD CONSTRAINT [IX_UniqueUserUserName] UNIQUE NONCLUSTERED ([UserName]) 现在,我不断收到该表中存在重复用户的错误. 但是我已经使用以下查询检查了数据库: SELECT COUNT(UserId) as NumberOfUsers, UserName FROM Users GROUP BY UserName, UserId ORDER BY UserName 这将导致一个用户列表,所有用户都有1个数字求和器.所以那里没有重复. 但是当我检查用户名时,他失败了,我会看到以下结果: beluga béluga 因此,他无法比较" e"和"é"或"è" ...就像他忽略了这些一样,在添加唯一的钥匙违规时,SQL是否不会忽略这些口音. 解决方
我想确保唯一的表格(例如用户名)中有一个列(例如用户名).因此,我为该列创建一个唯一的键,并将其称为IX_USERS_USERNAME. 现在,如果我根据用户的用户名进行大量搜索,我想确保该字段有一个索引. 我需要创建一个单独的索引,还是唯一的密钥也被视为索引,就像主键是群集的唯一键? 吗? 解决方案 唯一密钥:唯一的密钥执行 他们在上面的专栏的独特性 定义.唯一的密钥创建一个 列上的非簇索引. 唯一的密钥仅允许一个空值. Alter表添加唯一约束 到列: Alter表作者添加约束 ix_authors_name unique(name)go 更多信息来自 msdn . P> fwiw-如果您的约束未创建索引,我会避免将其命名IX_,因为通常认为这与一个(ix = index)相关联. 其他解决方案 基本上,在SQL Server中,确实通过唯一索引实现了唯一的约束. 独特的约束和唯一索引之间的差异确实很微妙.如果创建一个唯一的
任何人都可以解释PRIMARY KEY,UNIQUE KEY和KEY的目的,如果将其放在mysql中的单个CREATE TABLE语句中? 中 CREATE TABLE IF NOT EXISTS `tmp` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uid` varchar(255) NOT NULL, `name` varchar(255) NOT NULL, `tag` int(1) NOT NULL DEFAULT '0', `description` varchar(255), PRIMARY KEY (`id`), UNIQUE KEY `uid` (`uid`), KEY `name` (`name`), KEY `tag` (`tag`) ) ENGINE=InnoDB AUTO_INCREMENT=1 ; 如何将此查询转换为MSSQL? 解决方案 键只是一个普通索引.简化的一种方
我的一张桌子具有唯一的键,当我尝试插入重复记录时,它会像预期一样引发异常.但是我需要将唯一的密钥异常与其他区分开,以便我可以自定义错误消息以违反唯一的密钥约束. 我在网上找到的所有解决方案都建议将ex.InnerException铸造为System.Data.SqlClient.SqlException,并检查Number属性等于2601或2627,如下所示: try { _context.SaveChanges(); } catch (Exception ex) { var sqlException = ex.InnerException as System.Data.SqlClient.SqlException; if (sqlException.Number == 2601 || sqlException.Number == 2627) { ErrorMessage = "Cannot insert duplicate
对于一个带有离线存储的项目,我创建了一个具有ID的主键的数据库,也创建了一个唯一的字段. 当我删除条目时,我无法创建一个新的日期. 当我删除该条目时,我该怎么做才能将日期从索引中取出? 这就是我创建表的方式: CREATE TABLE IF NOT EXISTS userdata (id INTEGER PRIMARY KEY ASC, entrydate DATE UNIQUE, strength, comments 我想知道我是否需要添加一些东西来告诉DB服务器,以便我再次免费使用相同的值.也许我需要运行某种更新,其中sqlite更新其内部记录. 解决方案 我认为这里有一些可能性. 您的删除语句位于未承诺的交易中.因此,在您尝试插入之前,实际上并未从表中删除唯一值. 您要删除的值和所插入的新值实际上并不是相同的值.运行选择并确保实际上可以插入的值可用. 您有一个损坏的索引,需要 redindex it .
我使用了使用iPaddress方式的其他人的代码.但是,我想使用一个检查当前用户ID和ID号的代码. $ipaddress = md5($_SERVER['REMOTE_ADDR']); // here I am taking IP as UniqueID but you can have user_id from Database or SESSION /* Database connection settings */ $con = mysqli_connect('localhost','root','','database'); if (mysqli_connect_errno()) { echo "
Connection failed:".mysqli_connect_error()."
\n"; } /* end of the connection */ if (isset($_POST['rate']) && !empty($_POST['r
我已经检查了此错误的原因.因此,我知道我通过尝试将电子邮件varchar(320)设置为唯一键(320 * 3 = 960字节). 但是,我将MySQL用作数据库,我需要将电子邮件值用作应用程序中的唯一键.你能告诉我,我应该改变什么来克服这个问题? 解决方案 在前254个字符上创建一个唯一的索引: create unique index idx_t_email on t(email(254)); 电子邮件应短于254个字符. 根据此答案,无论如何,最长可能的电子邮件是254个字符,因此这应该没关系. 其他解决方案 假设您使用的是MySQL 5.5.14或更新,则可以通过: 解决此问题 启用innodb_large_prefix服务器设置 启用innodb_file_format = BARRACUDA 使用ROW_FORMAT=DYNAMIC或ROW_FORMAT=COMPRESSED 这将允许您在InnoDB索引中包含长达3072个字
我正在尝试创建一个表格,在其中我不得允许行3个字段相同的行. 当我使用sqllite在Python中创建表时,我会使用以下内容,但是我几乎没有得到任何结果.它通常在编写2个记录后停止,因此显然有些人相信其重复. CREATE TABLE CorpWalletJournal ( date INT, refID INT, refTypeID INT, ownerName1 TEXT, ownerID1 INT, ownerName2 TEXT, ownerID2 INT, argName1 TEXT, argID1 ID, amount INT, balance INT, reason TEXT, accountKey INT, UNIQUE (ownerID1, ownerID2, accountKey, argID1) ); 所以,我
我有一个SQLServer 2008表,该表具有一个主键(Isidentity = Yes)和其他三个构成独特密钥约束的字段. 此外,我还有一个商店过程,将记录插入表中,我使用sqlConnection对象通过C#调用Sproc. c#sproc呼叫效果很好,但是当C#Sproc呼叫违反唯一的密钥约束.. 时,我注意到了有趣的结果. 当Sproc Call违反了唯一的密钥约束时,就会抛出SQLEXCEPTION-这并不奇怪和酷.但是,我注意到,成功添加到表的下一个记录的PK值并不比以前的记录高. 例如:假设表有五个记录,其中PK值为1,2,3,4,而5.Sproc尝试插入第六张记录,但违反了唯一的密钥约束,因此,第六记录未插入.然后,Sproc试图插入另一个记录,这次是成功的. - 该新记录的PK值为7而不是6. 这是正常行为吗?如果是这样,您能给我一个原因吗? (如果记录未能插入,为什么PK索引会增加?) 如果这不是正常行为,您能给我任何暗示为什么
非常基本的问题;我是SQL的新手,并试图破译一个示例数据库. 在下面的创建表代码中,为什么在括号中仅定义主键语法引用一次" ID"列,而唯一的密钥定义引用了两次"类别"列?括号之前和内部. 似乎有一个简单的答案,但不能追踪一个: CREATE TABLE `categories` ( `id` SMALLINT NOT NULL AUTO_INCREMENT, `category` VARCHAR(30) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `category` (`category`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 解决方案 它是关键名称,也不是强制性的.请参阅有关它的文档: http://dev.mysql.com/doc/refman/5.1/en/create-table.html .