SQL2000 中如何通过语句确认一个索引是唯一索引

CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(PROPERTY_NAME)
这个SQL语句啊,是用来建唯一索引的。
UNIQUE和CLUSTERED是可选项,UNIQUE就是保证这列值不能重复,CLUSTERED是建聚簇索引,索引顺序和表里数据物理顺序一样。

比如在表GoodsMade_Labour的SID列上建唯一索引IX_GoodsMade_Labour,可以这样写:
CREATE UNIQUE INDEX IX_GoodsMade_Labour ON GoodsMade_Labour(SID)
这样默认就是非聚集索引,其实跟用nonclustered效果一样。
要是想建聚集索引,就得加clustered:
CREATE UNIQUE CLUSTERED INDEX IX_GoodsMade_Labour ON GoodsMade_Labour(SID)
说实话,聚簇索引和非聚簇索引区别挺大的。
聚簇索引的话,表数据就是按索引顺序排的,查询快。
非聚簇索引是索引和表数据分开的,查询慢点但插入快。

我当时也没想明白为啥有些场景要用聚簇索引,有些场景用非聚簇的。
可能看具体业务需求吧,比如经常按某个字段查,那建聚簇索引可能更好。

如何使用Maestro设置数据库表索引为唯一索引

对,就是这操作。
先连上数据库,找到那表格。

找到表后,点它,选编辑。

然后看索引,右键那索引,编辑它。

勾选唯一索引,保存,执行。

注意啊,别有重复数据,否则白费劲。
别高峰期弄,影响查询。
你自己看。

如何使用Maestro设置数据库表索引为唯一索引

等等,我上周帮隔壁老王弄数据库的时候遇到个事。
他那个小超市系统,用MySQL存商品信息,表挺大,几千条数据。
老王说某个分类下的商品总乱,想加个唯一索引固定一下。
我就用SQLMaestro弄的。

打开软件,连接他那个服务器,IP是1 9 2 .1 6 8 .1 .1 00,端口3 3 06 ,用户是root,密码是那个他忘改的1 2 3 4 5 6 进了数据库,找那个叫products的表,点右键选Edit Table。

表结构看着挺熟,有个category字段存分类,还有个name字段存商品名。
老王说就想让同一个分类下的商品名不能重复。
我就去Indexes标签页,看到已经有主键索引了,但category和name上啥都没有。

新建索引,取名unique_category_name,选category和name字段,勾了Unique Index。
点OK保存时,突然弹个红框警告:Index unique_category_name cannot be created because a duplicate key value exists in the table. 看着数据表里果然有几个"苹果"在"水果"分类下面。
我就先去把重复的"苹果"改成了"红富士苹果"和"澳洲苹果"。

保存成功后,执行SQL语句。
工具栏那个绿色的三角点一下,进度条转了几秒。
完成后老王试删了某个分类下的"苹果"商品,还真不能删,提示违反唯一约束。
我就说这就对了。

突然想到,要是表里有几十万条数据,这种操作会不会特别慢?老王说上次他试过在一个大表上直接用ALTER TABLE加唯一索引,结果卡了整整两天。
这次我先用SQL Maestro的Generate Script,先生成SQL语句在本地跑跑看。

SQL唯一约束如何设置 SQL唯一约束设置完整教程

结论: 1 . 创建表时直接在列定义加UNIQUE,或用CONSTRAINT加约束名。
2 . 已有表用ALTER TABLE ADD CONSTRAINT或ADD UNIQUE。
3 . 复合唯一约束在创建表或修改表时添加,用逗号分隔列名。
4 . 主键只能有一个,唯一约束可多个,主键不可为空,唯一约束可为空。
5 . 优化性能:用索引,批量插入,提升硬件配置。