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型子查詢(將禪薰結果當成表來用)