MySQL學習總結(5):列屬性

列屬性

空屬性

學到這裏突然發現一個大問題,原來創建字段時最好不要留null,會引發很多問題https://www.cnblogs.com/balfish/p/7905100.html

所以創建或添加字段時最好加上not null

列描述

跟註釋差不多意思,最好在創建的時候就聲明:

當然也可以創建好後再加,但不建議這樣做,因爲修改該字段描述時相當於重新創建該字段:

默認值

同樣,最好在創建時就設置:

當然也可以創建好後修改:

以下爲例子:

創建好my_set後,有兩個字段data1和data2,其中data1的默認值爲0:

data2沒有默認值

向data2插入數據後發現data1用了默認值

主鍵

接下來區分幾個概念:

超碼是用來唯一區分各行的字段(的集合),候選碼是最小的超碼(即最少的可以構成超碼的字段集合),而主碼即主鍵就是程序員選擇的候選碼(因爲候選碼可能不止一個)

添加主鍵

在設置新表時創建:

1. 在最後加primary key(字段名集合)

可見主鍵會被默認置非空

(插個題外話:剛好上網查了一下發現sublime也可以編輯sql並運行https://www.jianshu.com/p/bd77910e4d2e?from=jiantop.com,這樣就不用在命令行這麼麻煩啦)

這種創建方法的好處是可以創建複合鍵,即多個字段組合來區分各行:

2. 在字段後面加primary key:

但這種方法的缺點是隻能指定一個字段爲主鍵

創建後再設定主鍵:

3. alter table 表名 add primary key(字段名);  --這種方法也可以創建複合主鍵

注意,對於任何方式創建主鍵,只能是之前沒有主鍵的纔可以這樣做,即主鍵一旦創建過就不能再增添了

主鍵約束:

不同行的主鍵必須不同,這樣主鍵才起到區分作用,因此若同一個主鍵有相同的值會報錯,這裏就不貼圖了

刪除主鍵:

想要更新主鍵(對應的那個字段),必須先刪除主鍵屬性才能操作:

alter table 表名 drop primary key;

自動增長

自動增長是一個跟日期時間類型中timestamp類型一樣神奇的類型,因爲它會自動增長,即

auto_increment,當對應的字段,不給值,或者是默認值,或者是null的時候,就會自動的被系統觸發,系統會從當前字段中取已有的最大值再進行+1操作,得到新的字段值。

自增長通過跟主鍵進行搭配使用,其特點爲:

  • 任何字段要做自增長,前提其本身必須是一個索引,即key欄有值;
  • 自增長字段必須是數字(整型);
  • 每張表最多有一個自增長字段。

使用自增長:

並且可以通過show create table 表名查看下一次的增長值是什麼

修改自增長:

即修改下次的值:

alter table 表名 auto_increment = 值;

但注意,只有當這個值比當前的值大時纔會生效,否則不生效

(不僅感嘆一句看着sublime的五顏六色心裏好爽)

這裏我們看到自增長是從1開始的,並且增量是1,而這兩個值是可以改變的:

修改增量爲3,初始值爲2:

但我發現這跟說好的不一樣,,,因爲修改auto_increment_offset無效,不知道爲什麼,所以就還是用alter table的方式來修改初始值了,再次創建表來驗證:

注意這個set的修改是會話級別的,意思就是當次命令行有效,關掉後再開的話就不行了,而且修改的是整個數據庫

刪除自增長:

因爲自增長是列屬性,所以通過modify的方式刪除,有個坑就是不能再寫primary key,否則報錯,應這樣刪除:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章