從零學習數據庫mysql--表的操做

數據庫的完整性

什麼是數據的完整性

保證用戶輸入的數據保存到數據庫中是正確的。mysql

如何添加數據完整性

在建立表時給表中添加約束sql

完整性分類

  1. 實體完整性
  2. 域完整性
  3. 參照完整性

實體完整性

  1. 什麼是實體完整性

表中的一行(一條記錄)表明一個實體(entity)數據庫

  1. 實體完整性的做用

標識每一行數據不重複。行級約束3d

  1. 約束類型
  1. 主鍵約束(primary key)
  2. 惟一約束(unique)
  3. 自動增加列(auto_increment)
  1. 主鍵約束

特色:code

  1. 每一個表中要有一個主鍵
  2. 數據惟一,且不能爲null

添加主鍵約束的方式blog

CREATE TABLE 表名(字段名1 數據類型 primary key,字段2 數據類型);
CREATE TABLE 表名(字段1 數據類型, 字段2 數據類型,primary key(要設置主鍵的字段));
CREATE TABLE 表名(字段1 數據類型, 字段2 數據類型,primary key(主鍵1,主鍵2));

聯合主鍵: 兩個字段數據同時相同時,才違反聯合主鍵約束。圖片

1.先建立表rem

2.再去修改表,添加主鍵字符串

ALTER TABLE student  ADD CONSTRAINT  PRIMARY  KEY (id);
  1. 惟一約束:

特色:it

  1. 指定列的數據不能重複
  2. 能夠爲空值
CREATE TABLE 表名(字段名1 數據類型 字段2 數據類型 UNIQUE);
  1. 自動增加列

特色:

  1. 指定列的數據自動增加
  2. 即便數據刪除,仍是從刪除的序號繼續往下
CREATE TABLE 表名(字段名1 數據類型 PRIMARY KEY AUTO_INCREMENT ,字段2 數據類型 UNIQUE);

域完整性

限制此單元格的數據正確,不對照此列的其它單元格比較
域表明當前單元格

域完整性約束:

  1. 數據類型 :
    數值類型、日期類型、字符串類型

  2. 非空約束(not null)

    CREATE TABLE 表名(字段名1 數據類型 PRIMARY KEY AUTO_INCREMENT ,字段2 數據類型 UNIQUE not null);
  3. 默認值約束(default)

CREATE TABLE 表名(字段名1 數據類型 PRIMARY KEY AUTO_INCREMENT ,字段2 數據類型 UNIQUE not null default '男');

​ 插入的時候,values當中的值直接給default

參照完整性

  1. 什麼是參照完整性

    是指表與表之間的一種對應關係
    一般狀況下能夠經過設置兩表之間的主鍵、外鍵關係,或者編寫兩表的觸發器來實現。
    有對應參照完整性的兩張表格,在對他們進行數據插入、更新、刪除的過程當中,系統都會將被修改表格與另外一張對應表格進行對照,從而阻止一些不正確的數據的操做。
    數據庫的主鍵和外鍵類型必定要一致;
    兩個表必須得要是InnoDB類型
    設置參照完整性後 ,外鍵當中的內值,必須得是主鍵當中的內容

  2. 一個表設置當中的字段設置爲主鍵,設置主鍵的爲主表

    CREATE TABLE student(sid int PRIMARY key,name varchar(50) not null,sex varchar(10) default '男');
  3. 建立表時,設置外鍵,設置外鍵的爲子表

    CREATE TABLE score(
    sid INT,
    score DOUBLE,
    CONSTRAINT fk_stu_score_sid FOREIGN KEY(sid) REFERENCES student(id));

表之間關係

  1. 一對一
    一夫一妻
  2. 一對多關係
    一我的能夠擁有多輛汽車,要求查詢某我的擁有的全部車輛。
    建立Person表
    在這裏插入圖片描述
    建立Car表 在這裏插入圖片描述
    在這裏插入圖片描述
  3. 多對多關係
  1. 學生選課,一個學生能夠選修多門課程,每門課程可供多個學生選擇。
  2. 一個學生能夠有多個老師,而一個老師也能夠有多個學生

建立老師表
在這裏插入圖片描述
建立學生表
在這裏插入圖片描述
建立學生與老師關係表
在這裏插入圖片描述
關係圖
在這裏插入圖片描述

添加外鍵
在這裏插入圖片描述
在這裏插入圖片描述

多表操做

合併結果集

  1. 什麼是合併結果集

合併結果集就是把兩個select語句的查詢結果合併到一塊兒

  1. 合併結果集的兩種方式
  1. UNION
    合併時去除重複記錄
  2. UNION ALL
    合併時不去除重複記錄

格式:
UNION:

SELECT * FROM 表1 UNION SELECT * FROM 表2;
SELECT * FROM 表1 UNION ALL SELECT * FROM 表2;

建立表:
在這裏插入圖片描述
UNION:
在這裏插入圖片描述
在這裏插入圖片描述
UNION ALL:
在這裏插入圖片描述
在這裏插入圖片描述

注意事項:被合併的兩個結果:列數、列類型必須相同。

多表聯查:

  1. 什麼是鏈接查詢

也能夠叫跨表查詢,須要關聯多個表進行查詢

  1. 什麼是笛卡爾集

假設集合A={a,b},集合B={0,1,2},
則兩個集合的笛卡爾積爲{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。
能夠擴展到多個集合的狀況
同時查詢兩個表,出現的就是笛卡爾集結果

  1. 查詢時給表起別名
    在這裏插入圖片描述
  2. 多表聯查,如何保證數據正確
    逐行判斷,相等的留下,不相等的全不要
    在這裏插入圖片描述

鏈接查詢

1. 內鏈接

內鏈接
圖示:
在這裏插入圖片描述
做用:查詢兩張表的共有部分
語句:

Select <select_list> from tableA A  Inner join  tableB B  on A.Key = B.Key

示例:

SELECT * from employee e  INNER JOIN department d on e.depart_id = d.id;

多表鏈接:
建表:
在這裏插入圖片描述
使用99鏈接法:
在這裏插入圖片描述
使用內聯查詢
在這裏插入圖片描述
在這裏插入圖片描述

2. 左鏈接

圖示
在這裏插入圖片描述
做用: 把左邊表的內容所有查出,右邊表只查出知足條件的記錄
語句:

Select <select_list> from tableA A Left Join  tableB B  on A.Key = B.Key

示例

SELECT * from employee e  LEFT JOIN department d on e.depart_id = d.id;

在這裏插入圖片描述 在這裏插入圖片描述

3. 右鏈接

圖示:
在這裏插入圖片描述
做用

把右邊表的內容所有查出,左邊表只查出知足條件的記錄

語句

Select <select_list> from tableA A Right Join  tableB B  on A.Key = B.Key

示例

SELECT * from employee e  RIGHT JOIN department d on e.depart_id = d.id;

在這裏插入圖片描述
在這裏插入圖片描述

相關文章
相關標籤/搜索