一千行MySQL學習筆記(三)

來源:互聯網
上載者:User

標籤:

/* 列屬性(列約束) */ ----------
1. 主鍵

- 能唯一標識記錄的欄位,可以作為主鍵。
- 一個表只能有一個主鍵。
- 主鍵具有唯一性。
- 聲明欄位時,用 primary key 標識。 也可以在欄位列表之後聲明

     例:create table tab ( id int, stu varchar(10), primary key (id));
- 主鍵欄位的值不能為null。
- 主鍵可以由多個欄位共同組成。此時需要在欄位列表後聲明的方法。

     例:create table tab ( id int, stu varchar(10), age int, primary key (stu, age));

2. unique 唯一索引(唯一約束)

   使得某欄位的值也不能重複。

3. null 約束

   null不是資料類型,是列的一個屬性。

   表示當前列是否可以為null,表示什麼都沒有。
   null, 允許為空白。預設。
   not null, 不允許為空白。
   insert into tab values (null, ‘val‘);
        -- 此時表示將第一個欄位的值設為null, 取決於該欄位是否允許為null

4. default 預設值屬性

 當前欄位的預設值。
   insert into tab values (default, ‘val‘); -- 此時表示強制使用預設值。

   create table tab ( add_time timestamp default current_timestamp );
      -- 表示將目前時間的時間戳記設為預設值。

       current_date, current_time

5. auto_increment 自動成長約束

   自動成長必須為索引(主鍵或unique)

   只能存在一個欄位為自動成長。

   預設為1開始自動成長。可以通過表屬性 auto_increment = x進行設定,或 alter table tbl auto_increment = x;

6. comment 注釋

  例:create table tab ( id int ) comment ‘注釋內容‘;

7. foreign key 外鍵約束

用於限制主表與從表資料完整性。
alter table t1 add constraint `t1_t2_fk` foreign key (t1_id) references t2(id);
    -- 將表t1的t1_id外部索引鍵關聯到表t2的id欄位。

    -- 每個外鍵都有一個名字,可以通過 constraint 指定

 存在外鍵的表,稱之為從表(子表),外鍵指向的表,稱之為主表(父表)。

 作用:保持資料一致性,完整性,主要目的是控制儲存在外鍵表(從表)中的資料。MySQL中,可以對InnoDB引擎使用外鍵約束:文法:
 foreign key (外鍵欄位) references 主表名 (關聯欄位) [主表記錄刪除時的動作] [主表記錄更新時的動作]此時需要檢測一個從表的外鍵需要約束為主表的已存在的值。外鍵在沒有關聯的情況下,可以設定為null.前提是該外鍵列,沒有not null。

  可以不指定主表記錄更改或更新時的動作,那麼此時主表的操作被拒絕。

  如果指定了 on update 或 on delete:在刪除或更新時,有如下幾個操作可以選擇:
  1. cascade,級聯操作。主表資料被更新(主索引值更新),從表也被更新(外索引值更新)。主表記錄被刪除,從表相關記錄也被刪除。
  2. set null,設定為null。主表資料被更新(主索引值更新),從表的外鍵被設定為null。主表記錄被刪除,從表相關記錄外鍵被設定成null。但注意,要求該外鍵列,沒有not null屬性約束。
  3. restrict,拒絕父表刪除和更新。

 注意,外鍵只被InnoDB儲存引擎所支援。其他引擎是不支援的。

 /* 建表規範 */ -------------------- Normal Format, NF

   - 每個表儲存一個實體資訊
   - 每個具有一個ID欄位作為主鍵
   - ID主鍵 + 原子表

-- 1NF, 第一範式
欄位不能再分,就滿足第一範式。

-- 2NF, 第二範式
滿足第一範式的前提下,不能出現部分依賴。 消除符合主鍵就可以避免部分依賴。增加單列關鍵字。

-- 3NF, 第三範式
滿足第二範式的前提下,不能出現傳遞依賴。 某個欄位依賴於主鍵,而有其他欄位依賴於該欄位。這就是傳遞依賴。 將一個實體資訊的資料放在一個表內實現。

/* select */ ------------------

 select [all|distinct] select_expr from -> where -> group by [合計函數] -> having -> order by -> limit

a. select_expr

-- 可以用 * 表示所有欄位。

 select * from tb;

-- 可以使用運算式(計算公式、函數調用、欄位也是個運算式)

 select stu, 29+25, now() from tb;

-- 可以為每個列使用別名。適用於簡化列標識,避免多個列標識符重複。

  - 使用 as 關鍵字,也可省略 as.
  select stu+10 as add10 from tb;

b. from 子句

用於標識查詢來源。
-- 可以為表起別名。使用as關鍵字。

  select * from tb1 as tt, tb2 as bb;
-- from子句後,可以同時出現多個表。

   -- 多個表會橫向疊加到一起,而資料會形成一個笛卡爾積。

   select * from tb1, tb2;

c. where 子句
-- 從from獲得的資料來源中進行篩選。-- 整型1表示真,0表示假。-- 運算式由運算子和運算數組成。

-- 運算數:變數(欄位)、值、函數傳回值

-- 運算子:

           =, <=>, <>, !=, <=, <, >=, >, !, &&, ||, in (not) null, (not) like, (not) in, (not) between and, is (not), and, or, not, xor
   is/is not 加上ture/false/unknown,檢驗某個值的真假 

   <=>與<>功能相同,<=>可用於null比較

d. group by 子句, 分組子句
group by 欄位/別名 [排序方式]

分組後會進行排序。升序:ASC,降序:DESC

以下[合計函數]需配合 group by 使用: 

count 返回不同的非NULL值數目 count(*)、count(欄位)
  sum 求和
  max 求最大值
  min 求最小值
  avg 求平均值

group_concat 返回帶有來自一個組的串連的非NULL值的字串結果。組內字串串連。

e. having 子句,條件子句

  與 where 功能、用法相同,執行時機不同。
  where 在開始時執行檢測資料,對原資料進行過濾。
  having 對篩選出的結果再次進行過濾。
  having 欄位必須是查詢出來的,where 欄位必須是資料表存在的。
  where 不可以使用欄位的別名,having 可以。因為執行WHERE代碼時,可能尚未確定列值。
  where 不可以使用合計函數。一般需用合計函數才會用 having

SQL標準要求HAVING必須引用GROUP BY子句中的列或用於合計函數中的列。

f. order by 子句,排序子句
 order by 排序欄位/別名 排序方式 [,排序欄位/別名 排序方式]...

 升序:ASC,降序:DESC

 支援多個欄位的排序。

g. limit 子句,限制結果數量子句

  僅對處理好的結果進行數量限制。將處理好的結果的看作是一個集合,按照記錄出現的順序,索引從0開始。

  limit 起始位置, 擷取條數

  省略第一個參數,表示從索引0開始。

limit 擷取條數

h. distinct, all 選項
    distinct 去除重複記

    預設為all, 全部記錄

(未完待續)
(Shocker 來源:http://www.cnblogs.com/shockerli/p/1000-plus-line-mysql-notes.html)

一千行MySQL學習筆記(三)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.