A. sql怎样 添加非空约束,和identity在创建完表后加入
非空约束
alter table tb1
add constraint 约束名 check(列名 is not null)
建表以后添加identity列的话,如果列名已经存在必须先drop掉,然后重新添加
假设原来表上有个id列,想让列名id为自增列,则
alter table 表名
drop column id
alter table 表名
add id int identity
B. 如何用sql语句添加非空列
改变已有表的列字段,使用alter命令;
格式:
alter table 表名 add 新增字段名 字段类型 [列级约束]
例如:alter table student add grade int not null (not null 属于列级约束)
但可能出现以下的情况:
ALTER TABLE 只允许添加满足下述条件的列: 列可以包含空值;或者列具有指定的 DEFAULT 定义;或者要添加的列是标识列或时间戳列;或者,如果前几个条件均未满足,则表必须为空以允许添加此列。
原因:表中原本有数据(存在很多行),在你新增加非空字段后,原来存在的行中的数据本来为空,但你又要求它非空,这样就矛盾了,所以该命名就不会执行,就会报错。
解决方法:
1、alter table student add grade int 不加非空约束;
2、update table student set grade=60 where grade is NULL 将存在的数据行中的grade字段同一设置成60分;
3、alter table student alter column grade int not null 增加非空约束;
C. SQl问题非空约束
楼主可以这样试试,我用过很多次的绝对可以
首先update dbo.T_user set user_Password='' where user_Password is null
然后在设置非空
alter table dbo.T_user alter column user_Password varchar(20) not null
这样就可以让字段 user_Password 不允许null
这样就可以把user_Password 字段改成 varchar(20) not null 了
如果楼主想要不能空的约束,那个就要做触发器了
D. SQL server 增加非空约束
--定义pname的类型
alter table table1 alter columns pname nvarchar(50) not null
E. 怎样用SQL语句对指定字段建立非空约束
五大约束
1.—-主键约束(Primay Key Coustraint) 唯一性,非空性
2.—-唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个
3.—-检查约束 (Check Counstraint) 对该列数据的范围、格式的限制(如:年龄、性别等)
4.—-默认约束 (Default Counstraint) 该数据的默认值
5.—-外键约束 (Foreign Key Counstraint) 需要建立两表间的关系并引用主表的列五大约束的语法示例
1.—-添加主键约束(将stuNo作为主键)
alter table stuInfo
add constraint PK_stuNo primary key (stuNo)
2.—-添加唯一约束(身份证号唯一,因为每个人的都不一样)
alter table stuInfo
add constraint UQ_stuID unique(stuID)
3.—-添加默认约束(如果地址不填 默认为“地址不详”)
alter table stuInfo
add constraint DF_stuAddress default (‘地址不详’) for stuAddress
4.—-添加检查约束 (对年龄加以限定 15-40岁之间)
alter table stuInfo
add constraint CK_stuAge check (stuAge between 15 and 40)
alter table stuInfo
add constraint CK_stuSex check (stuSex=’男’ or stuSex=’女′)
5.—-添加外键约束 (主表stuInfo和从表stuMarks建立关系,关联字段stuNo)
alter table stuInfo
add constraint FK_stuNo foreign key(stuNo)references stuinfo(stuNo)
约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件(有关数据完整性的介绍请参见第9 章)。在SQL Server 中有5 种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。
1 主关键字约束
主关键字约束指定表的一列或几列的组合的值在表中具有惟一性,即能惟一地指定一行记录。每个表中只能有一列被指定为主关键字,且IMAGE 和TEXT 类型的列不能被指定为主关键字,也不允许指定主关键字列有NULL 属性。
定义主关键字约束的语法如下:
CONSTRAINT constraint_name
PRIMARY KEY [CLUSTERED | NONCLUSTERED]
(column_name1[, column_name2,…,column_name16])
各参数说明如下:
constraint_name
指定约束的名称约束的名称。在数据库中应是惟一的。如果不指定,则系统会自动生成一个约束名。
CLUSTERED | NONCLUSTERED
指定索引类别,CLUSTERED 为缺省值。其具体信息请参见下一章。
column_name
指定组成主关键字的列名。主关键字最多由16 个列组成。
例7-3: 创建一个产品信息表,以产品编号和名称为主关键字
create table procts (
p_id char(8) not null,
p_name char(10) not null ,
price money default 0.01 ,
quantity smallint null ,
constraint pk_p_id primary key (p_id, p_name)
) on [primary]
2 外关键字约束
外关键字约束定义了表之间的关系。当一个表中的一个列或多个列的组合和其它表中的主关键字定义相同时,就可以将这些列或列的组合定义为外关键字,并设定它适合哪个表中哪些列相关联。这样,当在定义主关键字约束的表中更新列值,时其它表中有与之相关联的外关键字约束的表中的外关键字列也将被相应地做相同的更新。外关键字约束的作用还体现在,当向含有外关键字的表插入数据时,如果与之相关联的表的列中无与插入的外关键字列值相同的值时,系统会拒绝插入数据。与主关键字相同,不能使用一个定义为 TEXT 或IMAGE 数据类型的列创建外关键字。外关键字最多由16 个列组成。
定义外关键字约束的语法如下:
CONSTRAINT constraint_name
FOREIGN KEY (column_name1[, column_name2,…,column_name16])
REFERENCES ref_table [ (ref_column1[,ref_column2,…, ref_column16] )]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ] ]
[ NOT FOR REPLICATION ]
各参数说明如下:
REFERENCES
指定要建立关联的表的信息。
ref_table
指定要建立关联的表的名称。
ref_column
指定要建立关联的表中的相关列的名称。
ON DELETE {CASCADE | NO ACTION}
指定在删除表中数据时,对关联表所做的相关操作。在子表中有数据行与父表中的对应数据行相关联的情况下,如果指定了值CASCADE,则在删除父表数据行时会将子表中对应的数据行删除;如果指定的是NO ACTION,则SQL Server 会产生一个错误,并将父表中的删除操作回滚。NO ACTION 是缺省值。
ON UPDATE {CASCADE | NO ACTION}
指定在更新表中数据时,对关联表所做的相关操作。在子表中有数据行与父表中的对应数据行相关联的情况下,如果指定了值CASCADE,则在更新父表数据行时会将子表中对应的数据行更新;如果指定的是NO ACTION,则SQL Server 会产生一个错误,并将父表中的更新操作回滚。NO ACTION 是缺省值。
NOT FOR REPLICATION
指定列的外关键字约束在把从其它表中复制的数据插入到表中时不发生作用。
例7-4:创建一个订货表,与前面创建的产品表相关联
create table orders(
order_id char(8),
p_id char(8),
p_name char(10) ,
constraint pk_order_id primary key (order_id) ,
foreign key(p_id, p_name) references procts(p_id, p_name)
) on [primary]
注意:临时表不能指定外关键字约束。
惟一性约束
惟一性约束指定一个或多个列的组合的值具有惟一性,以防止在列中输入重复的值。惟一性约束指定的列可以有NULL 属性。由于主关键字值是具有惟一性的,因此主关键字列不能再设定惟一性约束。惟一性约束最多由16 个列组成。
定义惟一性约束的语法如下:
CONSTRAINT constraint_name
UNIQUE [CLUSTERED | NONCLUSTERED]
(column_name1[, column_name2,…,column_name16])
例7-5:定义一个员工信息表,其中员工的身份证号具有惟一性。
create table employees (
emp_id char(8),
emp_name char(10) ,
emp_cardid char(18),
constraint pk_emp_id primary key (emp_id),
constraint uk_emp_cardid unique (emp_cardid)
) on [primary]
7.2.4 检查约束
检查约束对输入列或整个表中的值设置检查条件,以限制输入值,保证数据库的数据完整性。可以对每个列设置符合检查。
定义检查约束的语法如下:
CONSTRAINT constraint_name
CHECK [NOT FOR REPLICATION]
(logical_expression)
各参数说明如下:
NOT FOR REPLICATION
指定检查约束在把从其它表中复制的数据插入到表中时不发生作用。
logical_expression
指定逻辑条件表达式返回值为TRUE 或FALSE。
例7-6: 创建一个订货表其中定货量必须不小于10。
create table orders(
order_id char(8),
p_id char(8),
p_name char(10) ,
quantity smallint,
constraint pk_order_id primary key (order_id),
constraint chk_quantity check (quantity>=10) ,
) on [primary]
注意:对计算列不能作除检查约束外的任何约束。
7.2.5 缺省约束
缺省约束通过定义列的缺省值或使用数据库的缺省值对象绑定表的列,来指定列的缺省值。SQL Server 推荐使用缺省约束,而不使用定义缺省值的方式来指定列的缺省值。有关绑定缺省约束的方法请参见“数据完整性”章节。
定义缺省约束的语法如下:
CONSTRAINT constraint_name
DEFAULT constant_expression [FOR column_name]
例7-7:
constraint de_order_quantity default 100 for order_quantity
注意:不能在创建表时定义缺省约束,只能向已经创建好的表中添加缺省约束。
7.2.6 列约束和表约束
对于数据库来说,约束又分为列约束(Column Constraint)和表约束(Table Constraint)。
列约束作为列定义的一部分只作用于此列本身。表约束作为表定义的一部分,可以作用于
多个列。
下面举例说明列约束与表约束的区别。
例7-8:
create table procts (
p_id char(8) ,
p_name char(10) ,
price money default 0.01 ,
quantity smallint check (quantity>=10) , /* 列约束 */
constraint pk_p_id primary key (p_id, p_name) /* 表约束 */
F. 怎么用sql语句添加非空列 我哪写错了
改变已有表的列字段,使用alter命令;
格式:
alter table 表名 add 新增字段名 字段类型 [列级约束]
例如:alter table student add grade int not null (not null 属于列级约束)
但可能出现以下的情况:
ALTER TABLE 只允许添加满足下述条件的列: 列可以包含空值;或者列具有指定的 DEFAULT 定义;或者要添加的列是标识列或时间戳列;或者,如果前几个条件均未满足,则表必须为空以允许添加此列。
原因:表中原本有数据(存在很多行),在你新增加非空字段后,原来存在的行中的数据本来为空,但你又要求它非空,这样就矛盾了,所以该命名就不会执行,就会报错。
解决方法:
1、alter table student add grade int 不加非空约束;
2、update table student set grade=60 where grade is NULL 将存在的数据行中的grade字段同一设置成60分;
3、alter table student alter column grade int not null 增加非空约束;
G. sql语句中如何为新增列指定为NOT NULL
主键肯定不能为not null。
再一个就是看看是否有约束了。
ALTER TABLE 只可以添加满足下述条件的列: 列可以包含空值;或者列具有指定的 DEFAULT 定义;或者要添加的列是标识列或时间戳列;当然,如果前几个条件均未满足,表必须为空以允许添加此列。不能将列"xxx"添加到非空表"xx"中,它不满足上面条件。
alter table xx add 添加列表要是空的
指定列是否可接受空值。如果列不允许空值,则在指定了默认值或表为空的情况下,才能用 ALTER TABLE 语句添加该列。同时指定了 PERSISTED 时,才可以为计算列指定 NOT NULL。如果新列允许空值,但没有指定默认值,则新列在表中的每一行都包含一个空值。如果新列允许空值,并且指定了新列的默认值,就可以使用 WITH VALUES 将默认值存储到表中每个现有行的新列中。
如果新列不允许空值,并且表不为空,那么 DEFAULT 定义必须与新列一起添加;并且,加载新列时,每个现有行的新列中将自动包含默认值。
在 ALTER COLUMN 语句中指定 NULL,可以强制 NOT NULL 列允许空值,但 PRIMARY KEY 约束中的列除外。只有列中不包含空值的时候,才可以在 ALTER COLUMN 中指定 NOT NULL。须将空值更新为某个值后,才允许执行 ALTER COLUMN NOT NULL 语句,例如:
新建不能为空,故要先新建个可以为空的列。
然后强制为空。
下面代码以测试。
alter table 表名 add 列名 nvarchar(20) null
go
UPDATE 表名 SET stuName = N'some_value' WHERE 列名 IS NULL
ALTER TABLE 表名 ALTER COLUMN 列名 NVARCHAR(20) NOT NULL
go
H. SQL中创建一个表之后如何添加默认约束和非空约束
你的语法不对,当然出错,详细语法参阅SQL联机丛书
--添加非空约束
ALTER TABLE LOVO ALTER COLUMN NAME VARCHAR(20) NOT NULL;
--添加默认约束
ALTER TABLE LOVO ADD CONSTRAINT name_default DEFAULT 'zhouqiang' FOR NAME;
I. MSSQL中如何用SQL语句为字段增加不为空的约束
alter table tablename add newfield varchar(10) not null default ''
对于有数据的表,增加非空字段,要加入默认值。
如果原有字段改为非空,在有数据的情况要,要先将空值赋值再作修改:
update tablename set fieldname='' where fieldname is null
alter table tablename alter COLUMN fieldname varchar(10) not null
J. 如何用sql语句添加非空列
alter
column
字段类型
[(字长)]
|
constraint
多重字段索引
}
|
drop
drop{column
字段
i
constraint
索引名
}
}
alter
table
语句分为以下几个部分:部分
说明table
欲修改的表之名称。
field
欲在表内增加或删除的字段的名称。或表内欲被替换的字段名称。
type
字段的数据类型。
size
字段的字符长度
(文本及二进制字段)。
indexname
欲删除的多重字段索引的名称。
说明使用
alter
table
语句,可用多种不同方法更改当前已存在的表:你可以:
使用
add
column
在表中添加新的字段。需要指定字段名、数据类型、还可以
(对文本和二进制字段)指定长度。例如,下列语句在员工表中增加一
25
个字符的、名为
notes
的文本字段:
alter
table
employees
add
column
notes
text(25)
也可以定义此字段的索引。关于单一字段索引的详细信息,请参阅constraint
子句主题。
如果对一字段指定
not
null,则在这字段中添加的新记录必须有有效的数据。
使用alter
column改变一个当前字段的数据类型,需要指定字段名、新数据类型、还可以
(对文本和二进制字段)指定长度。例如,下列语句把雇员表中一个字段的数据类型,
被称为zipcode(最初被定义为整数),改变成一个10字符文本字段:
alter
table
employees
alter
column
zipcode
text(10)
使用
add
constraint
添加多重字段索引。关于多重字段索引的详细信息,请参阅
constraint
子句主题。
使用
drop
column
删除字段。只要指定欲删除的字段名即可。
使用
drop
constraint
删除多重字段索引。只要在
constraint
保留字后面指定索引名即可。
--------------------------------------------------------------------------------注意不能同时添加或删除一个以上的字段或索引。
你可以使用
create
index
语句在一个表中增加一个单字段或多重字段,你还可以使用
alter
table
或
drop
语句删除一个由alter
table或create
index建立的索引。
可以在单一字段上使用
not
null,或在用于单一字段或多重字段(名为
constraint)
的
constraint
子句中使用
not
null。但是,一个字段只能使用一次
not
null
限制。尝试多次应用此限制将导致运行错误。