mysql表一对多关系,mysql表与表之间的关系(多对多,一对多)
#創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE day15;
#使用
USE day15;
#創(chuàng)建表
CREATE TABLE test1(
id INT PRIMARY KEY AUTO_INCREMENT,#這是主鍵
num INT UNIQUE,#這個(gè)唯一鍵不起作用?
NAME VARCHAR(22)
);
#存入數(shù)據(jù)
INSERT INTO test1(NAME) VALUES(‘a(chǎn)aa‘);
#刪除數(shù)據(jù)但是不重置自動(dòng)增長(zhǎng)數(shù)
DELETE FROM test1;
#刪除數(shù)據(jù)重置行數(shù)(相當(dāng)于刪除掉整個(gè)表,然后再創(chuàng)建)
TRUNCATE TABLE test1;
############表與表之間的關(guān)系#####################
###一對(duì)多(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);
###測(cè)試(查詢)
#主表存入數(shù)據(jù)
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‘);
#從表存入數(shù)據(jù)
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,笛卡爾積,兩個(gè)表的乘積集合
SELECT * FROM t_user,t_book;
SELECT COUNT(*) FROM t_user,t_book;
#2 隱式內(nèi)連接
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內(nèi)連接
SELECT u.username,b.title FROM t_user u INNER JOIN t_book b ON u.id =b.`user_id`;
###4外鏈接
#左外連接:查詢A表所有內(nèi)容,設(shè)定條件顯示B表內(nèi)容
SELECT * FROM t_user u LEFT OUTER JOIN t_book b ON u.id = b.user_id;
#右外鏈接:查詢B表所有內(nèi)容,顯示符合條件的A表內(nèi)容
SELECT * FROM t_user u RIGHT OUTER JOIN t_book b ON u.id = b.user_id;
#######多對(duì)多(多對(duì)多是B表多項(xiàng)被A表多項(xiàng)引用)
##主表:學(xué)生表
CREATE TABLE m_student(
id VARCHAR(32) PRIMARY KEY, #主鍵
NAME VARCHAR(50),
age INT
);
##主表:中間表,學(xué)生課程表
CREATE TABLE m_course(
id VARCHAR(32) PRIMARY KEY, #主鍵
content VARCHAR(50),
teacher VARCHAR(50)
);
##從表:中間表,學(xué)生課程表
CREATE TABLE m_student_course(
student_id VARCHAR(32), #學(xué)生對(duì)應(yīng)外鍵
course_id VARCHAR(32) #課程表對(duì)應(yīng)外鍵
);
#######關(guān)系
###中間表與學(xué)生表:主外鍵關(guān)系
ALTER TABLE m_student_course ADD CONSTRAINT FOREIGN KEY (student_id) REFERENCES m_student (id);
###中間表與課程表:主鍵關(guān)系
ALTER TABLE m_student_course ADD CONSTRAINT FOREIGN KEY (course_id) REFERENCES m_course (id);
###聯(lián)合主鍵
ALTER TABLE m_student_course ADD CONSTRAINT PRIMARY KEY (student_id,course_id);
###外鍵刪除
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;
###測(cè)試
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‘);
##查詢:某人學(xué)某課
#隱式內(nèi)連接
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;
#內(nèi)連接
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
總結(jié)
以上是生活随笔為你收集整理的mysql表一对多关系,mysql表与表之间的关系(多对多,一对多)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java类同步,Java同步工具類(一)
- 下一篇: pythongif字符动图,利用Pyth