为什么数据库中需要UNIQUE约束?
你能提供任何例子吗?
默认情况下,主键是UNIQUE ...可以理解,因为它们在其他表中被称为外键...需要关联它们来连接rdbms平台...
但是为什么将其他列称为UNIQUE,这样做有什么好处?)
所以昨天我问了这个问题,但目标职位已经改变,问题不同了:
我想知道是否可以创建将模拟我所需关系的实体,以便Hibernate在我启动应用程序时创建我的模式.
我想要的关系看起来像这样:
问题是Join表实际上可以包含不链接到任何Elements的行.该结构表示基于"类型"和"值"对的元素分类,并输入到该特定应用之外的系统中.
我希望能够做的是通过映射将我的元素Hibernate实体设置为包含类别列表,这样我就可以实际看到我的元素所属的类别,以便hibernate为我创建表格.
这是我到目前为止所做的:在我的Element Entity类中映射这样:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "ELEMENT_ELEMENTCATOGORY", joinColumns = {
@JoinColumn(name = "type", referencedColumnName = "type"),
@JoinColumn(name = "value", referencedColumnName = "value") })
@Column(name = "category")
public List<ElementCategory> getCategories() {
return categories;
}
Run Code Online (Sandbox Code Playgroud)
这完成了我想要的大部分内容,它创建了我的表格,如上所述,我想要的只是一个东西,在(类型,值)对的元素表中添加了一个唯一约束.我不希望这样,因为多个元素可以具有相同的类型和值对,我需要能够从开始创建中停止Unique Constraint,但是无法弄清楚当前映射的方式,我可以这样做吗?我错过了多对多关系的观点吗?
我有两个表table1,table2每个表都有一个列email与不同的其他列一起命名.我想要的是一个验证器,它在email两个列的字段中查找唯一性.我找到了一个检查多个SAME表列的扩展.如何扩展它以使其适用于多个列?
有没有办法在MySQL数据库中的表之间创建唯一索引?
我的意思是独一无二的
table A ids=1,2,5,7...
table B ids=3,4,6,8...
Run Code Online (Sandbox Code Playgroud) 我正在使用Jersey和jOOQ实现REST API.
我有一个带有一些约束的表,例如一个唯一的键.当插入违反此约束的元组时,jOOQ会抛出DataAccessException:
org.jooq.exception.DataAccessException: SQL [insert into ...]; ERROR: duplicate key value violates unique constraint "issue_name_key"
Run Code Online (Sandbox Code Playgroud)
有没有办法找出违反了哪个约束,没有字符串解析错误消息?如果违反了约束,我想返回一个400 bad requesthttp状态代码而不是一个500 general error.
如果这是不可能的,这里的常见做法是什么?我是否应该查询数据库中每个可能的约束违规?这闻起来像一个维护陷阱.
使用MS SQL Server,以下工作正常:
CREATE TABLE #temptable(mykey int primary key)
INSERT INTO #temptable VALUES (1)
INSERT INTO #temptable VALUES (2)
UPDATE #temptable SET mykey=mykey+1
Run Code Online (Sandbox Code Playgroud)
但是,使用PostgreSQL,以下操作失败:
CREATE TABLE pg_temp.tbl_test(testkey integer primary key)
INSERT INTO pg_temp.tbl_test VALUES (1)
INSERT INTO pg_temp.tbl_test VALUES (2)
UPDATE pg_temp.tbl_test SET testkey=testkey+1
Run Code Online (Sandbox Code Playgroud)
错误:重复键值违反唯一约束"tbl_test_pkey"DETAIL:键(testkey)=(2)已存在.
我需要在一个表中递增一列的每个值,这是复合唯一约束的一部分.我怎么能在一个声明中这样做?
谢谢 !
编辑:如果你想知道为什么这有意义(至少对我来说),这是一个更完整的场景.
我有一个按类别组织的项目表.每个项目在该类别中都有一个特定的位置.
category_id (PK) | category_position (PK) | item_attribute_1 | item_attribute_2
1 | 1 | foo | bar
1 | 2 | foo2 | bar2
2 | 1 | foo4 | bar4 …Run Code Online (Sandbox Code Playgroud) 我使用下面的代码将值插入MySQL表,我需要阻止用户多次插入相同的priority值studentname.请问最好的方法是什么?
这是表:
id studentname title academicdiscipline priority
012345678 TEST, NAME Test title 1 Civil 1
012345678 TEST, NAME Test title 2 Civil 2
012345678 TEST, NAME Test title 3 Civil 3
012345678 TEST, NAME Test title 4 Civil 4
012345678 TEST, NAME Test title 5 Civil 5
Run Code Online (Sandbox Code Playgroud)
码:
if(isset($_POST['submit']) && !empty($_POST['submit'])) {
$ids = $_POST['id'];
$names = $_POST['studentname'];
$titles = $_POST['title'];
$disciplines = $_POST['academicdiscipline'];
$priorities = $_POST['priority'];
foreach($priorities as $key => $priority) {
if ($priority > …Run Code Online (Sandbox Code Playgroud) 在Hibernate 5.1.0/JPA 2.1中,有没有办法基于唯一键而不是基于主键进行合并?
我有一个唯一键的值作为外部系统的输入,但输入显然不包含我的内部主键.
我希望能够调用EntityManager#merge(entity),如果主键entity不为null,则让Hibernate/JPA使用主键进行合并,但是,如果主键为null,则使用唯一键进行合并(即, primary为null,如果唯一键对应于数据库中的行,则该行将被更新,但如果数据库中没有与唯一键对应的行,则将插入新行).
我有一列sort_order具有唯一约束的列。以下SQL在Postgres 9.5上失败:
UPDATE test
SET sort_order = sort_order + 1;
-- [23505] ERROR: duplicate key value violates unique constraint "test_sort_order_key"
-- Detail: Key (sort_order)=(2) already exists.
Run Code Online (Sandbox Code Playgroud)
显然,如果sort_order值在更新之前是唯一的,则在更新之后它们仍将是唯一的。为什么是这样?
相同的语句在Oracle和MS SQL上工作正常,但在MySQL和SQLite上失败。
这是SQL小提琴的完整设置代码:
DROP TABLE IF EXISTS test;
CREATE TABLE test (
val TEXT,
sort_order INTEGER NOT NULL UNIQUE
);
INSERT INTO test
VALUES ('A', 1), ('B', 2);
Run Code Online (Sandbox Code Playgroud) 我有这张桌子:
create table expert_country (
expert_id varchar(36) not null,
country_id varchar(36) not null,
main boolean not null default false,
primary key (expert_id, country_id),
constraint foreign key (expert_id) references expert (id),
constraint foreign key (country_id) references country (id),
-- constraint i'm looking for
);
Run Code Online (Sandbox Code Playgroud)
但是我无法弄清楚每个国家只有一个主要专家所需要增加的限制。
我试过了constraint unique (country_id, true),constraint unique (*, country_id, true)但是它不是有效的sql。有任何想法吗?
mysql ×3
sql ×3
hibernate ×2
java ×2
php ×2
postgresql ×2
arrays ×1
database ×1
http ×1
jooq ×1
jpa ×1
many-to-many ×1
merge ×1
primary-key ×1
sql-update ×1
validation ×1
yii ×1