- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常长的数据库字段(2083 个字符),因此我无法在 MySQL 中对其设置 UNIQUE 约束。
我尝试修改一个存储过程,以便检查尝试插入的值是否唯一,如果不是,则停止插入。但是存储过程总是出错。我尝试了很多不同的语法。这真的很奇怪,存储过程只适用于 if 语句或插入,但不能同时适用于两者。
非常感谢任何帮助。
BEGIN
SET @insertedid := 0;
SET @alreadyfound := 0;
SELECT COUNT(lref_id) FROM listing_referrers WHERE lref_referring_url=in_lref_referring_url INTO @alreadyfound;
IF (@alreadyfound = 0) THEN
BEGIN
INSERT INTO listing_referrers (lref_listing_id,lref_referring_url,lref_createdby_userid,lref_created) VALUES (in_lref_listing_id, in_lref_referring_url, in_lref_createdby_userid, in_lref_created);
SET @insertedid = last_insert_id();
END
SELECT @insertedid;
END
最佳答案
我不会在这里使用过程,但更喜欢使用触发器 ON INSERT
.您可以在 How to prevent using digits in a VARCHAR column using mysql? 找到我的答案有趣的是,它主要结合了CREATE TRIGGER
的想法带着想法 SIGNAL
荷兰国际集团它的情况下检测到错误情况。
所以,在你的情况下,它可能是这样的
DELIMITER //
CREATE TRIGGER trg_listing_referrers_unit_ins before insert on listing_referrers
for each row
begin
IF EXISTS (SELECT * FROM listing_referrers WHERE lref_referring_url = new.lref_referring_url)
THEN signal sqlstate '45000' set message_text = 'trying to insert duplicate lref_referring_url';
END IF;
END
//
DELIMITER ;
但是请注意,这需要 MySQL 5.5 或更高版本。如果您运行的是较早版本的 MySQL,这可能会变得很丑陋...
注意:取决于您的 table 大小listing_referrers
SELECT
触发器中的语句可能会成为性能消耗者。确保这一点,即使您不能在 lref_referring_url 上定义具有非唯一索引的唯一索引。否则你最终会得到 O(n)
算法而不是 O(log n)
一个,这可能会产生巨大的差异。
除了跟踪整个 VARCHAR 的唯一性之外,您还可以检查真实 key 的散列值的唯一性。例如,您可以添加另一个名为 key_hash
的列输入 CHAR(64) ASCII
到您的表,您将在其上放置一个 UNIQUE KEY 约束(如果需要,您甚至可以将其设为主键)。
插入时,让 MySQL 即时计算它的 SHA2 散列值,例如
INSERT INTO listing_referrers (lref_referring_url, key_hash)
VALUES("http://server.bogus/mylong/url", SHA2("http://server.bogus/mylong/url", 256));
如果您两次输入相同的 URL,其 SHA2 值将相同,因此 key_hash
的 UNIQUE KEY 约束会开始反抗。
由于 collision resistance 的加密验证属性使用此功能,可以确保您几乎不可能找到两个具有相同哈希值的 URL。如果遇到请发到cryptographers community - 他们肯定会非常渴望了解您的情况(以及许多情报部门)。
注意:如果记录的 URL 发生变化(通过 UPDATE
),您始终需要确保 hash_key
也发生变化得到相应更新。否则,你会发疯的。如果这对您来说是一个真实的用例,您可能还想看看 MySQL: Computed Column (我心里不清楚,这是否也适用于主键列)。
如果您能够限制第一个 n
的唯一性字符(带有 n < 255
),那么您可能会找到 Storing email VARCHAR(320) as UNIQUE, #1071 - Specified key was too long; max key length is 767有趣。
如果您可以确保您的 URL 不超过 3072 个字符,请将字符集更改为 ASCII
会将此边界(与 UTF-8 中的 256 个字符相比)增加到 3072。详细信息在 MySQL unique 1500 varchar field error (#1071 - Specified key was too long) 中描述。
关于mysql - 为 MySQL 数据库中的长 varchar 字段强制执行唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37508775/
在有些场景下,我们需要对我们的varchar类型的字段做修改,而修改的结果为两个字段的拼接或者一个字段+字符串的拼接。 如下所示,我们希望将xx_role表中的name修改为name+id。
SELECT incMonth as Month, SUM( IF(item_type IN('typ1', 'typ2') AND incMonth = Month, 1, 0 ) )AS
我最近读到 volatile 字段是线程安全的,因为 When we use volatile keyword with a variable, all the threads read its va
我在一些模型中添加了一个 UUID 字段,然后使用 South 进行了迁移。我创建的任何新对象都正确填充了 UUID 字段。但是,我所有旧数据的 UUID 字段为空。 有没有办法为现有数据填充 UUI
刚刚将我的网站从 mysql_ 更新为 mysqli,并破坏了之前正常运行的查询。 我试图从旋转中提取 id,因为它每次都会增加 1,但我不断获取玩家 id,有人可以告诉我我做错了什么吗?我尝试了将
我在 Mac OS X 上使用带有 Sequel Pro 的 MySQL。我想将一个表中的一个字段(即名为“GAME_DY”的列)复制到另一个名为“DAY_ID”的表的空字段中。两个表都是同一数据库的
问题: 是否有可能有一个字段被 JPA 保留但被序列化跳过? 可以实现相反的效果(JPA 跳过字段而序列化则不会),如果使用此功能,那么相反的操作肯定会很有用。 类似这样的事情: @Entity cl
假设我有一个名为“dp”的表 Year | Month | Payment| Payer_ID | Payment_Recipient | 2008/2009 | July
我将尝试通过我的 Raspberry Pi 接入点保证一些 QoS。 开始之前,我先动手:我阅读了有关 tcp、udp 和 ip header 的内容。在IP header description我看
如果你能弄清楚如何重命名这个问题,我愿意接受建议。 在 Dart 语言中,可以编写一个带有 final 字段的类。这些是只能设置的字段构造函数前 body 跑。这可以在声明中(通常用于类中的静态常量)
你怎么样? 我有两个带有两个字段的日期选择器 我希望当用户选择 (From) 时,第二个字段 (TO) 将是 next day 。比如 booking.com 例如:当用户选择From 01-01-2
我想我已经看到了这个问题的一些答案,这些答案可能与我需要的相差不远,但我对 mysql 的了解还不够确定,所以我会根据我的具体情况提出问题。 我有一个包含多个表的数据库,为此,如果“image”表上的
我在 mySQL 数据库中有 2 个表: customers ============ customer_id (1, 2 ) customer_name (john, mark) orders ==
我正在开发一个员工目标 Web 应用程序。 领导/经理在与团队成员讨论后为他们设定目标。这是一年/半年/季度,具体取决于组织遵循的评估周期。 现在的问题是添加基于时间段的字段或存档上一季度/年度数据的
我正在寻找允许内容编辑器从媒体库中选择多个文件的东西,这些文件将在渲染中列出。他们还需要能够上传文件和搜索。它必须在页面编辑器(版本 8 中称为体验编辑器)中工作。 到目前为止我所考虑的: 一堆文件字
现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。 DF 5),
我想知道是否有一些步骤/解决方案可以处理错误消息并将它们放入 Pentaho 工具中的某个字符串或字段中?例如,如果连接到数据库时发生某些错误,则将该消息从登录到字符串/字段。 最佳答案 我们在作业的
如何制作像短信应用程序一样的“收件人”字段?例如,右侧有一个“+”按钮,当添加某人时,名称将突出显示并可单击,如圆角矩形等。有没有内置的框架? 最佳答案 不,但请参阅 Three20 的 TTMess
是否可以获取记录的元素或字段的列表 通过类型信息类似于类的已发布属性的列表吗? 谢谢 ! 最佳答案 取决于您的delphi版本,如果您使用的是delphi 2010或更高版本,则可以使用“新rtti”
我正在构建一个 SQLite 数据库来保存我的房地产经纪人的列表。我已经能够使用外键来识别每个代理的列表,但我想在每个代理的记录中创建一个列表;从代理商和列表之间的一对一关系转变为一对多关系。 看这里
我是一名优秀的程序员,十分优秀!