标签: unique-constraint

MySQL UNIQUE 条件约束

我正在尝试为两列(id_1 和 id_2)创建唯一索引约束,条件如下:如果两个不同的行在 id_2 列中具有相同的值,则它们在 id_1 列中的值也必须相同。

是否可以?

谢谢。

mysql unique-constraint

6
推荐指数
1
解决办法
4284
查看次数

独特的索引如何真正起作用并避免碰撞?

假设我有一个集合,我在字段上创建一个唯一索引:

db.users.createIndex({username: 1}, {unique:true})
Run Code Online (Sandbox Code Playgroud)

如果具有相同用户名的两个文档同时插入集合中会发生什么?
数据库如何防止冲突?我的意思是哪一个插入,哪个导致错误?
假设插入实际上是SIMULTANEOUS,数据库无法知道正在插入两个重复项,对吧?
那么,究竟发生了什么?

indexing duplicates unique-constraint mongodb

6
推荐指数
1
解决办法
424
查看次数

如何创建具有唯一组合主键的 Postgres 表?

我在 Postgres 数据库中有两个名为players& 的表matches,如下所示:

CREATE TABLE players (
    name text NOT NULL,
    id serial PRIMARY KEY
);

CREATE TABLE matches (
    winner int REFERENCES players (id),
    loser int REFERENCES players (id),
    -- to prevent rematch btw players
    CONSTRAINT unique_matches
    PRIMARY KEY (winner, loser)
);
Run Code Online (Sandbox Code Playgroud)

如何确保仅将(winner, loser)或的唯一组合(loser, winner)用于matches主键,以便matches表不允许插入:

INSERT INTO matches VALUES (2, 1);
Run Code Online (Sandbox Code Playgroud)

如果它已经有一行包含VALUES (1, 2)像:

 winner | loser
--------+-------
      1 |     2
Run Code Online (Sandbox Code Playgroud)

目标是避免相同玩家之间的比赛进入。

sql postgresql ddl database-design unique-constraint

6
推荐指数
1
解决办法
1345
查看次数

复合唯一约束的性能影响(在很多列上)

假设我有一个表,我不想在其中包含重复的行。

为了避免相等检查,我计划在MOST(如果不是全部)列上创建一个唯一索引。在我的应用程序中,无论是否相等,我都可以疯狂地插入记录。除了一些基本的查询,我对这个表没有任何特殊的性能要求。

我的问题是:

  1. 这是一种不好的做法(仅为这种目的创建唯一索引)吗?
  2. 如果有,会有什么影响?
  3. 备择方案?(我可以手动对它进行散列并将其与散列码放在一起,并在此单列上创建唯一索引。但是我认为这也不是明智之举。)

顺便说一句,如果是与数据库引擎相关的问题,我正在使用 MySQL,尽管我对一般解释感兴趣。

谢谢!

mysql sql database unique-constraint

6
推荐指数
0
解决办法
841
查看次数

当已有重复的旧记录时添加唯一性约束

假设我有一张表:雇主和:雇员。我想添加以下内容:

ALTER TABLE employers ADD UNIQUE (employee_id);
Run Code Online (Sandbox Code Playgroud)

这在开发中运行良好,但由于生产中已经存在重复记录,因此它在生产中不起作用。

有没有办法添加唯一性约束的序列号,即仅对新记录施加唯一性约束?

sql postgresql unique-constraint

6
推荐指数
1
解决办法
2942
查看次数

PostgreSQL:表仅引用复合主键的一部分

我正在使用 Postgres 9.6.2 创建电影和电视节目流媒体服务数据库(用于学校项目)。我遇到以下错误:

没有与引用表“watchedepisodes”的给定键匹配的唯一约束

只要用户观看了至少一集(显示在 WatchedEpisodes 表中),下面的电视收视率表就会接受电视节目并允许用户对其进行评分。由于 WatchedEpisodes 具有用户 id、电视节目 id、季节和剧集的复合主键,因此它不允许我仅从该表中引用仅包含 uid 和 tid 的复合键。

CREATE TABLE WatchedEpisodes (
  uid int unique references Users(uid),
  tid int,
  season int,
  episode int,
  FOREIGN KEY(tid, season, episode) REFERENCES Episodes(tid, season, episode),
  PRIMARY KEY (uid, tid, season, episode)
);

CREATE TABLE TVRatings (
  uid int,
  tid int,
  rating int check (rating > 0 and rating < 6),
  FOREIGN KEY(uid, tid) REFERENCES WatchedEpisodes(uid,tid),
  PRIMARY KEY(uid, tid)
);
Run Code Online (Sandbox Code Playgroud)

想知道是否有办法只引用该组合键的一部分。这些只是我的两个表格,因此如果需要更多信息,我可以添加更多信息。

sql database postgresql unique-constraint composite-primary-key

6
推荐指数
1
解决办法
1859
查看次数

在 Django 中,如何查找违反唯一共同约束的行?

对于以下 API 端点,

import json

from django.contrib.auth.decorators import login_required
from django.http import JsonResponse, HttpResponseBadRequest
from django.views.decorators.http import require_POST

from lucy_web.models import UserApn


@login_required
@require_POST
def save_apn(request, version):
    player_id = json.loads(request.body).get('player_id')
    if player_id:
        UserApn.objects.get_or_create(user=request.user, player_id=player_id)
        return JsonResponse({'status': 'success'})
    else:
        return HttpResponseBadRequest()
Run Code Online (Sandbox Code Playgroud)

这是底层模型:

from django.contrib.auth.models import User
from django.db import models
from .timestamped_model import TimeStampedModel


class UserApn(TimeStampedModel):
    user = models.ForeignKey(User)
    player_id = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

对 的调用get_or_create()引发了一些MultipleObjectsReturned错误。为了解决这个问题,我想对和施加unique_together约束。然而,首先,我必须编写一个数据迁移,以消除违反此唯一共同约束的行。userplayer_id

我如何编写一个选择这些的查询?目前已提出以下建议:

def remove_duplicate_apns(apps, schema_editor):
    UserApn = apps.get_model('lucy_web', 'UserApn')

    previous_user_id …
Run Code Online (Sandbox Code Playgroud)

python database migration django unique-constraint

6
推荐指数
1
解决办法
792
查看次数

h2 数据库唯一索引名称的解决方法

我有一个 java 应用程序,它使用 Liquibase 进行迁移,到目前为止一直使用 MySQL 来运行测试用例。

我想使用 h2 数据库运行测试用例。为此,我对 JDBC 配置进行了必要的更改。但是当我运行时mvn test,出现以下错误:

索引“idx_workflow_id”已存在;SQL语句:

在调试时,我发现两个表具有相同名称的索引:idx_workflow_id,并且 h2 数据库具有数据库中具有唯一索引名称的一些限制。

现在的问题是数据库结构已经存在于 staging 和 prod 中,并且无法更改索引名称。

有什么方法可以运行 h2 数据库的迁移,而不创建索引或忽略它们。或者进行一些配置更改,这将允许数据库中具有相同名称的索引。

配置:

database:
    driverClass: org.h2.Driver
    url: "jdbc:h2:mem:my_db;MODE=MySQL;DATABASE_TO_UPPER=false;IGNORECASE=TRUE;DB_CLOSE_DELAY=-1"
    maxWaitForConnection: 1s
    minSize: ${MIN_DB_CONNECTIONS:-10}
    maxSize: ${MAX_DB_CONNECTIONS:-100}
    defaultTransactionIsolation: READ_COMMITTED
    checkConnectionWhileIdle: false
    checkConnectionOnBorrow: true
    checkConnectionOnConnect: true
    validationQuery: "SELECT 1"
    properties:
      hibernate.dialect: org.hibernate.dialect.H2Dialect
      hibernate.show_sql: false
      hibernate.hbm2ddl.auto: none
      hibernate.session.events.log: false
      hibernate.generate_statistics: true
      org.hibernate.stat: INFO
      charSet: UTF-8
Run Code Online (Sandbox Code Playgroud)

java mysql indexing h2 unique-constraint

6
推荐指数
1
解决办法
1161
查看次数

Postgresql 对 2 列的约束,因此“col_a”不能共享“col_b”的任何值

我正在构建一个包含系统条形码以及自定义条形码选项的数据库。我对custom_barcode和有一个独特的约束system_barcode

\n

我想做的是拥有它,因此如果custom_barcode值为 \xe2\x80\x9c123\xe2\x80\x9d,则其他行都不能具有值为 \xe2\x80\x9c123" 的custom_barcodeOR 。我没有尝试制作一个 2 列唯一约束,其中如果是“123”并且是“456”,则该组合不能再次存在。是否可以实现此目的?我想知道这是否需要通过触发器来实现。system_barcodecustom_barcodesystem_barcode

\n

sql arrays postgresql create-table unique-constraint

6
推荐指数
1
解决办法
763
查看次数

EF Core - 使用值对象和父类型创建复合唯一索引

我有一个带有ExternalSystemName 值对象和另一个实体的部署父类型的实体。该模型的重要部分如下所示:

public sealed class ExternalSystem : Entity
{
    public ExternalSystemName Name { get; private set; }

    public Deployment Deployment { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

该实体的唯一性由部署 ID(存储在部署实体类中)和名称(ExternalSystemName 值对象的值)的组合确定。换句话说,一个部署不能有 2 个同名的外部系统。

我在尝试使用 IEntityTypeConfiguration 实现设置此组合唯一索引时遇到问题:

internal sealed class ExternalSystemsConfiguration : 
IEntityTypeConfiguration<ExternalSystem>
{
    public void Configure(EntityTypeBuilder<ExternalSystem> builder)
    {
        builder.ToTable("TblExternalSystems");

        builder.OwnsOne(e => e.Name, navigationBuilder =>
        {
            navigationBuilder.Property(e => e.Value)
            .HasColumnName("Name");
        });

        builder.HasIndex(e => new { e.Name, e.Deployment }).IsUnique();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在运行 API 时遇到此异常:

System.InvalidOperationException: ''Name' cannot be used as a property on entity …
Run Code Online (Sandbox Code Playgroud)

c# unique-constraint value-objects entity-framework-core

6
推荐指数
1
解决办法
1598
查看次数