MySQL笔记——外键约束和表关系(一对一,多对一,多对多)
生活随笔
收集整理的這篇文章主要介紹了
MySQL笔记——外键约束和表关系(一对一,多对一,多对多)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、外鍵約束
概念:外鍵用來讓兩個表的數據之間建立鏈接,保證數據的一致性和完整性。語法:(1)添加約束-- 創建表是添加外鍵約束CREATE TABLE 表名(列名 數據類型,…[CONSTRAINT] [外鍵名稱] FOREIGN KEY(外鍵列名) REFERENCE 主表(主表列名));-- 建完表后添加外鍵約束ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名稱) REFERENCE 主表名稱(主表列名稱)(2)刪除約束ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;案例
首先創建員工信息表和部門信息表,并在員工表中添加外鍵。(把員工表當作從表,部門表當作主表),員工表和部門表就是一個多對一的案例 -- 員工表 CREATE TABLE emp(id int PRIMARY KEY auto_increment, -- idname VARCHAR(20),-- 姓名age int, -- 年齡dep_id int, -- 部門-- 添加外鍵dep_id,關聯dept表的id主鍵CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id) );-- 部門表 CREATE TABLE dept(id int PRIMARY KEY auto_increment, -- 部iddep_name VARCHAR(20), -- 部門名稱addr VARCHAR(20) -- 地址 );INSERT INTO emp(NAME,age,dep_id) VALUES ('張三',20,1), ('李四',20,1), ('王五',20,1), ('趙六',20,2), ('田七',22,2), ('周八',18,2);INSERT INTO dept(dep_name,addr) VALUES ('研發部','廣州'), ('銷售部','深圳');-- 刪除外鍵 ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept;按照如下圖所示順序執行sql語句:部門表–>員工表–>部門信息–>員工信息
二、表關系之一對多
1、一對多(多對一)如:部門和員工,一個部門對應多個員工,一個員工對應一個部門2、實現方式:在多的一方建立外鍵,指向一的一方的主鍵3、具體實現參照上例,部門和員工。三、表關系之多對多
1、多對多如:商品和訂單,一個商品對應多個訂單,一個訂單包含多個商品2、實現方式建立第三張中間表,中間表至少包含兩個外鍵,分別關聯兩方主鍵3、實現案例: -- 訂單表 CREATE TABLE tb_order(id int PRIMARY KEY auto_increment, -- idpayment double(10,2),payment_type TINYINT,status TINYINT );-- 商品表 CREATE TABLE tb_goods(id int PRIMARY KEY auto_increment,title VARCHAR(100),price DOUBLE(10,2) );-- 訂單商品中間表 CREATE TABLE tb_order_goods(id int PRIMARY KEY auto_increment,order_id int,goods_id int,count int );-- 添加外鍵,向訂單商品中間表添加兩個外鍵,關聯商品表和訂單表的主鍵。 ALTER TABLE tb_order_goods ADD CONSTRAINT fk_order_id FOREIGN KEY(order_id) REFERENCES tb_order(id); ALTER TABLE tb_order_goods ADD CONSTRAINT fk_goods_id FOREIGN KEY(goods_id) REFERENCES tb_goods(id); 如圖執行創建三個表 執行添加外鍵的語句 再次執行上述‘逆向表到模型’ 具體對應關系如圖標注。四、表關系之一對一
1、一對一如:用戶信息和用戶詳情信息一對一關系多用于表拆分,將一個實體中經常使用的字段放一張表,不經常使用的字段放另一張表,用于提升查詢能力2、實現方式:在任意一方加入外鍵,關聯另一方主鍵,并且設置外鍵為唯一(UNIQUE)3、實現案例 -- 創建用戶表 CREATE TABLE tb_user(id int PRIMARY KEY auto_increment,photo VARCHAR(30),nickname VARCHAR(20),age int,sex char(2),desc_id int NOT NULL UNIQUE -- 設置關聯的用戶詳情表主鍵不為空且唯一 );-- 創建用戶詳情表CREATE TABLE tb_user_desc(id int PRIMARY KEY auto_increment,city VARCHAR(10),edu VARCHAR(10),income DOUBLE(7,2),status VARCHAR(10) );-- 添加用戶 INSERT INTO TABLE tb_user(photo,nickname,age,sex,desc_id) VALUES ('a.jpg','一場夢',23,'女',1), ('b.png','風清揚',35,'男',2), ('c.jpg','趙云',41,'男',3),-- 添加用戶詳情信息 INSERT INTO TABLE tb_user_desc(city,edu,income,status) VALUES ('廣州','碩士',300000,'單身'), ('湖北','本科',100000,'離異'), ('河南','本科',200000,'單身'),-- 添加外鍵 ALTER TABLE tb_user ADD CONSTRAINT fk_user_userdesc FOREIGN KEY(desc_id) REFERENCES tb_user_desc(id); 如圖執行語句創建用戶表和用戶詳情表 往兩張表中添加數據 添加外鍵 再次執行上述‘逆向表到模型’ 具體對應關系如圖。總結
以上是生活随笔為你收集整理的MySQL笔记——外键约束和表关系(一对一,多对一,多对多)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “恐龙”发威 中国电影市场103天后单日
- 下一篇: 解决SQL映射文件的警告提示