标签: constraint

删除列上的约束(索引)

如何修改带有索引的表的类型?我试图在一个空表上做一个改变列来修改从日期时间到 varchar(15) 的类型,并得到错误说它依赖于列(结果是索引)。

通过右键单击索引并编写 drop 脚本,我能够在本地轻松解决此问题,但是我需要在无法访问索引名称的其他服务器上推出此功能。

有没有办法制作一个可以删除任何索引的脚本,让我在列上更改数据类型然后读取索引?谢谢!

sql-server constraint scripting alter-table

12
推荐指数
1
解决办法
9632
查看次数

将输入限制为几个不同的字符串

嗨,我似乎无法在 postgreSQL 中按照我期望的方式工作。在 pgadmin 中,我执行以下 SQL 查询。

-- Check: "TypeCheck"

-- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck";

ALTER TABLE "ComLog"
  ADD CONSTRAINT "TypeCheck" CHECK ("Type" SIMILAR TO 'email|post|IRL|minutes');
COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes';
Run Code Online (Sandbox Code Playgroud)

执行时将转换为。

-- Check: "TypeCheck"

-- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck";

ALTER TABLE "ComLog"
  ADD CONSTRAINT "TypeCheck" CHECK ("Type" ~ similar_escape('email|post|IRL|minutes'::text, NULL::text));
COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes';
Run Code Online (Sandbox Code Playgroud)

我希望这会将我对 Types 列的输入限制为电子邮件帖子 IRL 或分钟之一。但是,当输入表数据时,当我输入这些类型之一时,此约束会失败。Types 列是字符类型。有谁知道如何解决这一问题。谢谢。

postgresql constraint

12
推荐指数
1
解决办法
5581
查看次数

MySQL:对大列的唯一约束

我正在尝试创建一个 InnoDB 表,其中包含一个VARCHAR最多可容纳 3071 个字符的列。我想UNIQUE对该列的数据实施约束。

MySQL 似乎使用索引强制执行约束。在 InnoDB 中,索引大小似乎被限制为 767 字节 - 对于VARCHAR(3071)保存数据的列来说还不够。

关于如何让数据库强制数据的唯一性,而不影响最大数据长度或 InnoDB 的使用的任何想法?

mysql innodb index constraint

12
推荐指数
1
解决办法
1万
查看次数

列出索引和约束

我正在查看我继承的应用程序的 SQL Server 数据库。我已经有大约 10 年没有研究过 SQL Server,所以请耐心等待。

我正在查看的数据库表有一个bigint NOT NULL名为的列id,但是,当我检查约束时,我没有看到任何约束,所有数据库表也是如此。

我是否正确假设这些表上没有主键和索引(集群或非集群)?

我运行了以下查询,结果似乎证实了我的怀疑:

//**returns 0**
select count(*) from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

//**returns no rows**
select * from sys.indexes
where object_id = (select object_id from sys.objects where name = 'NAME-OF-TABLE');

//**returns all tables in database**
SELECT name
FROM sys.tables 
WHERE OBJECTPROPERTY(object_id,'IsIndexed') = 0;
Run Code Online (Sandbox Code Playgroud)

index sql-server constraint primary-key

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

为什么此 UPDATE 因违反唯一键约束而失败?

我是一名“偶然”的 DBA,相对缺乏经验并且对这个问题感到困惑。

运行 MS SQL Server 2012。问题在于这个 UPDATE 语句:

UPDATE dbo.tAccts SET
       Ticket               = 'ARP.ExGE'
       , Method             = 'smtp'
       , AcctOwner          = 'r00417819'
       , DisplayName = '~AppLight HBSFax-Inactive'
       , Destination = 'r00417819@mail.ad.ge.com'
       , UpdatedBy          = SYSTEM_USER
       , UpdatedOn          = CAST(GetDate() AS DATE)
FROM dbo.vReclaimable
WHERE OHR_EmpStatus <> 'A'
Run Code Online (Sandbox Code Playgroud)

应该更新tAccts 表中由 vReclaimable 视图返回的行。

vReclaimable 视图基于 tAccts 表并返回 tAccts 中行的子集。

当我运行它时,它失败并显示唯一键错误:

(0 row(s) affected)
Msg 2627, Level 14, State 1, Line 67
Violation of UNIQUE KEY constraint 'UQ__tAccounts_DNIS.Method.Destination.Phones'. Cannot …
Run Code Online (Sandbox Code Playgroud)

sql-server constraint view update unique-constraint

12
推荐指数
2
解决办法
9244
查看次数

使字段唯一是否使它被索引?

如果我unique对某个字段进行约束,是否还需要在该字段上创建索引以获得可扩展的插入时间?或者这是为我完成的(即使它使用的索引不可公开访问?)

具体来说,我正在使用 Apache Derby 进行原型设计,尽管我可能会在半不久的将来将其移至 MySQL。我也希望 SQL 标准中可能有一些关于这一点的内容。

我永远不需要按这个字段搜索,所以我宁愿不做一个无用的索引。但我宁愿有一个无用的索引,也不愿有一个O(n)插入时间。

mysql constraint derby unique-constraint

11
推荐指数
1
解决办法
8512
查看次数

SQL 为列设置允许值

我想创建一个ALTER TABLE添加新列并设置默认值的表达式,并另外定义该列的允许值。这是一个文本列,允许的应该只有“value1”、“value2”和“value3”。默认应为“value1”

根据以下语法图:

在此处输入图片说明 在此处输入图片说明 在此处输入图片说明 在此处输入图片说明

我快到了

ALTER TABLE exampleTable ADD COLUMN new_column VarChar(20) DEFAULT 'value1' 
Run Code Online (Sandbox Code Playgroud)

但我绝对不确定如何设置允许的值。

是否有可能制作类似的东西

约束检查 new_column IN ('value1', 'value2', 'value3)

? 我必须承认这张search condition图让我很困惑。

oracle constraint default-value alter-table

11
推荐指数
2
解决办法
4万
查看次数

如何创建具有相同约束和索引的新表?

我正在创建一个带有主键约束和该表中的非聚集索引的新表。

我知道,我想创建另一个具有相同结构和值以及键和索引的表。

create table Dummy (id integer ,name varchar(20),salary integer
Constraint PK_Con_id primary key(id))

insert into Dummy values(11,'AAA',1000);
insert into Dummy values(12,'BBB',2000);
insert into Dummy values(13,'CCC',3000);
insert into Dummy values(14,'DDD',4000);

select * from Dummy;

create nonclustered index IX_Name 
on Dummy(Name)
Run Code Online (Sandbox Code Playgroud)

现在我正在创建Dmy表,但键和约束没有反映Dmy在 SQL Server 2008 R2 的表中。

SELECT * 
INTO Dmy 
FROM Dummy
Run Code Online (Sandbox Code Playgroud)

index database-design sql-server constraint sql-server-2008-r2

11
推荐指数
2
解决办法
3万
查看次数

检查约束以强制执行###.###.#### 模式匹配

我想要一个检查约束,为多部分代码强制执行此正则表达式模式:

^\d{3}\.\d{3}\.\d{4}$
Run Code Online (Sandbox Code Playgroud)

...三个数字,一个句号,三个数字,一个句号,四个数字。

我是否需要创建一个 CLR 函数来强制执行模式匹配,并且可以在 DDL 中引用 CLR 函数吗?

有没有办法以另一种方式强制执行模式,使用LIKE?

sql-server constraint sql-server-2012

11
推荐指数
1
解决办法
2236
查看次数

如果列具有 NOT NULL 约束,查询优化器是否能够优化掉 IS NOT NULL 条件?

我正在尝试找出提高非常慢查询性能的方法。它有更明显的问题,但我注意到的一件事是 WHERE 子句中的条件之一是 'AND t.data IS NOT NULL' 而表 t 的 'data' 列没有为 NULL 的条目并且确实有一个 NOT NULL 约束。

所以我想知道查询优化器是否能够忽略条件。我的想法是,它不能仅仅因为约束而这样做(因为不能保证它是否是用 NOVALIDATE 创建的),但可能足够“聪明”以使用有关列中 NULL 字段数量的统计信息。

我自己的测试是不确定的,我无法找到有关此主题的任何进一步信息。

sql-server constraint optimization sql-server-2016

10
推荐指数
1
解决办法
1304
查看次数