表的操做管理和 MySQL 的約束控制

1、表的操做數據庫

一、表的基本概念spa

數據庫與表之間的關係:數據庫是由各類數據表組成的,數據表是數據庫中最重要的對象,用來存儲和操做數據的邏輯結構。設計

表由列和行組成,列是表數據的描述,行是表數據的實例。3d

表的操做:建立新表、修改表和刪除表。rest

二、建立表code

建立數據表可以使用 CREATE TABLE 命令對象

語法格式:blog

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name [([column_definition], … | [index_definition])] [table_option] [select_statement];

注意:在同一個數據庫中,表名不能有重名。排序

【例1】在 studentInfo 數據庫中建立 Student 表,包括字段:學號(sno,非空,char(10)),姓名(sname,非空,varchar(20)),性別(ssex,char(2)),出生日期(sbirth,data,非空),專業號(zno,varchar(20)),班級(sclass,varchar(10))ci

三、查看錶

1)顯示錶的名稱

語法格式:

SHOW TABLES ;

【例2】顯示數據庫 studentInfo 中全部的表

2)顯示錶的結構

查看錶結構有簡單查詢和詳細查詢,可以使用 DESCRIBE / DESC 語句SHOW CREATE TABLE 語句

語法格式: DESCRIBE 表名;  或者 DESC 表名;  或者  SHOW CREATE TABLE 表名;

【例3】3 種命令顯示數據庫 studentInfo 中表 student 的結構

四、修改表

ALTER TABLE 用於更改原有的結構。例如,能夠增長或刪除列、重命名列或表,還能夠修改字符集。

語法格式:

alter [ ignore] table table_name alter_specification [, alter_specification] add [column] column_definition[ first | after col_name] // 添加字段 | alter [column] col_name {set default literal | drop default} // 修改字段 | change [column] old_col_name column_definition [first| after col_name] // 重命名字段 | modify [column] column_definition [first | after col_name] // 修改字段 | drop [column] col_name // 刪除列 | rename [to] new_table_name // 對錶重命名 | order by col_name // 按字段排序 | convert to character set character_name [collate collation_name] // 將字段集轉化爲二進制 | [default] character set charset_name [collate collation_name] // 修改字符集

【例4】在 student 表的出生日期字段後添加一個數據類型爲 char,長度爲 20 的字段 scollege,容許爲空,表示學生所在學院

 【例5】還使用 alter table 命令把 scollege 字段刪除

【例6】把 student 表名改成 stu

五、複製表

語法格式:

create [temporary] table [if not exists] table_name [ () like old_table_name [] ] | [AS (select_statement)]; 

【例7】複製 stu 表到 student 表中

【例8】複製 stu 表中的學號(sno),姓名(sname)到新的表 SnoNameTable

 六、刪除表

刪除表能夠用 DROP TABLE 命令

語法格式:

drop table [if exists] table_name [,table_name]

【例9】刪除 stu 表和 SnoNameTable 表

能夠用 show tables 命令查看 studentInfo 中如今剩餘的表

七、表管理中的注意事項

1)關於空值(NULL)的說明

  空值一般用於表示未知、不可用或將在之後添加的數據,切不可將它與數字 0 或字符類型的空字符混爲一談。

2)關於列的標誌(IDENTITY)屬性

  任何表均可以建立一個包含系統所生成序號值的標誌列。該序號值惟一標誌表中的一列,且能夠做爲鍵值。

3)關於列類型的隱含改變

  在 MySQL 中,系統會隱含地改變在 CREATE TABEL 語句或 ALTER TBALE 語句中所指定的列類型。

  長度小於 4 的 VARCHAR 類型會被改變爲 CHAR 類型。

2、MySQL 約束控制

一、數據完整性約束

  數據的完整性整體來講可分爲如下 4 類,即實體完整性、參照完整性、域完整性和用戶自定義完整性

  實體完整性:實體的完整性強制表的標識符列或主鍵的完整性(經過約束,惟一約束,主鍵約束或標識列屬性)

  參照完整性:在刪除和輸入記錄時,引用完整性保持表之間已定義的關係,引用完整性確保鍵值在全部表中一致。

  域完整性:限制類型(數據類型),格式(檢查約束和規則),可能值範圍(外鍵約束,檢查約束,默認值定義,非空約束和規則)

  用戶自定義完整性:用戶本身定義的業務規則。

二、字段的約束

  設計數據庫時,能夠對數據庫表中的一些字段設置約束條件,由數據庫管理系統(如 MySQL)自動檢測輸入的數據是否知足約束條件,不知足約束條件的數據,數據庫管理系統拒絕錄入。MySQL 支持的經常使用約束條件有 6 種:主鍵(primary key)約束、外鍵(foreign key)約束、非空(not null)約束、惟一性(unique)約束、默認值(default)約束、自增約束(auto_increment)及檢查(check)約束。其中,檢查約束須要藉助觸發器或者 MySQL 複合數據類型實現。

1)主鍵(primary key)約束

  設計數據庫時,建議爲全部的數據庫表都定義一個主鍵,用於保證數據庫表中記錄的惟一性。一張表中只容許設置一個主鍵,這個主鍵能夠是一個字段,也能夠是一個字段組(不建議使用複合主鍵)。在錄入數據的過程當中,必須在全部主鍵字段中輸入數據,即任何主鍵字段的值不容許爲 NULL

設置主鍵一般有兩種方式:表級完整性約束列級完整性約束

假設一個表的主鍵是單個字段ID。若是用表級完整性約束,就是用 PRIMARY KEY 命令單獨設置主鍵爲 ID 列。

語法規則:

PRIMARY KEY(字段名)

【例10】建立學生 stu1 表,用表的完整性設置學號 sno 字段爲主鍵

若是用列級完整性約束,就是直接在該字段的數據類型或者其餘約束條件後加上 「primary key」 關鍵字,便可將該字段設置爲主鍵約束。

語法規則:

字段名 數據類型[其餘約束條件] primary key

【例11】建立學生 stu2 表,用列的完整性設置學號 sno 字段爲主鍵

若是一個表的主鍵是多個字段的組合,定義完全部的字段後,設置複合主鍵。

語法規則:

primary key (字段名1, 字段名2)

【例12】使用下面的 SQL 語句在 studentInfo 數據庫中建立 SC 表,並將 (sno,cno) 的字段組合設置爲 SC 表的主鍵

2)外鍵(foreign key)約束

  外鍵約束主要用於定義表與表之間的某種關係。表 A 外鍵字段的取值,要麼是 null,要麼是來自於表 B 主鍵字段的取值(此時將表 A 稱之爲表 B 的子表,表 B 稱之爲表 A 的父表)

  因爲子表和父表之間的外鍵約束關係:

  (1)若是子表的記錄 「參照」 了父表的某條記錄,那麼父表這一條記錄的刪除(delete)或修改(update)操做可能以失敗了結。

  (2)若是試圖直接插入(insert)或者修改(update)子表的 「外鍵值」 ,子表中的 「外鍵值」 必須是父表中的 「主鍵值」,要麼是 NULL,不然插入(insert)或者修改(update)操做失敗。

  例如,學生 student 表的班級號 class_no 字段的值要麼是 null,要麼是來自於班級 classes 表的 class_no 字段的取值。也能夠這樣說,學生 student 表的 class_no 字段的取值必須參照(reference)班級 classes 表的 class_no 字段的取值

  在表 A 中外鍵的設置也有兩種方式,一種是在表級完整性下定義外鍵約束,一種是在列級完整性下定義外鍵約束

表級完整性語法規則以下:

 foregin key (表A的字段名列表) references (表B的字段名列表) [ on delete {cascade| restrict |set null | no action} ] [on update {cascade| restrict |set null | no action} ] 

級聯的選項有四種取值,其意義以下:

  cascade:父表記錄的刪除(delete)或修改(update)操做會自動刪除或修改子表中與之對應的記錄。

  set null:父表記錄的刪除(delete)或修改(update)操做會將子表中與之對應記錄的外鍵值自動設置爲 null 值。

  no action:父表記錄的刪除(delete)或修改(update)操做若是子表存在與之對應的記錄,那麼刪除或修改操做將失敗。

  restrict:與 no action 功能相同,且爲級聯選項的默認值。

若是表已經建好,那麼能夠經過 alter table 命令添加,語法以下:

alter table table_name add [ constraint 外鍵名] foregin key [id](index_col_name, ……) references table_name(index_col_name, ……) [ on delete {cascade| restrict |set null | no action} ] [ on update {cascade| restrict |set null | no action} ] 

【例13】將 sc 表的 sno 字段設置爲外鍵,該字段的值參照(reference)班級 student 表的 sno 字段的取值

在列級完整性下定義外鍵約束,就是直接在列的後面添加 references 命令,例如:

表級完整性約束和列級完整性約束都是在 CREATE TABLE 語句中定義。還有另一種方式,就是使用完整性約束命名字句 CONSTRAINT,用來對完整性約束條件命名,從而能夠靈活的增長、刪除一個完整性約束條件。

完整性約束命名字句格式:

constraint <完整性約束條件名> [PRIMARY KEY 短語| FOREIGN KEY 短語 | CHECK 短語]

【例14】建立 sc 表,將 sno 字段設置爲外鍵

3)非空(not NULL)約束

若是某個字段知足非空約束的要求,則能夠向該字段添加非空約束。非空約束限制該字段的內容不能爲空,但能夠是空白。

語法規則:

字段名 數據類型 not null 

【例15】將學生 student 表的姓名 sname 字段設置爲非空約束

4)惟一性(unique)約束

若是某個字段知足惟一性約束要求,則能夠向該字段添加惟一性約束。與主鍵約束不一樣,一張表中能夠存在多個惟一性約束,而且知足惟一性約束的字段能夠取 NULL 值。

語法規則:

字段名 數據類型 unique

【例16】建立班級 classes 表,班級名 class_name 字段設置爲非空約束以及惟一性約束

5)默認值(default)約束

若是某個字段知足默認值約束要求,能夠向該字段添加默認值約束。

語法規則:

字段名 數據類型 [其餘約束條件] default 默認值

【例17】建立課程 course 表,其 up_limit 字段設置默認值約束,且默認值爲整數 60

 6)自增(auto_increment)約束

AUTO_INCREMENT 是 MySQL 惟一擴展的完整性約束,當爲數據庫表中插入新記錄時,字段上的值會自動生成惟一的 ID 。

語法格式:

CREATE TABLE table_name( 屬性名 數據類型 AUTO_INCREMENT, …… ); 

【例18】建立表 t_dept 時,設置 deptno 字段爲 AUTO_INCREMENT 和 PK 約束

7)刪除(delete)約束

一個字段的全部約束均可以用 alter table 命令刪除

【例19】刪除表 sc 中名稱爲 sc_studen_fk 的約束

相關文章
相關標籤/搜索