mysql 表關係 與 修改表結構

来源:https://www.cnblogs.com/guokaifeng/archive/2019/07/15/11186606.html
-Advertisement-
Play Games

mysql 表關係 與 修改表結構 [TOC] 兩張表關係 多對一 以員工和部門舉例 多個員工對應一個部門 foreign key 永遠是在多的那張表中設置外鍵 多個員工對應一個部門 員工表關聯部門表 員工表是多 部門表是一 foreign key(欄位信息多的) references 表(欄位信息 ...


目錄

mysql 表關係 與 修改表結構

兩張表關係

  • 多對一 以員工和部門舉例 多個員工對應一個部門 foreign key 永遠是在多的那張表中設置外鍵

"""
從左邊的表思考,這張表的多條信息是否能對應上右邊表的一條信息,能對應上(成立),再從右邊的表思考,
右表的多條信息是否能對應上左表的一條信息(不成立),那麼兩張表就可以確定是多對一關係,右表是多,左表是一,右邊表就是設置外鍵的表
"""
  • 多個員工對應一個部門
  • 員工表關聯部門表
  • 員工表是多 部門表是一
  • foreign key(欄位信息多的) references 表(欄位信息少的)

  • 多對多 以書和作者舉例 多個作者合作出一本書(成立),多本書是一個作者(成立)

  • 這時就(產成第三張表) 把兩個表的id,作為第三張表的外鍵,創建關係表

  • 多個作者可以共同出版一本書
  • 多本書可以是一個作者寫的
  • 關係表設置外鍵 foreign key 分別對應作者和書的id

  • 一對一 以客戶 和 學員為例 (一個客戶報名繳費後,只能對應一個學員)

  • 先有客戶表,客戶成交後成為學員,後出現的學員表設置外鍵,並且要約束這個外鍵是唯一,關聯客戶表一對一關係成立
  • 如果1和2都不成立,而是左表的一條記錄唯一對應右表的一條記錄,反之亦然。這種情況很簡單,
    就是在左表foreign key右表的基礎上,將左表的外鍵欄位設置成unique即可

分析步驟

"""
#1、先站在左表的角度去找
是否左表的多條記錄可以對應右表的一條記錄,如果是,則證明左表的一個欄位foreign key 右表一個欄位(通常是id)

#2、再站在右表的角度去找
是否右表的多條記錄可以對應左表的一條記錄,如果是,則證明右表的一個欄位foreign key 左表一個欄位(通常是id)

#3、總結:
#多對一:
如果只有步驟1成立,則是左表多對一右表
如果只有步驟2成立,則是右表多對一左表

#多對多
如果步驟1和2同時成立,則證明這兩張表時一個雙向的多對一,即多對多,需要定義一個這兩張表的關係表來專門存放二者的關係

#一對一:
如果1和2都不成立,而是左表的一條記錄唯一對應右表的一條記錄,反之亦然。這種情況很簡單,
就是在左表foreign key右表的基礎上,將左表的外鍵欄位設置成unique即可
"""

修改表結構

  • 對錶結構進行修改的情況在那些時候發生?

    • 創建項目之前
    • 項目開發、運行過程中
"""
語法:
1. 修改表名
      alter table 表名 
                      rename 新表名;

2. 增加欄位
      alter table 表名
                      add 欄位名  數據類型 [完整性約束條件…],
                      add 欄位名  數據類型 [完整性約束條件…];
                            
3. 刪除欄位
      alter table 表名 
                      drop 欄位名;

4. 修改欄位
      alter table 表名 
                      modify  欄位名 數據類型 [完整性約束條件…];
      alter table 表名 
                      change 舊欄位名 新欄位名 舊數據類型 [完整性約束條件…];
      alter table 表名 
                      change 舊欄位名 新欄位名 新數據類型 [完整性約束條件…];

5.修改欄位排列順序/在增加的時候指定欄位位置
    alter table 表名
                     add 欄位名  數據類型 [完整性約束條件…]  first;
    alter table 表名
                     add 欄位名  數據類型 [完整性約束條件…]  after 欄位名;
    alter table 表名
                     change 欄位名  舊欄位名 新欄位名 新數據類型 [完整性約束條件…]  first;
    alter table 表名
                     modify 欄位名  數據類型 [完整性約束條件…]  after 欄位名;


6.去掉null約束
create table t(id int unique,name char(10) not null);
alter table t modify name char(10) null;


7.添加null約束
alter table t modify name char(10) not null;


8.去掉unique約束
alter table t drop index id;


9.添加unique約束
alter table t modify id int unique;

10.刪除表
drop table 表名;

"""
  • alter table 表名 modify 修改已經存在的欄位 的類型 寬度 約束

  • alter table 表名 change 修改已經存在的欄位 的類型 寬度 約束 和 欄位名字

  • alter table 表名 add 欄位名 數據類型(寬度) 約束 first/after name

  • alter table 表名 drop 欄位名

  • alter table 表名 modify name varchar(12) not null

  • alter table 表名 change name new_name varchar(12) not null

    • id name age
  • alter table 表名 modify age int not null after id;

  • alter table 表名 modify age int not null first;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 引子 什麼是索引 為什麼需要索引 使用索引 索引優化原理 正確使用索引 什麼是索引 在關係資料庫中,索引是一種單獨的、物理層面的對資料庫表中一列或多列的值進行排序的一種存儲結構; 也稱之為 有以下幾種: unique key primary key index key 索引的作用相當於圖書的目錄,可 ...
  • mysql用戶管理 !這是dba的活兒!,但是萬一公司沒有dba? mysql用戶指的是什麼? 我們每一次在操作前都需要指定賬號和密碼,這個賬號就是mysql的用戶; 為什麼要管理? 一個公司不可能只有一個工程師,大公司,不不僅有很多工程師 還有很多不同部門,但是資料庫伺服器只有一個,大家都要訪問, ...
  • Declare @Pk varChar(100);Declare @TBname varChar(100);declare cursor1 cursor for Select Sys2.name as TBname,Sys1.name as Pk from sysobjects Sys1 JOIN ...
  • --設置主鍵 --alter table 你的表名 add constraint pk_s primary key (id) SELECT 'alter table ' + TABLE_NAME + ' add constraint PK_'+TABLE_NAME +'_'+ COLUMN_NAME ...
  • --修改欄位為首字母大寫 -- EXEC sp_rename 'ShenBao_CaiGouFuKuan.Tid', 'Tid', @objtype = 'COLUMN'; SELECT 'EXEC sp_rename ''' + TABLE_NAME + '.' + COLUMN_NAME + ' ...
  • 我們採用開源項目 go-mysql-elasticsearch 實現數據同步,並針對馬蜂窩技術棧和實際的業務環境進行了一些定製化開發。 ...
  • 下載地址:https://dev.mysql.com/downloads/mysql/ 這裡選擇的是5.5的版本: 步驟1: 步驟2: 步驟三: 步驟四: 步驟5: 步驟6: 步驟7: 步驟8: 步驟9: 步驟10: 步驟11: 步驟12: 以上就是MySQL5.5的安裝步驟。。。 ...
  • 最近很多人問小編現在學習大數據這麼多,他們都是如何學習的呢。很多初學者在萌生向大數據方向發展的想法之後,不免產生一些疑問,應該怎樣入門? 應該學習哪些技術? 學習路線又是什麼? 今天特意為大家整理了一份大數據從入門到精通的學習路線。並且附帶學習資料和視頻。希望能夠幫助到大家。 第一階段:Linux理 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...