mysql資料庫多對多設計(資料庫設計一對多)

本文目錄一覽:

mysql 多對多映射關係的篩選SQL怎麼寫

call sp_add();

是不是你定義的過程有問題吧,並沒有指出返回結果來

像我這樣是可以的:

CREATE PROCEDURE sp_add(a int, b int,out c int)

begin

set c=a+ b;

end;

調用過程:

call sp_add (1,2,@a);

select @a;

mysql資料庫中如何用一對多表示多對多

拿用戶角色來說

用戶  ←多對多→ 角色

概念模型如下:

生成物理模型就成了2個1對多:

箭頭指向多的一方

請問資料庫在創建表的時候如何設計表關係,一對一,一對多,多對多 請高手舉例說明。謝謝!!!

多對多關係至少需要3個表,我們把一個表叫做主表,一個叫做關係表,另外一個叫做字典表或者副表(字典表是紀錄比較少,而且基本穩定的,例如:版塊名稱;副表是內容比較多,內容變化的,例如)。

按照資料庫的增刪查改操作,多對多關係的查找都可以用inner join或者

select * from 主表 where id in (select 主表id from 關係表)

1,角色任命型

特點:關係表兩外鍵組合無重複紀錄,關係表一般不需要時間欄位和主鍵,有一個表是字典類型的表。

界面特點:顯示主表,用checkbox或多選select設置多選關係。

例如:任命版主(用戶表-關係表-版塊名稱表),角色許可權控制等,用戶是5個版塊版主,只要關係表5行紀錄就可以確立,關係表的兩個外鍵具有聯合主鍵性質。

增加關係:如果沒有組合紀錄,insert之。

刪除關係:如果有組合紀錄,刪除之。

2,集合分組型

特點:同角色任命型類似,關係表兩外鍵組合無重複紀錄,關係表一般不需要時間欄位和主鍵。區別是主副表都不是字典表,可能都很大不固定。

界面特點:顯示主表,用搜索代替簡單的checkbox或多選select,或者一條一條的添加。

例如:歌曲專集(專集表-關係表-歌曲表)。手機分組(分組表-關係表-手機表)。用戶圈子(圈子表-關係表-用戶表)。文章標籤(文章表-關係表-標籤表)

增加關係:同版主任命型。

刪除關係:同版主任命型。

3,明細帳型

特點:關係表可以有重複紀錄,關係表一般有時間欄位,有主鍵,可能還有文字型的欄位用來說明每次發生關係的原因(消費)。

界面特點:顯示關係表,用radio或下拉設置單選關係。

例如:現金消費明細帳或訂單(用戶表-訂單表-消費原因表),用戶可能多次在同一事情上重複消費。積分變化紀錄也屬於這類。

增加關係:不管有沒有組合紀錄,insert之,紀錄時間。

刪除關係:根據關係表PK刪除。

4,評論回復型

特點:同明細帳型關係表一般有時間欄位,有主鍵,區別是重點在文字型的欄位用來說明每次發生關係的內容(評論回復)。

界面特點:回復文本框。

例如:論壇回復(用戶表-回復表-帖子表),用戶可能多次在不同帖子上評論回復費。

增加關係:不管有沒有組合紀錄,insert之,紀錄時間和文字。

刪除關係:根據關係表(回復表)PK刪除。

5,站內簡訊型

特點:主副表是同一個,關係表一般有時間欄位,有主鍵,重點在關係表文字型的欄位用來說明每次發生關係的內容(消息)或者其他標記位來表示文字已讀狀態時間等。

界面特點:回復文本框。

例如:站內簡訊(用戶表-簡訊表-用戶表),用戶可能給用戶群發或者單發,有標記位來表示文字已讀狀態時間等。

增加關係:不管有沒有組合紀錄,insert之,紀錄時間和文字。

刪除關係:根據關係表(回復表)PK刪除。

6,用戶好友型

特點:主副表是同一個,同集合分組型,關係表兩外鍵組合無重複紀錄,關係表一般不需要時間欄位和主鍵。

界面特點:同集合分組型,顯示主表,用搜索代替簡單的checkbox或多選select,或者一條一條的添加。

例如:下載站點的文件,(文件表-關係表-文件表)可以被軟體工具打開,軟體工具本身也是一種文件,可以被下載。用戶的好友,也是用戶(用戶表-好友關係表-用戶表)

增加關係:同版主任命型。

刪除關係:同版主任命型

關於多對多關係表做一個級聯更新的問題(MYSQL),求高手解答SQL語句

樓主這個級聯更新我才疏學淺給分為2步驟, 先更新A表。 在更新B表,一條語句更新2張表的寫法我目前寫不來。下面是我的sql 你看是否與你的要求一致。

–更新A表update A set A.tag=0 from A INNER JOIN ( –獲取 多對多關係C表 並根據A表時間來獲得需要更新的A表ID 和B表ID select c.Aid,c.Bid from C INNER JOIN A ON A.id = c.Aid INNER JOIN B ON B.id =c.Bid where A.TimegetDate() –根據某時間條件。 AND A.Tag =0 –A的Tag 為0 時 ) result

ON resule.Aid=A.ID

–更新B表update B set B.tag=0 from B INNER JOIN ( –獲取 多對多關係C表 並根據A表時間來獲得需要更新的A表ID 和B表ID select c.Aid,c.Bid from C INNER JOIN A ON A.id = c.Aid INNER JOIN B ON B.id =c.Bid where A.TimegetDate() –根據某時間條件。 AND A.Tag =0 –A的Tag 為0 時 ) result

ON resule.Bid=B.ID

mysql建立外鍵時,多對多如何建立?

一張表中的主鍵只能有一個,外鍵可以有多個,如果一張表中多個列都需要被別的表的外鍵參考,需要使用候選碼(非空並且唯一),具體到你的這個問題的需求可以考慮用如下方法解決:

把a表中的bookid和authorid都設置為非空並且唯一,即

create table a(bookid int not null unique, authorid int not null unique);

然後在book表和author表中就可以分別設置外鍵來參照a表中兩個不同的欄位了。

打開我的navicat,然後找到我的teacher表,選中它,然後點擊菜單欄上的『design table’

2. 在彈出的對話框中找到「Foreign Keys」,然後單機。

3. 然後會出現一個設置外鍵的界面,一共有七列。簡單介紹一下這幾列的意思。『name』:可以不填,你一會保存成功系統會自動生成。FieldName』:就是你要把哪個鍵設置為外鍵。這裡選擇『dept』,『Reference DadaBase』:外鍵關聯的資料庫。『Reference Table『 :關聯的表 這裡是dept表『Forgin filed Names』:關聯的的欄位,這裡是code『ondelete』:就是刪除的時候選擇的動作。這裡我的選擇是setNull,意思就是當關聯的表刪除以後,teacher》dept欄位會設置為null.

4. 設置完成後點擊『save』保存退出,也可以點擊『add Foreign Key』再添加一個外鍵。

打開我的navicat,然後找到我的teacher表,選中它,然後點擊菜單欄上的『design table』。如下圖:

2. 在彈出的對話框中找到「Foreign Keys」,然後單機。如下圖:

3. 然後會出現一個設置外鍵的界面,一共有七列。簡單介紹一下這幾列的意思。『name』:可以不填,你一會保存成功系統會自動生成。FieldName』:就是你要把哪個鍵設置為外鍵。這裡選擇『dept』,『Reference DadaBase』:外鍵關聯的資料庫。『Reference Table『 :關聯的表 這裡是dept表『Forgin filed Names』:關聯的的欄位,這裡是code『ondelete』:就是刪除的時候選擇的動作。這裡我的選擇是setNull,意思就是當關聯的表刪除以後,teacher》dept欄位會設置為null。如圖

4. 設置完成後點擊『save』保存退出,也可以點擊『add Foreign Key』再添加一個外鍵。k如圖:

mysql資料庫多對多的表怎麼寫

關係單獨維護一張關係表 這樣就OK了 一張用戶表,一張關係表。。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/309133.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-04 19:30
下一篇 2025-01-04 19:30

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的資料庫存儲引擎

    本文將介紹兩款高性能的資料庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • Python怎麼導入資料庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的資料庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL資料庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28

發表回復

登錄後才能評論