目錄:
1.約束
2.ALTER TABLE
3.VIEW
1.約束
說明:SQL約束用於規定表中的資料規則,如果存在違反約束的資料行為,行為會被約束終止,約束可以在建表是規定,也可以在建表後規定,通過ALTER TABLE 實現.
語法:
CREATE TABLE TABLENAME ( COLUMN_NAME1 DATA_TYPE(SIZE) CONSTRAINT_NAME, COLUMN_NAME2 DATA_TYPE(SIZE) CONSTRAINT_NAME, COLUMN_NAME3 DATA_TYPE(SIZE) CONSTRAINT_NAME );
約束有如下幾種常用:
NOT NULL -- 指示某列不能儲存NULL值 UNIQUE -- 保證某列的每行必須有唯一值 PRIMARY KEY -- 前2個約束的結合,每個表只能有一個PRIMARY KEY 約束 CHECK -- 保證列中的值複合指定的條件 DEFAULT -- 規定沒有給列賦值時的預設值
針對以上約束,我們來看下具體的應用例項
例項1:
1 CREATE TABLE TABLENAME 2 ( 3 ID INT NOT NULL AUTO_INCREMENT, 4 NAME VARCHAR(255) UNIQUE , 5 AGE INT , 6 CITY VARCHAR(255) DEFAULT `CHINA`, 7 PRIMARY KEY (ID), 8 CHECK (AGE > 18) 9 );
如果給列起名字或者給多個列附加多個約束可以使用下面的方法
例項2:
1 CREATE TABLE TABLENAME 2 ( 3 ID INT NOT NULL AUTO_INCREMENT,-- 自動填充此列 從1開始 4 NAME VARCHAR(255) UNIQUE , 5 AGE INT , 6 CITY VARCHAR(255) DEFAULT `CHINA`, 7 PRIMARY KEY (ID), 8 CHECK (AGE > 18) 9 CONSTRAINT 別名 約束名 (列1,列2,..) 10 );
如果多個列新增UNIQUE約束,第9行程式碼可以改成如下形式
CONSTRAINT UNIQUE_NAME UNIQUE (AGE,CITY)
如果多個列新增CHECK約束,第9行程式碼可以改成如下形式
CONSTRAINT CHECK_NAME CHECK (AGE>18 AND CITY = `CHINA`)
我們已經建立表的幾個約束,那麼如果我們執行如下SQL時會報錯
INSERT INTO TABLENAME VALUES(1,`XUECHAO`,22,`CH`); INSERT INTO TABLENAME VALUES(2,`XUECHAO`,15,`CH`);
因為NAME已經新增了UNIQUE約束,AGE新增了CHECK約束
PS:我還是個菜鳥,理解的不是很全面, 我理解的約束就是這樣的,如果您有什麼不同的理解,可以評論區告訴我,很感謝!
2.ALTER TABLE
說明:前面我們在建表的時候已經新增了約束,如果我們建表的時候沒有新增約束,那麼我們可以通過ALTER TABLE 在表後新增約束,下面來看看下面的例項
例項1:
ALTER TABLE TABLENAME ADD UNIQUE (ID); 或 ALTER TABLE TABLENAME ADD CONSTRAINT UN_NAME UNIQUE (ID , NAME);
新增別的約束也是同樣的原理和寫法
說明:ALTER TABLE 能夠給表附加約束,還有另外一個用途,向表中新增新欄位,刪除欄位,修改欄位資料型別(我知道的就這些 ^_^)
例項2:
1 ALTER TABLE TABLENAME ADD COLUMN SCORE INT;-- 新增欄位SCORE 2 3 ALTER TABLE TABLENAME MODIFY SCORE VARCHAR(255); -- 修改欄位資料型別 4 5 ALTER TABLE TABLENAME DROP COLUMN SCORE; -- 刪除欄位
檢視再補充吧,有點忙沒時間寫了。。。。。。。。。。。
繼續….
3.VIEW
說明:檢視是一張視覺化的表,是基於SQL語句的結果集的視覺化的表,檢視包含行和列,就像一個真實的表,檢視中的欄位就是來自一個或多個資料庫中的真實的表中的欄位。檢視總是顯示最新的資料,每當使用者查詢檢視時,資料庫引擎通過使用檢視的sql語句重建資料,我們可以看下建立檢視的格式應該就明白這句話了
1.建立檢視:
格式:
CREATE VIEW VIEW_NAME AS SELECTE COLUMN_NAME FROM TABLE_NAME WHERE CONDITION;
例項1:
我們以前面的表WEBSITES為例,假設我想需要這樣一個檢視:我希望每次查詢訪問量小於50的網站資訊,那麼我們如何建立這個檢視呢?
1 CREATE VIEW INTERNET AS 2 SELECT NAME,URL FROM WEBSITES 3 WHERE ALEXA < 50;
例項2:
使用檢視,與查詢表資料一樣
SELECT * FROM INTERNET;
還可以新增條件:
SELECT * FROM INTERNET
WHERE NAME LIKE `%O%`; -- 查詢網站名字包含字母o的資料
是不是覺得定義檢視之後查詢變的更加簡單了呢^_^
2.更新檢視
更新檢視我們時通過 CREATE OR REPLACE 實現的
格式:
1 CREATE OR REPLACE VIEW view_name AS 2 SELECT column_name(s) 3 FROM table_name 4 WHERE condition;
例項:
比如上面剛建立的檢視我們需要新增一個ALEXA的新欄位,可以這樣實現
CREATE OR REPLACE VIEW INTERNET AS SELECT NAME ,URL,ALEXA FROM WEBSITES WHERE ALEXA < 50;
3.刪除檢視
例項:
DROP VIEW INTERNET;
總結:好了,對檢視的操作到這就結束了,不是很全面,但是還是有點幫助的(自戀),想深入的學習的話再多找點資料看下吧,我這個適合入門 哈哈
雖然內容不多,不全面,但是還是能看出來點檢視的利與弊的,下面就來總結幾句(其實我也是在別的地方看到的,但是很好理解,也很全面,就借鑑一下):
利:
1.第一點:
使用檢視,可以定製使用者資料,聚焦特定的資料。
解釋:
在實際過程中,公司有不同角色的工作人員,我們以銷售公司為例的話,
採購人員,可以需要一些與其有關的資料,而與他無關的資料,對他沒
有任何意義,我們可以根據這一實際情況,專門為採購人員建立一個視
圖,以後他在查詢資料時,只需select * from view_caigou 就可以啦。
第二點:使用檢視,可以簡化資料操作。
解釋:我們在使用查詢時,在很多時候我們要使用聚合函式,同時還要
顯示其它欄位的資訊,可能還會需要關聯到其它表,這時寫的語句可能
會很長,如果這個動作頻繁發生的話,我們可以建立檢視,這以後,我
們只需要select * from view1就可以啦,這樣很方便。
第三點:使用檢視,基表中的資料就有了一定的安全性
因為檢視是虛擬的,物理上是不存在的,只是儲存了資料的集合,我們可以
將基表中重要的欄位資訊,可以不通過檢視給使用者,檢視是動態的資料的集
合,資料是隨著基表的更新而更新。同時,使用者對檢視,不可以隨意的更改
和刪除,可以保證資料的安全性。
第四點:可以合併分離的資料,建立分割槽檢視
隨著社會的發展,公司的業務量的不斷的擴大,一個大公司,下屬都設有很
多的分公司,為了管理方便,我們需要統一表的結構,定期檢視各公司業務
情況,而分別看各個公司的資料很不方便,沒有很好的可比性,如果將這些
資料合併為一個表格裡,就方便多啦,這時我們就可以使用union關鍵字,
將各分公司的資料合併為一個檢視。
2.弊
1)效能差
sql server必須把檢視查詢轉化成對基本表的查詢,如果這個檢視是由一個複雜的多表查詢所定義,那麼,即使是檢視的一個簡單查詢,sql server也要把它變成一個複雜的結合體,需要花費一定的時間。
2)修改限制
當使用者試圖修改試圖的某些資訊時,資料庫必須把它轉化為對基本表的某些資訊的修改,對於簡單的試圖來說,這是很方便的,但是,對於比較複雜的試圖,可能是不可修改的。