Ⅰ 如何使用sql語句創建一個表,表中欄位有id、department,其中id唯一,dpartment非空
--創建表,中欄位有id、department,其中id唯一,dpartment非空
CREATE TABLE AAAA(
id varchar(10) not null,
department varchar(30) not null,
primary key(id))
--查詢,如何在該表中查詢部門人數大於3的部門名稱
SELECT DEPARTMENT,COUNT(*)
FROM AAAA
WHERE COUNT(*)>3
GROUP BY DEPARTMENT
插入插入數據就可以了
Ⅱ SQL2008在建表時,怎麼用SQL語句設置欄位的屬性非空且唯一。。。格式
非空就是:NOT NULL
至於唯一嘛,可以使用uniqueidentifier這種數據類型,全球唯一,用普通的自增的ID(int型)還不能滿足要求的。如下:
create table test
(
ceshi uniqueidentifier NOT NULL
)
Ⅲ sql語句建表,其中一列數據的值是唯一的,但允許有多個空值。不是unique約束,unique不允許有多個空值。
假設要實現約束的列名為C1, 所在表名為MyTable
(1)除了SQL SERVER 以外的大型資料庫都是允許 UNIQUE約束有多個空值的。
(2)SQL Server 2008中有了一個解決方案,那就是篩選索引。
CREATE UNIQUE NONCLUSTERED INDEX MyTable
ON MyTable(C1)
WHERE C1 is not null
GO
(3)SQL Server 2008以下版兩個方案
A、使用觸發器在插入和更新時控制
CREATE trigger Mytrigger on MyTable for insert, update as
BEGIN
IF (select max(cnt) from (select count(i.c1)
as cnt from MyTable, inserted i where MyTable.c1=i.c1 group
by i.c1) x) > 1
ROLLBACK TRAN
END
B、 在約束中使用自建函數來實現
創建驗證邏輯函數
CREATE FUNCTION [dbo].[fn_CK_MyTable_C1]()
RETURNS BIT
AS
BEGIN
IF(EXISTS(
SELECT 1
FROM MyTable AS a
WHERE (C1 IS NOT NULL) AND EXISTS
(SELECT 1 AS Expr1
FROM MyTable
WHERE (C1 IS NOT NULL) AND (C1 = a.C1) )
))
RETURN 0
RETURN 1
END
GO
在約束中引用函數:
ALTER TABLE test_tb
ADD CONSTRAINT CK_MyTable_C1 CHECK (dbo.fn_CK_MyTable_C1() = 1)
GO
Ⅳ SQL我想定義一個 id 的欄位 讓他 非空 和 唯一 怎麼寫
一種是主鍵 建表的時候加上primary key 就滿足,另一種不是主鍵但是需要唯一,創建唯一索引alter table 表名 add constraint UQ_UNIQUE(id)
Ⅳ SQL的約束,比如唯一性約束、外鍵約束、規則的語句怎麼寫寫的時候麻煩舉個例子
我只是給你建了兩個非常簡單的表,前面的建資料庫什麼的都省掉了
希望能對你有點幫助
create table stuInfo
(
stuID int not null ,--學生編號,非空
stuName varchar(10) unique not null --學生姓名,唯一,非空
)
go
create table markInfo
(
stuID int not null references stuInfo(stuID), --學號,外鍵,與上面的stuInfo相關聯
Score int not null -- 成績,非空
)
Ⅵ sql語句 如何將一個列設為非空和唯一
create table tableName( id [欄位類型] IDENTITY PRIMARY KEY NOT; --創建表,中欄位有id、department,其中id唯一,dpartment非空 CREATE TABLE
Ⅶ 在查詢SQL語句中為空或者不為空的欄位應該怎麼寫
如果是空字元串就欄位名= '' 。如果是不等於空字元欄位名 <> ''。如果是 null值 就是 欄位名is null或者not null。
Ⅷ SQL中Unique約束有什麼用啊
作用為:唯一約束保證在一個欄位或者一組欄位里的數據與表中其它行的數據相比是唯一的。
創建唯一約束可確保在不參與主鍵的特定列中不輸入重復值。當唯一約束和主鍵都強制唯一性時,如果滿足下列條件,則應將唯一約束而不是主鍵約束附加到表上:
1、希望在列或列的組合中強制唯一性。可將多個唯一約束附加到表,但是只能將一個主鍵約束附加到表。
2、希望在允許空值的列中強制唯一性。可將唯一約束附加到允許空值的列,但是只能將主鍵約束附加到不允許空值的列。當將唯一約束附加到允許空值的列時,請確保在約束的列中最多有 一行包含空值。
(8)sql語句唯一且不非空擴展閱讀:
SQL中其他約束有:
1、主鍵約束:
主鍵列的數據類型不限,但此列必須是唯一並且非空。如該表中已有主鍵為1000的行,則不能再添加主鍵為1000。人工或程序不好控制的時候,也可以設置主鍵列為自動增長列。
2、參考約束:
參考約束是一個規則,可由 SQL 和 XQuery編譯器使用,但資料庫管理器不會強制執行它。
查詢編譯器包括一個重寫查詢階段,它將 SQL 和 XQuery 語句變換為可能是優化的格式並改進所需數據的訪問路徑。該約束的目的不是由資料庫管理器對數據執行附加驗證,而是為了提高查詢性能。
3、用戶自定義完整性約束:
用戶自定義完整性指針對某一具體關系資料庫的約束條件,它反映某一具體應用所涉及的數據必須滿足的語義要求。
例如某個屬性必須取唯一值,某個非主屬性也不能取空值,某個屬性的取值范圍在0-100之間等。
Ⅸ 如何用SQL語句約束屬性非空且唯一
在查詢分析器里邊執行 alter table 表名 drop constraint 約束名 查看錶的約束名執行 sp_helpconstraint 表名 第二個結果集就列出了表的約束,constraint_name就是約束名 或者執行 sp_help 表名 一般第三個結果集中...
Ⅹ 怎樣用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) /* 表約束 */