mysql表一对多关系,mysql表与表之间的关系(多对多,一对多)
#創建數據庫
CREATE DATABASE day15;
#使用
USE day15;
#創建表
CREATE TABLE test1(
id INT PRIMARY KEY AUTO_INCREMENT,#這是主鍵
num INT UNIQUE,#這個唯一鍵不起作用?
NAME VARCHAR(22)
);
#存入數據
INSERT INTO test1(NAME) VALUES(‘aaa‘);
#刪除數據但是不重置自動增長數
DELETE FROM test1;
#刪除數據重置行數(相當于刪除掉整個表,然后再創建)
TRUNCATE TABLE test1;
############表與表之間的關系#####################
###一對多(B表外鍵字段存著A表的唯一主鍵表示拿一行被A表引用)
#主表user
CREATE TABLE t_user(
id VARCHAR(22),
username VARCHAR(22),
PASSWORD VARCHAR(32)
);
#主表的主鍵
ALTER TABLE t_user ADD CONSTRAINT PRIMARY KEY (id);
#從表:book表
CREATE TABLE t_book(
id VARCHAR(22),
title VARCHAR(55),
author VARCHAR(50),
user_id VARCHAR(32)#外鍵
);
#從表外鍵引用主表主鍵
#格式:ALTER TABLE 從表名 ADD CONSTRAINT FOREIGN KEY (從表外鍵) REFERENCES 主表名 (主表主鍵);
ALTER TABLE t_book ADD CONSTRAINT FOREIGN KEY (user_id) REFERENCES t_user (id);
###測試(查詢)
#主表存入數據
INSERT INTO t_user(id,username,PASSWORD) VALUES(‘u001‘,‘琳琳‘,‘1234‘);
INSERT INTO t_user(id,username,PASSWORD) VALUES(‘u002‘,‘問我‘,‘1234‘);
INSERT INTO t_user(id,username,PASSWORD) VALUES(‘u003‘,‘恩恩‘,‘1234‘);
#從表存入數據
INSERT INTO t_book(id,title,author,user_id) VALUES(‘b001‘,‘短劍‘,‘麗麗‘,‘u001‘);
INSERT INTO t_book(id,title,author,user_id) VALUES(‘b002‘,‘宿舍‘,‘恩恩‘,‘u003‘);
INSERT INTO t_book(id,title,author,user_id) VALUES(‘b003‘,‘方法‘,‘額額‘,‘u001‘);
INSERT INTO t_book(id,title,author,user_id) VALUES(‘b004‘,‘覆蓋‘,‘44‘,‘u002‘);
#主表主鍵不能被刪除或更新,以為從表在使用
DELETE FROM t_user WHERE id=‘u001‘;
#############查詢
#1,笛卡爾積,兩個表的乘積集合
SELECT * FROM t_user,t_book;
SELECT COUNT(*) FROM t_user,t_book;
#2 隱式內連接
SELECT * FROM t_user,t_book WHERE t_user.id = t_book.user_id;
SELECT t_user.username,t_book.title FROM t_user,t_book WHERE t_user.id=t_book.user_id;
#3內連接
SELECT u.username,b.title FROM t_user u INNER JOIN t_book b ON u.id =b.`user_id`;
###4外鏈接
#左外連接:查詢A表所有內容,設定條件顯示B表內容
SELECT * FROM t_user u LEFT OUTER JOIN t_book b ON u.id = b.user_id;
#右外鏈接:查詢B表所有內容,顯示符合條件的A表內容
SELECT * FROM t_user u RIGHT OUTER JOIN t_book b ON u.id = b.user_id;
#######多對多(多對多是B表多項被A表多項引用)
##主表:學生表
CREATE TABLE m_student(
id VARCHAR(32) PRIMARY KEY, #主鍵
NAME VARCHAR(50),
age INT
);
##主表:中間表,學生課程表
CREATE TABLE m_course(
id VARCHAR(32) PRIMARY KEY, #主鍵
content VARCHAR(50),
teacher VARCHAR(50)
);
##從表:中間表,學生課程表
CREATE TABLE m_student_course(
student_id VARCHAR(32), #學生對應外鍵
course_id VARCHAR(32) #課程表對應外鍵
);
#######關系
###中間表與學生表:主外鍵關系
ALTER TABLE m_student_course ADD CONSTRAINT FOREIGN KEY (student_id) REFERENCES m_student (id);
###中間表與課程表:主鍵關系
ALTER TABLE m_student_course ADD CONSTRAINT FOREIGN KEY (course_id) REFERENCES m_course (id);
###聯合主鍵
ALTER TABLE m_student_course ADD CONSTRAINT PRIMARY KEY (student_id,course_id);
###外鍵刪除
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;
###測試
INSERT INTO m_student(id,NAME,age) VALUES(‘s001‘,‘宿舍‘,‘22‘);
INSERT INTO m_student(id,NAME,age) VALUES(‘s002‘,‘宿33‘,‘32‘);
INSERT INTO m_course(id,content,teacher) VALUES(‘c001‘,‘去你妹‘,‘問我‘);
INSERT INTO m_course(id,content,teacher) VALUES(‘c002‘,‘sad‘,‘恩恩‘);
INSERT INTO m_course(id,content,teacher) VALUES(‘c003‘,‘fdsa‘,‘額額‘);
INSERT INTO m_student_course(student_id,course_id) VALUES(‘s001‘,‘c001‘);
INSERT INTO m_student_course(student_id,course_id) VALUES(‘s002‘,‘c001‘);
INSERT INTO m_student_course(student_id,course_id) VALUES(‘s001‘,‘c002‘);
INSERT INTO m_student_course(student_id,course_id) VALUES(‘s002‘,‘c003‘);
##查詢:某人學某課
#隱式內連接
SELECT s.name , content FROM m_student s, m_student_course sc , m_course c
WHERE s.id = sc.student_id AND sc.course_id = c.id;
#內連接
SELECT s.name , c.content FROM m_student s
INNER JOIN m_student_course sc ON s.id = sc.student_id
INNER JOIN m_course c ON sc.course_id = c.id;
原文:http://www.cnblogs.com/linjiqian/p/4488959.html
總結
以上是生活随笔為你收集整理的mysql表一对多关系,mysql表与表之间的关系(多对多,一对多)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java类同步,Java同步工具類(一)
- 下一篇: pythongif字符动图,利用Pyth