在我的Rails(3.2)应用程序中,我的数据库中有一堆表,但我忘了添加一些非空约束.我已经google了但我找不到如何编写一个向现有列添加非null的迁移.
TIA.
我有一个存储产品代码的字段.代码是唯一的,但有些产品根本没有代码.我不能发明代码,因为那些是提供者代码.
这种约束在MySQL中是否可行?
我是一个存储过程和触发器的菜鸟,所以如果解决方案涉及其中一个,请耐心等待.
更新:列不是空的.这就是我无法做到这一点的原因.
我有一个SQLite数据库.我试图在表中插入值(users_id,lessoninfo_id),前提bookmarks是它们之前不存在.
INSERT INTO bookmarks(users_id,lessoninfo_id)
VALUES(
(SELECT _id FROM Users WHERE User='"+$('#user_lesson').html()+"'),
(SELECT _id FROM lessoninfo
WHERE Lesson="+lesson_no+" AND cast(starttime AS int)="+Math.floor(result_set.rows.item(markerCount-1).starttime)+")
WHERE NOT EXISTS (
SELECT users_id,lessoninfo_id from bookmarks
WHERE users_id=(SELECT _id FROM Users
WHERE User='"+$('#user_lesson').html()+"') AND lessoninfo_id=(
SELECT _id FROM lessoninfo
WHERE Lesson="+lesson_no+")))
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误说:
db error附近的语法.
我已经为我在Oracle SQL中创建的多个表的每个约束定义了一个名称.
问题是要删除特定表的列的约束,我需要知道我为每个约束提供的名称,这是我忘记的.
如何列出我为表的每列指定的约束的所有名称?
这样做有什么SQL语句吗?
这是一个语法问题.我有一个泛型类,它继承自泛型基类,并将约束应用于其中一个类型参数.我还希望派生类实现一个接口.对于我的生活,我似乎无法弄清楚正确的语法.
这就是我所拥有的:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... }
Run Code Online (Sandbox Code Playgroud)
首先想到的是:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... }
Run Code Online (Sandbox Code Playgroud)
但这是不正确的,因为这导致T2需要实现IBar和IFoo,而不是DerivedFoo来实现IFoo.
我尝试了一些谷歌搜索,使用冒号,分号等,但我已经调整了.我确定答案很简单.
我正在使用SQL Server 2005.我想将列中的值限制为唯一,同时允许NULLS.
我当前的解决方案涉及视图上的唯一索引,如下所示:
CREATE VIEW vw_unq WITH SCHEMABINDING AS
SELECT Column1
FROM MyTable
WHERE Column1 IS NOT NULL
CREATE UNIQUE CLUSTERED INDEX unq_idx ON vw_unq (Column1)
Run Code Online (Sandbox Code Playgroud)
有更好的想法吗?
我通过编写代码而不是使用GUI在Microsoft SQL Server 2000中创建一个新表,我正在尝试学习如何"手动方式".
这是我实际使用的代码,它工作正常:
CREATE TABLE "attachments"
(
"attachment_id" INT NOT NULL,
"load_date" SMALLDATETIME NOT NULL,
"user" VARCHAR(25) NOT NULL,
"file_name" VARCHAR(50) NOT NULL,
CONSTRAINT "pk_attachments" PRIMARY KEY ("attachment_id"),
CONSTRAINT "fk_users" FOREIGN KEY ("user") REFERENCES "users" ("user"),
CONSTRAINT "ch_load_date" CHECK ("load_date" < GETDATE())
)
Run Code Online (Sandbox Code Playgroud)
我已经自己指定了主键,外键和检查约束,因为这样我可以为它们定义一个名称,否则将它们声明为内联会使SQL Server生成一个随机名称,而我并不"喜欢"它.
当我尝试声明默认值约束时出现问题:查看Internet上的信息以及Microsoft SLQ Server Management Studio如何创建它,我了解它可以内联和单独创建:
"load_date" SMALLDATETIME NOT NULL DEFAULT GETDATE()
Run Code Online (Sandbox Code Playgroud)
要么
CONSTRAINT "df_load_date" DEFAULT GETDATE() FOR "load_date"
Run Code Online (Sandbox Code Playgroud)
内联方法工作正常,但它像往常一样为constaint生成一个随机名称,独立方法抛出错误,说Incorrect syntax near 'FOR'..
此外,如果我创建表然后ALTER它,该命令工作:
ALTER TABLE "attachments"
ADD CONSTRAINT "df_load_date" …Run Code Online (Sandbox Code Playgroud) 我想添加一个约束,该约束仅在表的一部分中强制列的唯一性.
ALTER TABLE stop ADD CONSTRAINT myc UNIQUE (col_a) WHERE (col_b is null);
Run Code Online (Sandbox Code Playgroud)
WHERE上面的部分是一厢情愿的想法.
这样做的任何方式?或者我应该回到关系绘图板?
什么是数据库约束的明确定义?为什么约束对数据库很重要?有哪些类型的约束?
constraints ×10
sql ×3
oracle ×2
sql-server ×2
c# ×1
database ×1
default ×1
generics ×1
indexing ×1
inheritance ×1
interface ×1
migration ×1
mysql ×1
notnull ×1
oracle11g ×1
postgresql ×1
rdbms ×1
sql-insert ×1
sqlite ×1
t-sql ×1
unique ×1