天天看點

DDL語句--建立表 1,設定表的主鍵 2,設定表的外鍵 3,設定表的非空限制 4,設定表的唯一性限制 5,設定表的屬性值自動增加 6,設定表的屬性的預設值

表是資料庫存儲資料的基本機關。一個表包含若幹字段和記錄。表的操作包含建立新表,修改表,删除表。這些操作都是資料庫管理中最基本,也是最重要的操作。

具體而言,關于表的相關操作如下:

1,建立表的方法

2,表的完整性限制條件

3,檢視表結構的方法

4,修改表的方法

5,删除表的方法

上面羅列的這些都會一一的整理到。OK,現在我們開始第一篇,建立表。

建立表是指在已存在的資料庫中建立新表,這是建立資料庫最重要的一步,是進行其他表操作的基礎。MySQL中建立表通過sql語句CREATE TABLE實作,具體文法形式如下:

CREATE TABLE 表名(屬性名 資料類型[完整性限制條件],
				 屬性名 資料類型[完整性限制條件],
				 ......
				 屬性名 資料類型);           

1,‘表名’參數表示所要建立表的名稱,‘屬性名’參數表示表中字段的名稱,‘資料類型’參數指定字段的資料類型, ‘完整性限制條件’參數指定字段的某些特殊限制條件。

2,在使用CTEATE TABLE語句建立表時,首先要使用USE語句選擇資料庫,USE 資料庫名。如果沒有選擇資料庫,建立表時會出現‘No database selected’錯誤。

3,表名不能為sql語言的關鍵字,比如create,update,order等都不能作為表名。一個表中可以有一個或者多個屬性,定義時,字母大小寫均可,各屬性之間用逗号隔開,最後一個屬性後面不需要加逗号。

OK,現在我們來舉一個例子,現在我們資料庫要建立一張user表,建表語句如下:

CREATE TABLE `linkinframe`.`user` (
  `id` INT NOT NULL,
  `name` VARCHAR(5) NOT NULL,
  `age` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`id`));           
DDL語句--建立表 1,設定表的主鍵 2,設定表的外鍵 3,設定表的非空限制 4,設定表的唯一性限制 5,設定表的屬性值自動增加 6,設定表的屬性的預設值

完整性限制條件是對字段進行限制,要求使用者對該屬性進行的操作符合特定的要求。如果不滿足完整性限制條件,資料庫系統将不執行使用者的操作。說白了, 資料庫限制條件就是保證資料庫中資料的完整性。

DDL語句--建立表 1,設定表的主鍵 2,設定表的外鍵 3,設定表的非空限制 4,設定表的唯一性限制 5,設定表的屬性值自動增加 6,設定表的屬性的預設值

上圖中,關于表的完整性限制有主鍵,外鍵,非空,唯一,自增,預設值。我們來一個一個整理。

  • 1,設定表的主鍵

主鍵是表的一個特殊字段,該字段能唯一的标示該表中的每條資訊,主鍵和記錄的關系如同身份證和人的關系。主鍵用來标示每個記錄,每個記錄的主鍵值都不同。設定表的主鍵值在建立表時設定表的某個字段為該表的主鍵。

主鍵的最主要目的是幫助MySQL以最快的速度查找到表中的某一條資訊。主鍵必須滿足的條件就是主鍵必須是唯一,非空且不重複的,表中任意兩條記錄的主鍵字段的值不能相同。當然,主鍵可以是單一的字段,也可以是多個字段的組合。

  • 1),單字段主鍵

主鍵是由一個字段構成時,可以直接在該字段的後面加上PRIMARY KEY來設定主鍵。文法規則如下:

屬性名 資料類型 PRIMARY KEY           

其中,‘屬性名’參數表示表中字段的名稱,‘資料類型’參數指定字段的資料類型。比如下面建表語句設定id為主鍵。

CREATE TABLE `linkinframe`.`user` (
  `id` INT PRIMARY KEY ,
  `name` VARCHAR(5) NOT NULL,
  `age` INT UNSIGNED NOT NULL);           

  • 2),多字段主鍵

主鍵是由多個屬性組合而成的,在屬性定義完之後統一設定主鍵。文法規則如下:

PRIMARY KEY(屬性名1,屬性名2,...,屬性名n)           

比如下面建表語句,id和name兩個字段成為主鍵,id和name兩者的組合可以确定唯一的一條記錄。

CREATE TABLE `linkinframe`.`user` (
  `id` INT ,
  `name` VARCHAR(5) NOT NULL,
  `age` INT UNSIGNED NOT NULL,
  PRIMARY KEY(id,name));           

  • 2,設定表的外鍵

外鍵是表的一個特殊字段,如果字段sno是一個表A的屬性,且依賴于表B的主鍵。那麼,稱表B為父表,表A為子表,sno為表A的外鍵。通過sno字段将父表B和子表A建立關聯關系,設定表的外鍵值在建立表設定某個字段為外鍵,OK,現在我們來

整理一下外鍵設定的原則和外鍵的作用以及設定外鍵的方法。設定外鍵的原則就是必須依賴于資料庫中已存在的父表的主鍵,外鍵可以為空值。

外鍵的作用是建立該表與其父表的關聯關系。父表中删除某條資訊時,子表中與之對應的資訊必須有相應的改變。舉個例子:

stu_id是student表的主鍵,stu_id是grade表的外鍵,當stu_id為‘123’的同學退學啦,就需要從student表中删除該學生的資訊,然後在grade表中stu_id為‘123’的所有的資訊也應該同時删除,這樣可以保證資訊的完整性。

設定外鍵的基本文法規則如下:

CONSTRAINT 外鍵别名 FOREIGN KEY(屬性1.1,屬性1.2,...,屬性1.n) REFERENCES 表名(屬性2.1,屬性2.2,...,屬性2.n)           

其中,‘外鍵别名’參數是為外鍵的代号,‘屬性1’參數清單是子表中設定的外鍵,‘表名’參數是指父類的名稱,‘屬性2’參數清單是父類的主鍵。

現在我們來實際操作下資料庫,首先我們建立一張主表:

CREATE TABLE `linkinframe`.`user` (
  `id` INT NOT NULL,
  `name` VARCHAR(5) NOT NULL,
  `age` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`id`));           

然後現在我們為上面的user表建立一張從表,建表語句如下:

CREATE TABLE `linkinframe`.`address` (
  `id` INT NOT NULL,
  `user_id` INT NULL,
  `address_name` VARCHAR(45) NULL,
  PRIMARY KEY (`id`),
  INDEX `user_id_idx` (`user_id` ASC),
  CONSTRAINT `user_id`
    FOREIGN KEY (`user_id`)
    REFERENCES `linkinframe`.`user` (`id`));           

關于上面外鍵建表語句解釋如下:首先user為主表,id是該表主鍵,然後address是從表,id是該表主鍵,user_id是該表外鍵,然後這裡我也起名user_id為外鍵的别名,然後該外鍵依賴于主表的id字段。

注意: 子表的外鍵關聯的必須是父類的主鍵,而且,資料類型必須一緻。比如,兩者都是int類型,或者都是char類型,如果不滿足這樣的要求,在建立子表時,就會出現‘Can't create tale’的錯誤提示。

  • 3,設定表的非空限制

非空限制是指字段的值不能為空值,非空限制将保證所有記錄中該字段都有值。如果使用者新插入的記錄中,該字段為空值,則資料庫系統會報錯。設定表的非空限制是指在建立表時為表的某些特殊字段加上NOT NULL限制條件。

設定非空限制的基本文法規則如下:

屬性名 資料類型 NOT NULL            

比如下面的建表語句:

CREATE TABLE `linkinframe`.`user` (
  `id` INT NOT NULL,
  `name` VARCHAR(5) NOT NULL,
  `age` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`id`));           

這裡設定了user表所有的字段,id,name,age都是非空。

  • 4,設定表的唯一性限制

唯一性是指所有記錄中該字段的值不能重複出現,設定表的唯一性限制是指在建立表時,為表的某些特殊字段加上UNIQUE限制條件。

唯一性限制将保證所有記錄中該字段的值不能重複出現。設定唯一性限制的基本文法規則如下:

屬性名 資料類型 UNIQUE           

這裡舉一個例子,如果一個表中一個字元串字段huhu設定了唯一限制,現在一條記錄中該字段為‘0001’,那麼該表中就不能出現另一條記錄的huhu字段也為‘0001’。

  • 5,設定表的屬性值自動增加

AUTO_INCREMENT是MySQL資料庫中一個特殊的限制條件。其主要用于為表中插入的新的記錄自動生成唯一的ID。一個表隻能有一個字段使用AUTO_INCREMENT限制,且該字段必須為主鍵的一部分。

AUTO_INCREMENT限制的字段可以是任何整數類型(tinyint,smallint,int,bigint)等,預設情況下,該字段的值從1開始自增。

設定屬性值字段增加的基本文法規則如下:

屬性名 資料類型 AUTO_INCREMENT           

比如下面的建表語句:

CREATE TABLE `linkinframe`.`user` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));           

該建表語句建立了一張user表,其中id為其主鍵,name為一個普通字段。我們設定id為AUTO_INCREMENT,沒插入一條新記錄,id的值會自動增加。

1,在插入記錄時,預設的情況下自增字段的值從1開始自增,然後以後每增加一條記錄,該記錄的id值都會在前一條記錄的基礎上加1。

2,如果第一條記錄設定了該字的初值,那麼新增加的記錄就從初值開始自增。

3,加上AUTO_INCREMENT限制條件,那麼字段的每個值都是自動增加的。是以,這個字段不可能出現相同的值。通常情況下,AUTO_INCREMENT都是作為ID字段的限制條件,而且将ID字段作為表的主鍵。

  • 6,設定表的屬性的預設值

在建立表時可以指定表中字段的預設值。如果插入一條新的記錄時沒有為這個字段指派,那麼資料庫系統會自動為這個字段插入預設值。

預設值是通過DEFAULT關鍵字來設定的。如果沒有使用default關鍵字指定字段的預設值,也沒有指定字段為非空,那麼字段的預設值為空(NULL)。

設定預設值的基本文法規則如下:

資料名 資料類型 DAFAULT 預設值           

OK,關于建立表我已經詳細的整理完了。這裡我來寫一個比較全的建表語句包含上面整理的各個字段完整性限制。

CREATE TABLE `linkinframe`.`user` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(5) NOT NULL,
  `card_id` VARCHAR(20) NULL,
  `age` INT NULL DEFAULT 25,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `age_UNIQUE` (`card_id` ASC));           

上面的建表語句設定id為主鍵,自增,設定name屬性非空,設定age屬性唯一,設定age的預設值25,插入資料時候如果沒有為age設定,則取值預設的25。