1. 簡要介紹資料庫表的約束和主要類型、作用
首先應該說下什麼是資料庫約束?
資料庫約束是為了保證數據的完整性而實現的一套機制,它具體的根據各個不同的資料庫的實現而有不同的工具。所以我們在學習約束的時候就會看到域完整性(Domain Integrity)、實體完整性(Entity Integrity)、參照完整性(Referential Integrity)與用戶定義完整性(User-defined Integrity)的不同的約束分類。但我今天就說下我們或是我們有些人剛接觸資料庫的同學,並且從sql語言基礎了解並學習到的。
1、非空約束(Not Null Constraint)
這個可能大家都了解,就是我們在添加那個表 userinfo,在id、name後面都添加了not null,就是有些列不能把它設為空,相信大家都理解,我就說下我在一個英文資料看到的一段英文:The not null specification prohibits the insertion
of a null value for this attribute.Any database modifucation that would cause a null to be inserted in an attribute declared to be not null generates an error diagnostic.(大家就得自己翻譯了)
2、唯一約束(Unique Constraint)
一個唯一約束並不包括一個NULL值。直接在欄位定義後加入UNIQUE即可定義該唯一約束。
1) 一個表只能創建一個主鍵約束,但一個表可以根據需要對不同的列創建若干unique約束
2)主鍵欄位不允許為null ,unique允許為空
3)一般創建主鍵約束時,系統自動產生簇索引,unique約束自動產非簇索引
3、檢查約束(The Check Clause)
通過在定義資料庫表裡,在欄位級或者是在表級加入的檢查約束,使其滿足特定的要求。
我來舉一個例子
create table student (
name varchar(15) not null,
student_id varchar(15),
degree_level varchar(15),
primary key(student_id),
check(degree_level in('Bachelors','Masters','Doctorate')));
Here ,we use the check clause to simulate an enumerated type by specifying that degree_level must to be one of 'Bachelors','Masters','Doctorate';
4、主鍵約束(Primary Key Constraint)
其實主鍵約束就是一張表只能建立一個主鍵約束,其實就是唯一約束+非空約束。大家通過上課討論那麼多關於「依賴」的事情,估計大家都能理解了
5、外健約束( Foreign Key Constraint)
Foreign Key Constraint主要是確保同一個表或者不同表之間的引用完整性,所以必須引用一個PRIMARY KEY或者UNIQUE約束,用戶必須在應用表上具有REFERENCES許可權;一個表中最多可以有31個外部鍵約束; 在臨時表中,不能使用外部鍵約束; 主鍵和外部鍵的數據類型必須嚴格匹配 。這個就不多說了給大家推薦一個網站http://tech.sina.com.cn/s/2010-01-04/00481199365.shtml
系摘抄....
網上隨便搜索一下,大把大把的~~~
2. 禁用/啟用一個庫里所有表的觸發器的sql怎麼寫
select name from sysobjects where xtype='P' --所有存儲過程
select name from sysobjects where xtype='V' --所有視圖
select name from sysobjects where xtype='U' --所有表
全部禁用:Alter table t1 disable trigger all;
全部生效:Alter table t1 enable trigger all;
單個禁用:Alter table t1 disable trigger 觸發器名;
查出指定TR的內容:sp_helptext 't_test'
查出所有名稱與內容:
select b.name as 名稱,a.text as 內容,case xtype when 'p ' then '存儲過程 ' else '觸發器 ' end as 類型 from syscomments a,sysobjects b where object_id(b.name)=a.id and b.xtype in( 'P ', 'TR ') and b.status =0
order by 類型
查出所有非系統資料庫並列出:
select * from
3. SQL server語句所有的約束條件
1、主鍵約束(Primary Key constraint):要求主鍵列數據唯一,並且不允許為空。
2、唯一約束(Unique constraint):要求該列唯一,允許為空,但只能出現一個空值。
3、檢查約束(Check constraint):某列取值范圍限制,格式限制等,如有關年齡、郵箱(必須有@)的約束。
4、默認約束(Default constraint):某列的默認值,如在資料庫里有一項數據很多重復,可以設為默認值。
5、外鍵約束(Foreign Key constraint):用於在兩個表之間建立關系,需要指定引用主表的哪一列。
(3)sql約束的禁用擴展閱讀:
對於存在外鍵約束的表,如果進行刪除非空的外鍵,可能會出現錯誤。 如果在 FOREIGN KEY 約束的列中輸入非 NULL 值,則此值必須在被引用的列中存在,否則將返回違反外鍵約束的錯誤信息。
列級 FOREIGN KEY 約束的 REFERENCES 子句僅能列出一個引用列,且該列必須與定義約束的列具有相同的數據類型。表級 FOREIGN KEY 約束的 REFERENCES 子句中引用列的數目必須與約束列列表中的列數相同。每個引用列的數據類型也必須與列表中相應列的數據類型相同。
4. SQL中的幾種約束的創建與刪除
約束的目的就是確保表中的數據的完整性。
常用的約束類型如下:
主鍵約束:(Primary Key constraint) 要求主鍵列唯一,並且不允許為空
唯一約束:(Unique Constraint) 要求該列唯一,允許為空,但只能出現一個空值
檢查約束:(Check Constraint) 某列取值范圍限制、格式限制等。如有關年齡的限制
默認約束:(Default Constraint) 某列的默認值,如我們的男性學員比較多,性別默認為男
外鍵約束:(Foreign Key Constraint) 用於在兩表之間建立關系,需要指定引用主表的哪一列
一、添加約束
在創建表時,我們可以在欄位後添加各種約束,但一般不這樣混用,推薦將添加約束和建表的語句分開編寫。
添加約束的語法如下:
Code:
Alter Table 表名
Add Constraint 約束名 約束類型 具體的約束類型
上述語法標識修改某個表,添加某個約束,其中約束名的命名規則推薦採用"約束類型_約束欄位"這樣的形式。
Code:
---添加主鍵約束
Alter Table stuInfo
Add Constraint PK_stuNO primary Key(stuNo)
---添加唯一約束
Alter Table stuInfo
Add Constraint UQ_stuID unique(stuID)
---添加默認約束
Alter Table stuInfo
Add Constraint DF_stuAddress default('地址不詳') for stuAddress
---添加檢查約束
Alter Table stuInfo
Add Constraint CK_stuAge check(stuAge between 15 and 40)
---添加外鍵約束
Alter Table stuMarks
Add Constraint FK_stuNo foreign key(stuNo) references stuInfo(stuNo)
二、刪除約束
如果錯誤的添加了約束,則可以刪除約束
刪除約束的語法如下:
Code:
Alter Table 表名
Drop Constraint 約束名
附加:在創建表的時候同時添加約束的寫法:
Code:
use stuDB
go
if exists(select * from Sysobjects where name = 'stuInfo')
drop table stuInfo
go
create table stuInfo
(
stuName varchar(20) not null primary key(stuName)
,stuID int not null unique(stuID)
,stuAddress varchar(20) not null default('地址不詳')
,stuAge int not null check(stuAge between 15 and 40)
)
5. 在c#里如何編寫刪除sql中多個表中的數據的代碼
---清空資料庫db_test中所有用戶表中的數據
use db_test
go
CREATE PROCEDURE
sp_DeleteAllData
AS
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'--禁用約束
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'--禁用觸發器
EXEC sp_MSForEachTable 'DELETE FROM ?'--清數據
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'--還原約束
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'--還原觸發器
EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'--檢查表內數據
go
exec sp_DeleteAllData
--這樣就會刪除 db_test庫中,所有表的數據,但是表結構仍然存在,操作相對危險,慎用。希望對你有幫助
6. SQL的數據表中,第一列的數據為什麼修改不了我一修改,它就提示「無法編輯該單元」。
一般是主鍵約束引起的.如果確實想改,也是可以改的.
alter table 你的數據表
NOCHECK all constraint;--禁用所有約束約束, 禁用後就可以改了
alter table 你的數據表
CHECK all constraint; --啟用該表所有約束