最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL語句中的主鍵和外鍵使用說明

 更新時(shí)間:2023年04月19日 11:12:52   作者:來威星際  
本文主要介紹了簡述MySQL主鍵和外鍵使用及說明,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

 一.主鍵:

1.1)主鍵字段定義:

在數(shù)據(jù)庫表中,如果有一組字段能夠唯一確定一條記錄,則可以把它們設(shè)計(jì)成表的主鍵字段。

例子:如果要創(chuàng)建一個(gè)人的信息表(字段:姓名,年齡,籍貫,工作單位......),那么身份證號是唯一能確定你這個(gè)人的,所以身份證號是主鍵。

1.2) 創(chuàng)建:

主鍵字段名 primary key

1.3)主鍵的選取原則;

原則上使用一個(gè)字段做主鍵,而且推薦使用沒有業(yè)務(wù)含義的字段做主鍵,比如:id等。

1.4)主鍵值的生成方式:

主鍵字段的類型和長度由主鍵值的生成方式來決定:

1.4.1)

自增:借助數(shù)據(jù)庫自身主鍵生成機(jī)制
           數(shù)值型 長度由數(shù)據(jù)量來決定

創(chuàng)建:主鍵字段名 primary key not null auto_increment

特點(diǎn):

優(yōu)點(diǎn):開發(fā)效率高,因?yàn)槠淇梢宰詣泳幪柷野错樞虼娣疟阌跈z索占用空間小,可以節(jié)省開發(fā)人員時(shí)間。

 缺點(diǎn): 運(yùn)行效率低且不靈活,因?yàn)槠渥詣釉鲩L,在手動要插入或?qū)胫付↖D的數(shù)據(jù)時(shí)會很麻煩且如果數(shù)據(jù)量過大那么越到后面,數(shù)據(jù)庫自增主鍵的時(shí)間會變長導(dǎo)致查詢數(shù)據(jù)庫的操作變慢。如果有合并表的操作時(shí),有概率還會出現(xiàn)主鍵的重復(fù)。

1.4.2)

assighed:程序員手動生成主鍵值,唯一非空,算法.
hi/low:數(shù)值型 長度由數(shù)據(jù)量決定
UUID:字符串 長度是32位

public class UUIDUtil {//java中自帶UUID的算法
    public static  String getUUID(){
        return UUID.randomUUID().toString().replaceAll("-", "");
    }
}

特點(diǎn):

優(yōu)點(diǎn):主鍵值生成很靈活且能夠保證在任何情況下都具有唯一性,數(shù)據(jù)遷移方便。                               

 缺點(diǎn):占用空間大,很難記憶,會降低性能。

1.4.4)

聯(lián)合主鍵:由多個(gè)字段的類型和長度決定

 二.外鍵:

2.1)外鍵定義:

通常用于在兩個(gè)表之間建立關(guān)系。外鍵的主要用途是維持實(shí)體的兩個(gè)獨(dú)立實(shí)例之間的數(shù)據(jù)完整性。

2.2)外鍵(約束)創(chuàng)建(不推薦使用,一般不進(jìn)行外鍵約束,只進(jìn)行外鍵約定):

alert table 主鍵表名 add constraint FK_ID(外鍵名稱) foreign key(外鍵字段名) references 外表表名(主鍵字段名)

 2.3)外鍵出現(xiàn)的情況:

補(bǔ)充:
 在創(chuàng)建表的時(shí)候,表和表之間可能會存在的業(yè)務(wù)關(guān)系(關(guān)聯(lián)關(guān)系),這時(shí)會產(chǎn)生外鍵。

關(guān)聯(lián)關(guān)系中存在的關(guān)系類型:

1對1:一張表(A)中的一條記錄只能對應(yīng)另一張表(B)中的一條記錄,另一張表(B)中的一條記錄也只能對應(yīng)一張表(A)中的一條記錄。 

              eg:軟工2777班和班長,公民和身份證。(商品表和該商品的描述表)

1對多:一張表(A)中的一條記錄可以對應(yīng)另一張表(B)中的多條記錄,另一張表(B)中的一條記錄只能對應(yīng)一張表(A)中的一條記錄。

              eg:商品的分類表和商品表示一對多的關(guān)系,一個(gè)商品分類下可以有多個(gè)商品,學(xué)生和班級

多對多:(有兩張表,A表中的一條數(shù)據(jù)對應(yīng)B表中的多條,同時(shí),B表中的一條對應(yīng)A表中的多條)

              eg:客戶表和部門表。

 關(guān)聯(lián)查詢(同時(shí)利用外鍵查詢多張表中的數(shù)據(jù))

 關(guān)聯(lián)查詢的類型:

內(nèi)連接:查詢所有符合條件的數(shù)據(jù),并且要求結(jié)果在兩張表中都有相對應(yīng)的記錄

左外連接:查詢左側(cè)表中所有符合條件的數(shù)據(jù),即使在右側(cè)表中沒有相對應(yīng)的記錄

右外連接:查詢右側(cè)表中所有符合條件的數(shù)據(jù),即使在左側(cè)表中沒有相對應(yīng)的記錄

2.3.1)在一對多中:

例子:A(1)---------B(n)
             父表         子表
tbl_student                    tbl_class
id      name class_id          id     name
1001    zs    111              111    class1
1002    ls    111              222    class2
1003    ww    222
1004    zl    

 //查詢所有姓張的學(xué)生的id,name和所在班級name
                                             select s.id,s.name,c.name as className
                                             from tbl_student s
                                              join tbl_class c on s.class_id=c.id//假如外鍵不可以為空
                                              where s.name like 'z%'

張表中有相對應(yīng)的記錄,使用內(nèi)連接。 ,假如需要查詢左側(cè)表中所有符合條件的記錄,使用左外連接.

 2.3.2)在一對一中:

tbl_person         tbl_card
id     name        id     name
1001   zs          1001    card1

特點(diǎn):
a)共享主鍵:(不推薦)
添加數(shù)據(jù):先添加先產(chǎn)生的表,再后產(chǎn)生的表記錄
刪除數(shù)據(jù):先刪除后產(chǎn)生的表記錄,再刪除先產(chǎn)生的表記錄
查詢數(shù)據(jù):無需進(jìn)行連接查詢:

  //查詢zhangsan的駕照信息  1001
                   select *
                   from tbl_card
                   where id='1001'

2.3.3)多對多:

tbl_student                    tbl_course
id     name                    id     name   
1001   zs                      111    java   
1002   ls                      222    mysql  
tbl_student_course_relation
student_id     course_id
1001            111
1001            222
1002            111
1002            222
特點(diǎn):

添加數(shù)據(jù)時(shí),先添加父表記錄(tbl_student,tbl_course),再添加子表(tbl_student_course_relation)記錄;
刪除數(shù)據(jù)時(shí),先刪除子表記錄(tbl_student_course_relation),再刪除父表記錄(tbl_student,tbl_course)
查詢數(shù)據(jù)時(shí),可能會進(jìn)行關(guān)聯(lián)查詢:

  //查詢所有姓張的學(xué)生的id,name,和所選課程的name
              select s.id,s.name,c.name as courseName
              from tbl_student s
                          join tbl_student_course_relation scr on s.id=scr.student_id
                          join tbl_course c on scr.course_id=c.id
              where s.name like 'z%'

三.主鍵和外鍵的區(qū)別總結(jié):

到此這篇關(guān)于MySQL語句中的主鍵和外鍵使用說明的文章就介紹到這了,更多相關(guān)MySQL主鍵和外鍵內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java的Struts框架中append標(biāo)簽與generator標(biāo)簽的使用

    Java的Struts框架中append標(biāo)簽與generator標(biāo)簽的使用

    這篇文章主要介紹了Java的Struts框架中append標(biāo)簽與generator標(biāo)簽的使用方法,Struts是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • MySQL 數(shù)據(jù)庫兩臺主機(jī)同步實(shí)戰(zhàn)(linux)

    MySQL 數(shù)據(jù)庫兩臺主機(jī)同步實(shí)戰(zhàn)(linux)

    MySQL支持單向、異步復(fù)制,復(fù)制過程中一個(gè)服務(wù)器充當(dāng)主服務(wù)器,而一個(gè)或多個(gè)其它服務(wù)器充當(dāng)從服務(wù)器。主服務(wù)器將更新寫入二進(jìn)制日志文件,并維護(hù)日志文件的一個(gè)索引以跟蹤日志循環(huán)。
    2009-04-04
  • mysql中url時(shí)區(qū)的陷阱該如何規(guī)避詳解

    mysql中url時(shí)區(qū)的陷阱該如何規(guī)避詳解

    最近在工作中發(fā)現(xiàn)一個(gè)問題,是關(guān)于mysql中url時(shí)區(qū)的,發(fā)現(xiàn)這個(gè)陷阱如果大家不注意可能都會遇到,所以給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于mysql中url時(shí)區(qū)的陷阱該如何規(guī)避的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-08-08
  • MYSQL使用inner join 進(jìn)行 查詢/刪除/修改示例

    MYSQL使用inner join 進(jìn)行 查詢/刪除/修改示例

    本文為大家介紹下使用inner join 進(jìn)行查詢/刪除/修改,具體實(shí)現(xiàn)如下,學(xué)習(xí)mysql的朋也可以學(xué)習(xí)下,希望對大家有所幫助
    2013-07-07
  • Mysql Limit 分頁查詢優(yōu)化詳解

    Mysql Limit 分頁查詢優(yōu)化詳解

    這篇文章主要介紹了Mysql Limit 分頁查詢優(yōu)化的相關(guān)資料,非常不錯,介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09
  • MySQL中數(shù)據(jù)類型的驗(yàn)證

    MySQL中數(shù)據(jù)類型的驗(yàn)證

    這篇文章主要介紹了MySQL中數(shù)據(jù)類型的驗(yàn)證 的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • 聊聊QT添加MySQL驅(qū)動依賴的問題

    聊聊QT添加MySQL驅(qū)動依賴的問題

    這篇文章主要介紹了QT添加MySQL驅(qū)動依賴的問題,本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • MySQL分區(qū)之子分區(qū)詳解

    MySQL分區(qū)之子分區(qū)詳解

    子分區(qū)(subpartition)是分區(qū)表中對每個(gè)分區(qū)的再次分割,又被稱為復(fù)合分區(qū),下面這篇文章主要給大家介紹了關(guān)于MySQL分區(qū)之子分區(qū)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Mysql的列修改成行并顯示數(shù)據(jù)的簡單實(shí)現(xiàn)

    Mysql的列修改成行并顯示數(shù)據(jù)的簡單實(shí)現(xiàn)

    這篇文章主要介紹了Mysql的列修改成行并顯示數(shù)據(jù)的簡單實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-10-10
  • 淺析mysql交互式連接&非交互式連接

    淺析mysql交互式連接&非交互式連接

    下面小編就為大家?guī)硪黄獪\析mysql交互式連接&非交互式連接。小編覺挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-03-03

最新評論

松潘县| 镇原县| 监利县| 桐柏县| 漠河县| 石首市| 山阴县| 离岛区| 龙山县| 明光市| 西畴县| 手游| 都江堰市| 贵溪市| 西林县| 太仆寺旗| 六盘水市| 调兵山市| 五莲县| 巢湖市| 库尔勒市| 蒙山县| 响水县| 温州市| 安陆市| 崇信县| 布尔津县| 土默特右旗| 朝阳县| 安义县| 漯河市| 修武县| 澄迈县| 涪陵区| 宜阳县| 达拉特旗| 泰州市| 满城县| 祁门县| 读书| 云阳县|