表完整約束性
約束條件 說明
PRIMARY KEY (PK) 標識該字段為該表的主鍵,是可以唯一的標識記錄,不可以為空 UNIQUE+NOT NULL
(primary key)
FOREIGN KEY (FK) 標識該字段為該表的外鍵,實現表與表之間的關聯
(foreign key)
NULL 標識該字段是否允許為空,默認為NULL。
(null)
NOT NULL 標識該字段不能為空,可以修改。
(not null)
UNIQUE KEY (UK) 標識該字段的值是唯一的,可以為空,一個表中可以有多個UNIQUE KEY
(unique key)
AUTO_INCREMENT 標識該字段的值自動增長(整數類型,而且為主鍵)
(auto_increment)
DEFAULT 為該字段設置默認值
(default)
UNSIGNED 無符號,正數
(unsigend)
修改字段是否為空的約束
mysql> desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(12) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| sex | char(2) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> alter table t1 modify name varchar(12) not null;
mysql>alter table t1 modify name varcahr(12) null;
#修改該字段不允許為空 null為允許該字段為空
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
- 是否允許為空,默認NULL,可設置NOT NULL,字段不允許為空,必須賦值
- 字段是否有默認值,缺省的默認值是NULL,如果插入記錄時不給字段賦值,此字段使用默認值
sex enum(‘male’,‘female’) not null default ‘male’ #只能選擇maie和female,不允許為空,默認是male
mysql> create table 表名(id int(5),name varchar(10),sex enum('male','female') not null default 'male');
### 設置enum的默認值為male
取消默認值
mysql> alter table 表名 alter column 字段 drop default;
##取消表中該字段的默認值
實現表值的自動增長
mysql> create table 表名()
- auto_increment 自動增長約束。
自增--------自動編號,且必須與主鍵組合使用默認情況下,起始值為1,每次的增量為1。當插入記錄時,如果為AUTO_INCREMENT數據列明確指定了一個數值,則會出現兩種情況: - 如果插入的值與已有的編號重復,則會出現出錯信息,因為AUTO_INCREMENT數據列的值必須是唯一的;
- 如果插入的值大于已編號的值,則會把該插入到數據列中,并使在下一個編號將從這個新值開始遞增。
(每張表只能有一個字段為自曾) (成了key才可以自動增長)
mysql> create table t2(id int unique key auto_increment,name varchar(5));
#指定id字段自動增長。
(unique key 指定字段唯一性) (auto_increment 指定該字段數值自動增長。)
刪除自動增長
mysql> alter table 表名 modify column 字段 int;
#重新定義id字段類型即可刪除自動增長約束。
主鍵
每張表里只能有一個主鍵,不能為空,而且唯一,主鍵保證記錄的唯一性,主鍵自動為NOT NULL。
一個UNIQUE KEY 又是一個NOT NULL的時候,那么它被當做PRIMARY KEY主鍵。
定義兩種方式:
#表存在,添加約束
mysql> alter table 表名 add primary key (字段);創建表并指定約束
mysql> create table 表名(字段 char(20),字段2 char(150),primary key(字段));
刪除主鍵
mysql> alter table 表名 drop primary key;
## 刪除的僅是主鍵不會刪除該字段的唯一性,需要額外執行刪除唯一性約束sql語句。
唯一性約束
設置唯一約束 UNIQUE,字段添加唯一約束之后,該字段的值不能重復,也就是說在一列當中不能出現一樣的值
mysql> create table 表名(字段 int unique);
為字段添加唯一性約束。
刪除唯一約束:
在 MySQL 中,UNIQUE 約束會被視為一個唯一索引,因此需使用 DROP INDEX:
mysql> alter table t3 drop index 字段;
或者
mysql> alter table t3 drop key 字段;