我的数据库中的一个表有三列。
他们是dt_id
(PK),dt_name
(varchar)和u_id
(FK)。
dt_id
是一个标识列。
但我希望dt_name
每个用户只能使用一次。
所以你只能输入“dt_name ='CC',u_id = 1”一次。
如何设置dt_name
列?
----编辑:----
对不起,我会更好地解释..
dt_it只是桌面上的一个id。 dt_name是值字段 u_id是用户的id。
我希望能够在每个用户上添加唯一的dt_name,因此u_id = 1只能拥有值'CreditCard'一次。但是u_id = 2也可以拥有它,但只有一次......
希望这清除一点...... 我正在使用MSSQL
答案 0 :(得分:3)
为“dt_name”添加唯一索引。
create unique index ix_dt_name on your_table(dt_name)
[编辑]不完全确定你在问什么;如果你想要名字和组合的组合id是唯一的,您将在两个列上创建唯一索引:
create unique index ix_dt_name_and_id on your_table(dt_name, u_id)
答案 1 :(得分:3)
CREATE UNIQUE NONCLUSTERED INDEX IX_UniqueNamePerUser ON tab
(
dt_name, u_id
)
答案 2 :(得分:1)
只需在(u_id,dt_name)
上创建一个唯一索引CREATE UNIQUE INDEX ix_u_id_dt_name on mytable(u_id,dt_name)
答案 3 :(得分:0)
据我所知,您只希望dt_name在数据库中显示一次“CC”。如果是这种情况,您需要在DataBase中创建一个触发器来实现此目的。
CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[ ...n ]
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask [ ...n ]
} ]
sql_statement [ ...n ]
}
}
该链接解释了所有这些的使用。因此,您可以在输入行之前进行检查以查看名称是否存在。如果是,则在触发器中运行第二个脚本。
编辑**
其他代码更有效。但触发器仍然有效。但是,如果其他人更适合我,我将不会继续深入研究它。祝你好运。