首先,我创建了一个像
CREATE TABLE Customer (
SD integer CHECK (SD > 0),
Last_Name varchar (30),
First_Name varchar(30)
);
Run Code Online (Sandbox Code Playgroud)
然后在该表中插入值
INSERT INTO Customer values ('-2','abc','zz');
Run Code Online (Sandbox Code Playgroud)
MySQL没有显示错误,它接受了值.
我正在查看SQL Server 2008的AdventureWorks示例数据库,我在他们的创建脚本中看到他们倾向于使用以下内容:
ALTER TABLE [Production].[ProductCostHistory] WITH CHECK ADD
CONSTRAINT [FK_ProductCostHistory_Product_ProductID] FOREIGN KEY([ProductID])
REFERENCES [Production].[Product] ([ProductID])
GO
Run Code Online (Sandbox Code Playgroud)
紧接着是:
ALTER TABLE [Production].[ProductCostHistory] CHECK CONSTRAINT
[FK_ProductCostHistory_Product_ProductID]
GO
Run Code Online (Sandbox Code Playgroud)
我看到这个用于外键(如此处),唯一约束和常规CHECK约束; DEFAULT约束使用我更熟悉的常规格式,例如:
ALTER TABLE [Production].[ProductCostHistory] ADD CONSTRAINT
[DF_ProductCostHistory_ModifiedDate] DEFAULT (getdate()) FOR [ModifiedDate]
GO
Run Code Online (Sandbox Code Playgroud)
如果有的话,第一种方式与第二种方式之间有什么区别?
我可以在Check约束中创建SQL子查询吗?
我有一个post表中的列id, owner
我有另一个表action的列user_id, post_id
表user的列id
post_id -> post.id并且user_id -> user.id还post.owner -> user.id
现在我想约束post(post_id).id != user_id桌子action
怎么可能?
postgresql plpgsql foreign-key-relationship check-constraints
我在这张桌子上遇到了麻烦
CREATE TABLE `Participants` (
`meetid` int(11) NOT NULL,
`pid` varchar(15) NOT NULL,
`status` char(1) DEFAULT NULL,
PRIMARY KEY (`meetid`,`pid`),
CONSTRAINT `participants_ibfk_1` FOREIGN KEY (`meetid`) REFERENCES `Meetings` (`meetid`) ON DELETE CASCADE
CONSTRAINT `participants_ibfk_2` CHECK (status IN ('a','d','u'))
CONSTRAINT `participants_ibfk_3` CHECK (pid IN (SELECT name FROM Rooms) OR pid IN (SELECT userid FROM People))
);
Run Code Online (Sandbox Code Playgroud)
我希望有一个外键约束,这是有效的.然后我想为属性添加一个约束,status这样它只能取值'a','d'和'u'.我不可能将字段设置为Enum或set.
任何人都可以告诉我为什么这段代码在MySQL中不起作用?
我有在SQL-Server2008 R2 设计的桌子.
我在该表中有一个列,在插入数据时需要对另一个表进行检查.
ALTER TABLE Table1
WITH CHECK ADD CONSTRAINT CK_Code
CHECK (MyField in (Select Field From Table2))
Run Code Online (Sandbox Code Playgroud)
这会导致错误
在此上下文中不允许子查询.只允许标量表达式.
我看过这个关于Check Constraint的问题- 在这种情况下不允许使用子查询.
有没有办法在不使用触发器的情况下实现这一目标?
请想象这个小型数据库......
删除死了ImageShack链接 - 志愿者数据库图
Volunteer Event Shift EventVolunteer
========= ===== ===== ==============
Id Id Id EventId
Name Name EventId VolunteerId
Email Location VolunteerId
Phone Day Description
Comment Description Start
End
Run Code Online (Sandbox Code Playgroud)
志愿者可以报名参加多个活动.
活动可能由多名志愿者组成.
事件可能有多个班次.
转变只属于一个事件.
轮班可能只有一名志愿者.
志愿者可以多班次.
我是否可以创建一个检查约束来强制执行没有班次的志愿者没有为该班次活动注册?
我是否可以创建一个检查约束来强制执行两个重叠的班次从未由同一个志愿者配备?
看起来Enterprise Manager*生成的一些脚本(或者没有,它们无关紧要)创建了检查约束WITH NOCHECK.
现在,当任何人修改表时,SQL Server都会遇到失败的检查约束,并抛出错误.
我可以让SQL通过它的所有检查约束,并检查它们吗?
运行:
sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
Run Code Online (Sandbox Code Playgroud)
只启用以前禁用的检查约束,它实际上不会检查它们.
*SQL Server 2000
sql-server sql-server-2000 database-integrity check-constraints sp-msforeachtable
我在sql server 2005中有一个简单的表,有3列:DateStart,DateEnd和Value.我试图设置"表检查约束"以避免插入重叠记录.例如,如果在此表中有DateStart = 2012-01-01(第一月1月)和DateEnd 2012-01-15(1月15日)的记录,则Check约束必须避免插入DateStart = 2012-01-10的记录(没有关心DateEnd),DateEnd = 2012-01-10(无关日期启动)的记录或DateStart 2011-12-10和DateEnd 2012-02-01的记录.
我以这种方式定义了一个UDF:
CREATE FUNCTION [dbo].[ufn_checkOverlappingDateRange]
(
@DateStart AS DATETIME
,@DateEnd AS DATETIME
)
RETURNS BIT
AS
BEGIN
DECLARE @retval BIT
/* date range at least one day */
IF (DATEDIFF(day,@DateStart,@DateEnd) < 1)
BEGIN
SET @retval=0
END
ELSE
BEGIN
IF EXISTS
(
SELECT
*
FROM [dbo].[myTable]
WHERE
((DateStart <= @DateStart) AND (DateEnd > @DateStart))
OR
((@DateStart <= DateStart) AND (@DateEnd > DateStart))
)
BEGIN
SET @retval=0
END
ELSE
BEGIN
SET …Run Code Online (Sandbox Code Playgroud) database sql-server database-design sql-server-2005 check-constraints
我VARCHAR(30)在Microsoft SQL Server数据库中有一列.我想添加一个CHECK约束,该约束不允许列中的值小于3个字符.我必须使用什么表达方式?
我有一个用户表,例如:
create table "user" (
id serial primary key,
name text not null,
superuser boolean not null default false
);
Run Code Online (Sandbox Code Playgroud)
和一个有工作的表:
create table job (
id serial primary key,
description text
);
Run Code Online (Sandbox Code Playgroud)
可以将作业分配给用户,但仅限于超级用户.其他用户无法分配作业.
所以我有一个表格,我看到哪个作业被分配给哪个用户:
create table user_has_job (
user_id integer references "user"(id),
job_id integer references job(id),
constraint user_has_job_pk PRIMARY KEY (user_id, job_id)
);
Run Code Online (Sandbox Code Playgroud)
但我想创建一个user_id引用具有的用户的检查约束user.superuser = True.
那可能吗?还是有其他解决方案吗?
sql ×5
sql-server ×5
database ×2
mysql ×2
postgresql ×2
t-sql ×2
constraints ×1
foreign-keys ×1
plpgsql ×1