我有一个sybase db表,我需要在其中添加一个新列。
条件:列不得允许空值并且是唯一的。 什么是alter table sql来实现这个目标?
编辑: 它是一个varchar类型的列。是的,现在的表是空的,但是当填充时,确保填充唯一值。
我累了执行
alter table Test add Name varchar not null unique
我收到错误,说明必须指定默认值为非null。 但我想添加唯一约束,所以我真的需要指定默认值吗?
感谢
答案 0 :(得分:3)
唯一值被指定为列的索引的一部分,而不是列定义本身。
尝试:
alter table Test add Name varchar not null
create unique index index_name_unique on Test (Name)
ASE reference manual可以提供更多详细信息。
答案 1 :(得分:2)
创建表后,除非为列指定了缺省值,否则Sybase ASE不允许直接添加NOT NULL列。但是,如果表仍为空,则可以执行以下操作 -
alter table测试添加名称varchar(100)null
alter table测试修改名称varchar(100)NOT NULL
您将看到使用这些步骤可以将Name列修改为NOT NULL列。这是因为此时Sybase服务器检查表中没有数据,因此不检查NOT NULL约束,并使列为NOT NULL。因此,我们可以跳过默认约束。
如果测试表中已经存在一些数据,那么我们需要在步骤1和步骤2之间再添加一个步骤,这将在表格中的现有行中添加默认值。这可以通过先前数据的脚本完成,然后执行步骤2.
要使列仅允许列的唯一值,您需要使用以下语法添加唯一键约束 -
alter table测试添加约束UK1唯一(名称)