1. 程式人生 > >java學習之路——第四十三天

java學習之路——第四十三天

12.21

MySQL day05

-- 完整性約束

## 唯一約束:unique

-- 指定欄位為唯一約束的時候,它的值不能重複,一張表中可以有多個唯一約束

-- 將student表中的tel和ID設定為唯一約束

DROP TABLE student;

CREATE TABLE student(

   sid INT PRIMARY KEY AUTO_INCREMENT,

   sname CHAR(10),

   tel CHAR(11) UNIQUE,

   ID CHAR(18) UNIQUE

);

 

INSERT INTO student(sname,tel,ID) VALUES('張三','11111111111','124578963124578963');

INSERT INTO student(sname,tel,ID) VALUES('李四','12','14578963124578963');

 

## 外來鍵約束

-- 外來鍵和主鍵是建立表與表之間關係的唯一途徑,往往一張表的主鍵是另一張表的外來鍵

-- 外來鍵是另一張表的主鍵,例如員工表與部門表就存在關係,部門表的主鍵就是員工表的外來鍵

-- 語法:1.建立表的時候建立 2.通過修改表的結構建立外來鍵

-- constraint 外來鍵名 foreign key(欄位名) reference 相對於哪張表的外來鍵(表主鍵);

-- 建立一個使用者表

CREATE TABLE t_user(

  uid INT PRIMARY KEY AUTO_INCREMENT,

  uname CHAR(10)

);

-- 建立一個版塊表,沒一個版塊都是由使用者表中的使用者管理

CREATE TABLE t_section(

  sid INT PRIMARY KEY AUTO_INCREMENT,

  sname CHAR(10),

  u_id INT,

  CONSTRAINT fk_t_user FOREIGN KEY(u_id) REFERENCES t_user(uid)

);

 

INSERT INTO t_user(uname) VALUES('zs');

INSERT INTO t_user(uname) VALUES('ls');

INSERT INTO t_user(uname) VALUES('ww');

 

INSERT INTO t_section(sname,u_id) VALUES('java',1);

INSERT INTO t_section(sname,u_id) VALUES('.net',1);

INSERT INTO t_section(sname,u_id) VALUES('php',2);

 -- 報錯 ,u_id的值必須是t_user中的主鍵

-- 查詢zs管理哪個版塊

SELECT sname FROM t_section WHERE t_section.`u_id`=1;

 

## 表與表之間的關係

-- 一對一  一對多(多對一) 多對多

 CREATE DATABASE angStudent;

 USE angStudent;

 

## 多表之間的查詢操作

## 內連線:多表中的公共部分,就是數學中的集合的交集

-- 語法1:select 列名,列名。。。from 表名1,表名2 where 表名1.列名=表名2.列名;

-- 語法2:select * from 表名1 inner join 表名2 on 條件;

 

-- 外連結:1.左外連線:左表資料不動,右邊表的資料往左表新增,不管是否找到,都將左邊表全部資料

-- select * from A left outer join B on A.A_id = B.B_id;

-- 2.右外連線:右表資料不動,左邊表的資料往右表新增,不管是否找到,都將右邊表全部資料

-- select * from A right outer join B on A.A_id = B.B_id;

 

## 全外連線:左外連線和右外連線的結果合併,且會去掉重複的記錄

-- 語法:select * from 表1 full outer join 表2 on 條件;但是mysql資料庫不支援

 

## SQL語句子查詢

-- 子查詢:把一個sql的查詢結果作為另一個查詢的引數存在

-- 常見的子查詢有where型子查詢(將查詢結果當成條件來用)

-- from型子查詢(將禪薰結果當成表來用)