當前位置:首頁 » 編程語言 » sql將一列增加一個非空約束
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql將一列增加一個非空約束

發布時間: 2022-12-21 14:03:52

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
限制。嘗試多次應用此限制將導致運行錯誤。