GVKun编程网logo

SQL:当列为特定值时的唯一约束(sql中为特定值显示)

10

本文的目的是介绍SQL:当列为特定值时的唯一约束的详细情况,特别关注sql中为特定值显示的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解SQL:当列为特定值时的唯一约

本文的目的是介绍SQL:当列为特定值时的唯一约束的详细情况,特别关注sql中为特定值显示的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解SQL:当列为特定值时的唯一约束的机会,同时也不会遗漏关于db2唯一索引与唯一约束,重复删除唯一约束存储过程、forms – 重复值的唯一约束、JPA中的唯一约束检查、mysql 分区表如何实现对单列的唯一约束?的知识。

本文目录一览:

SQL:当列为特定值时的唯一约束(sql中为特定值显示)

SQL:当列为特定值时的唯一约束(sql中为特定值显示)

CREATE TABLE foo (
   dt     AS DATE NOT NULL,type   AS TEXT NOT NULL,CONSTRAINT unique_dt_type UNIQUE(dt,type) -- check constraint(?)
)

当只有一个特定的条件存在时,尝试思考正确的语法来创建一个唯一的约束时,有一个脑袋.

给定,类型可以具有值A-F,每个日期只能有一个A,但可以有多个B-F.好表示例:

2010-01-02 | 'A'  -- only one
2010-01-02 | 'B'  -- can have multiple
2010-01-02 | 'B'
2010-01-02 | 'B'
2010-01-02 | 'C'  -- can have multiple
2013-01-02 | 'A'  -- only one
2010-01-02 | 'B'  -- can have multiple
2010-01-02 | 'B'
2013-01-02 | 'F'  -- can have multiple
2013-01-02 | 'F'

尝试阅读检查/唯一的语法,但没有任何例子. CHECK接近,但仅限于一个范围,并未与UNIQUE情景一起使用.也尝试搜索,但是我的搜索技能要么不符合标准,要么没有任何类似的问题.

解决方法

Postgresql可以通过它的“部分索引”功能来满足您的需求.实际上,这是通过在创建索引语句中添加一个where子句来实现的.

样品:

CREATE INDEX my_partial_ix ON my_sample_table (my_sample_field)
WHERE NOT (my_sample_field = 'duplicates ok');

看看这里:
http://www.postgresql.org/docs/current/interactive/indexes-partial.html

请特别注意示例11-3.建立部分独特指数.它给出了一个与您明确目标一致的例子.

db2唯一索引与唯一约束,重复删除唯一约束存储过程

db2唯一索引与唯一约束,重复删除唯一约束存储过程

db2唯一索引与唯一约束,重复删除唯一约束存储过程

今天写可重复执行的脚本时,发现没有重复删除约束的存储过程,写此纪录。

--先创建唯一约束会自动创建唯一索引且两者名字相同,若该字段上已有索引,再次创建索引的语句无效,此时第二句话无效。--先创建唯一索引不会创建唯一约束,在执行创建唯一约束,此时两者名字不同ALTER TABLE USER_TEST ADD CONSTRAINT CONS_ID UNIQUE(ID);CREATE UNIQUE INDEX INDEX_ID ON USER_TEST(ID);--删除唯一约束时,会将该约束带来的索引一并删除。--如果先创建的索引,必须先删除约束才能删除索引。ALTER TABLE USER_TEST DROP CONSTRAINT CONS_ID;DROP INDEX INDEX_ID;--创建删除索引存储过程--1.变量名称不可以与表中字段名称一样,若一样不执行where语句,万一是delete或者update可就惨喽。--2.拼接sql语句时,记得关键字前后的空格,不然与表名连接在一起报语法错误。CR.........

forms – 重复值的唯一约束

forms – 重复值的唯一约束

我在 play! 2.0.4尝试 define a form具有以下属性和约束:

>表单处理重复值(可以方便地假设这些值的类型为数字).所以这将使我们得到这样的东西:

"numbers" -> list(number)

>每个数字必须是唯一的,即它对于提交的所有其他数字必须是唯一的,并且它必须对数据库中已存在的数字是唯一的(这可以通过某些函数检查(num:Int)来检查:布尔).
>表单错误应该特定于数字,这不是唯一的.我不希望一般表单错误说“有重复的数字”.

什么是最好的方式去?

解决方法

这里的技巧是定义类似于此 example的自定义约束类型.然后可以在Mapping [T]上使用自定义约束来使用验证方法验证表单中的字段.

自定义约束包含返回ValidationResult的逻辑,该ValidationResult是Valid或Invalid.可以将错误消息传递给无效结果,您可以在该结果中指定数据库中重复或存在的内容.

有关自定义验证的部分,请参见Play for Scala.

– 创建约束

//Make this lazy to prevent java.lang.ExceptionInInitializerError at runtime.
  lazy val uniqueNumbersConstraint = Constraint[String](Some("Unique numbers constraint"),"")(checkNumbers)

  //"Business Logic". 
  //Important part here is that the function returns a ValidationResult and complies with the signature for Constraint. i.e. f: (T) => ValidationResult
  //Return Valid if n in numbers is not in database and there are no duplicates.   
  //Otherwise return Invalid and an error message showing what numbers are in the database or duplicated. 
  def checkNumbers(numbers: String):ValidationResult  = {
    val splitNums = numbers.split(" ").toList.map(_.toInt)
    val dbnums  = splitNums.partition(database.contains(_))
    if(dbnums._1.isEmpty && uniquesAndDuplicates(splitNums)._2.isEmpty){
      Valid
    }else{
      val duplicates = uniquesAndDuplicates(dbnums._2)._2
      val error = "Database contains: " + dbnums._1 + ",duplicated values: " + duplicates
      Invalid(error)
    }
  }

– 使用自定义约束验证表单

val helloForm = Form(
    tuple(
      "numbers" -> nonEmptyText.verifying(uniqueNumbersConstraint)
    ))

– 公用事业

//Return unique values on left side and duplicate values on right side
  def uniquesAndDuplicates(numbers: List[Int]):Tuple2[List[Int],List[Int]] = {
    numbers.partition(i => numbers.indexOf (i) == numbers.lastIndexOf(i))
  }

  def checkNum(num: Int) = {
    database.contains(num) 
  }

  val database = List(5,6,7)

– 等等

注意我在表单中将数字定义为字符串.当我将其定义为列表(数字)时,它会继续评估List().我认为这是一个具有约束力的问题.如果使用list(number)工作,使用List(1,2,3)而不是“1 2 3”是一个相当简单的更改.

– 样品

JPA中的唯一约束检查

JPA中的唯一约束检查

我正在JPA中对userid列强制执行唯一性约束检查,这是对user表中的所有记录强制执行的。

@Table(name = "user",       uniqueConstraints = @UniqueConstraint(columnNames = userid))

我的要求是,特定组织内的用户ID必须唯一,而不是在所有组织中都唯一。

如何执行此类检查?

答案1

小编典典

您可以为唯一约束指定多个字段,请尝试:

 uniqueConstraints={@UniqueConstraint(columnNames={"userid", "organizationid"})}

通过这样做,您的约束条件将检查userid和Organizationid的组合是否唯一。

最好的祝福,费边

mysql 分区表如何实现对单列的唯一约束?

mysql 分区表如何实现对单列的唯一约束?

如下 `id`,`username` 两列组合成唯一约束是可以分区,但怎么实现对 username 字段的唯一约束?

CREATE TABLE `user_tmp` (
	  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ''id'',
	  `username` char(20) NOT NULL DEFAULT '''' COMMENT ''用户名'',
	  `password` char(32) NOT NULL DEFAULT '''' COMMENT ''密码'',
	  PRIMARY KEY (`id`),
	  UNIQUE KEY `username` (`id`,`username`)
	) PARTITION BY RANGE (id)
		(
		  PARTITION p1 VALUES LESS THAN (1000),
		  PARTITION p2 VALUES LESS THAN (2000),
		  PARTITION p3 VALUES LESS THAN (3000)
		  );




我们今天的关于SQL:当列为特定值时的唯一约束sql中为特定值显示的分享就到这里,谢谢您的阅读,如果想了解更多关于db2唯一索引与唯一约束,重复删除唯一约束存储过程、forms – 重复值的唯一约束、JPA中的唯一约束检查、mysql 分区表如何实现对单列的唯一约束?的相关信息,可以在本站进行搜索。

本文标签: