天天看點

問題解決 | 連接配接資料庫成功後,資料無法寫入前言一、項目配置二、出現問題三、問題解決四、相關概念五、方法介紹總結參考文獻

文章目錄

  • 前言
  • 一、項目配置
  • 二、出現問題
  • 三、問題解決
  • 四、相關概念
    • 主鍵、外鍵
    • 主鍵自增
      • 自增值修改機制
      • 自增值新增機制
      • 為什麼自增主鍵不連續
  • 五、方法介紹
  • 總結
  • 參考文獻

前言

今年研一,參加了學校挑戰杯,項目中需要完成一個登陸及注冊頁的制作,登陸和注冊頁代碼參考了網絡資源,遇到資料庫連接配接完成,卻不能把資料寫入資料庫的問題,研究了一下午最後終于解決。

一、項目配置

登陸注冊頁面在Adobe Dreamweaver上用html+css+js完成,資料庫等環境用wampserver內建環境。

二、出現問題

網頁同資料庫連接配接成功,但使用者注冊、登入頁面的資料不能正常寫入資料庫中。

三、問題解決

一開始以為是代碼出現了問題,查了一下午的相關代碼,發現符合。查閱其他資料時,發現有很多人提到關于資料庫中關于主鍵設定自增的問題,查閱了如何設定主鍵自增後,設定自增,問題解決,自己真是一個大冤種。

四、相關概念

在問題解決之前,先了解一些相關的基本概念。

主鍵、外鍵

關系型資料庫中的一條記錄中有若幹個屬性,若其中某一個屬性組能唯一辨別一條記錄,該屬性組就可以成為一個主鍵。

例:

學生表(學号,姓名,性别,班級)

其中每一名學生的學号是唯一的,學号是一個主鍵。

課程表(課程編号,課程名,學分)

其中課程編号是唯一的,課程編号就是一個主鍵。

成績表(學号,課程号,成績)

成績表中單一一個屬性無法唯一識别一條記錄,學号和課程号的組合才能唯一辨別一條記錄,是以學号和課程号的屬性組是一個主鍵。

成績表中的學号不是成績表的主鍵,但它和學生表中的學号相對應,并且學生表中的學号是學生表的主鍵,則稱成績表中的學号是學生表的外鍵。

定義主鍵和外鍵主要是為了維護關系資料庫的完整性,總結一下:

1.主鍵是能确定一條記錄的唯一辨別,比如,一條記錄包括身份證号,姓名,年齡。身份證号是唯一能确定你這個人的,其他都有可能重複,是以身份證号是主鍵。

2.外鍵用于與另一張表的關聯。是能确定另一張表記錄的字段,用于保持資料的一緻性。比如,A表中的一個字段,是B表的主鍵,那它就可以是A表的外鍵。

主鍵自增

InnoDB引擎的自增值,其實是儲存在記憶體裡,并且到了MySQL8.0版本之後,才有了自增值持久化的能力。也就是實作了如果發生重新開機後,表的自增值可以恢複為MySQL重新開機前的值。

在MySQL5.7及之前的版本,自增值儲存在記憶體裡,并沒有持久化。每次重新開機後,第一次打開表的時候,都會去找自增值的最大值max(id),然後将max(id)+1作為這個表目前的自增值。

在MySQL8.0版本,将自增值的變更記錄在redo log日志中,重新開機的時候依靠redo log日志恢複重新開機之前的值。

自增值修改機制

1.如果插入資料時id字段指定為0、null、或未指定值,那麼就把這個表目前的AUTO_INCREMENT值填到自增字段;

2.如果插入資料時id字段制定了具體的值,就直接使用語句裡指定的值

自增值新增機制

1.如果準備插入的值>=目前自增值,新的自增值就是準備插入的值+1;

2.否則,自增值不變。

為什麼自增主鍵不連續

  • 在MySQL 5.7及之前的版本,自增值儲存在記憶體裡,并沒有持久化
  • 事務復原(自增值不能復原,因為并發插入資料時,復原自增ID可能會造成主鍵沖突)
  • 唯一鍵沖突(由于表的自增值已變,但是因為主鍵發生沖突沒插進去,下一次插入主鍵值=現在變化了的自增值+1,是以不連續)

五、方法介紹

問題解決 | 連接配接資料庫成功後,資料無法寫入前言一、項目配置二、出現問題三、問題解決四、相關概念五、方法介紹總結參考文獻

在添加字段的時候,設定id為主鍵,并且在上圖方框示意處打勾,即主鍵自增。選擇後,網頁資料可正常寫入資料庫。

總結

以上就是今天要講的内容,本文簡單介紹了主鍵的相關知識,并且講述了如何設定主鍵自增。

參考文獻

1.資料庫主鍵的含義

https://www.cnblogs.com/rainbow-1/p/13907272.html

2.主鍵自增了解

hhttps://blog.csdn.net/ag1412/article/details/122746348