列屬性
空屬性
學到這裏突然發現一個大問題,原來創建字段時最好不要留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,否則報錯,應這樣刪除: