一、簡介
MySql中,真正約束字段的是數據類型,但是數據類型的約束太單一,需要有一些額外的約束,來更加保證數據的合法性。
MySql中的常用列屬性有:null、not null、default、zerofill、primary key、auto_increment和comment。
二、列屬性
1、NULL與 NOT NULL
mysql數據庫默認字段都是爲null的,但是在實際開發過程中,儘可能保證所有的數據都不應該爲null,空數據沒有意義,空數據沒有辦法參加運算。
2、DEFAULT
用default表示,某一種數據會經常的出現某個具體值,可以在一開始指定好,在需要真實數據的時候,用戶可以選擇性地使用默認值。
3、AUTO_INCREMENT
當對應的字段不給值,或者說默認值,或者給null的時候會自動地被系統觸發,系統會從當前字段中已有的最大值再進行+1,得到一個新的不同的字段,通常和主鍵搭配。
特點:
- 任何一個字段做自增長前提 --> 自身是一個索引(key一欄有值)。
- 自增長字段通常是整型。
- 一個表中只能有1個自增長。
- 自增長如果對應的字段輸入了值,那麼自增長失效,但是下一次還是能夠正確的自增長(從最大值+1)。
查看自增長對應的變量: show variables like 'auto_increment%';
mysql> show variables like 'auto_increment%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 | //步長
| auto_increment_offset | 1 | //起始值
+--------------------------+-------+
2 rows in set (0.00 sec)
4、COMMENT
comment,實際沒有什麼含義,是專門用來描述字段的,方便程序員對數據表進行查看了解。
5、PRIMARY KEY
一般情況下,對主鍵的理解是唯一鍵,一張表中最多有1個主鍵。
1)添加主鍵
添加主鍵有4種方式。
①創建表的時候,在字段後加上 primary key。
②primary key(字段1,字段2…)
在創建表的時候,在所有的字段之後,使用primary key(字段1,字段2......)
來創建主鍵(可以有多個字段作爲主鍵,來創建複合主鍵)。
③向表中的字段追加主鍵。
新建一個字段,添加主鍵:alter table 表名字 add 字段名 數據類型 primary key
字段已經存在要用修改的方式:alter table 表名字 modify 字段名 數據類型 primary key
④通過add primary key(字段名)
進行添加。
alter table 表名字 add primary key(要添加主鍵的字段名);
2)主鍵約束
主鍵對應的字段中的數據不允許重複,一旦重複,操作失敗。
3)更新主鍵,刪除主鍵。
主鍵沒有辦法更新,只能先刪除主鍵,然後再添加主鍵。
alter table 表名字 drop primary key
4)主鍵前提
表中字段對應的數據本身是獨立的(不重複)。
6、unique
一張表往往有很多字段需要具有唯一性,數據不能重複,這個時候用唯一鍵(unique)就體現出其優勢了,可以解決表中多個字段需要唯一性約束的問題,唯一鍵的本質與主鍵的性質差不多,唯一鍵默認的允許字段爲空,而且可以多個字段爲空(空字段不參與唯一性比較)。
1)添加唯一鍵
①創建表的時候,在字段後加上unique/unique key。
②unique key(字段1,字段2…)
③向表中的字段追加主鍵。
alter table 表名字 add unque key(字段名);
2)刪除唯一鍵
`alter table 表名字 drop index 索引名字(唯一鍵默認的使用字段名作爲索引名字)
3)特點
- 唯一鍵和主鍵本質基本相同,唯一區別就是唯一鍵默認是允許爲空的,而且是多個爲空
- 若是唯一鍵也不允許爲空,那麼唯一鍵和主鍵的約束作用是一致的
三、列操作
1、查看數據表中的列屬性
show columns from table_name;
如:
mysql> show columns from ino_test;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| Id | int(11) | NO | PRI | NULL | auto_increment |
| text | varchar(255) | YES | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.20 sec)