標籤:str lap 綜合 符號 不能 auto comm 應該 uniq
一 介紹
約束條件與資料類型的寬度一樣,都是選擇性參數
作用:用於保證資料的完整性和一致性
主要分為:
PRIMARY KEY (PK) 標識該欄位為該表的主鍵,可以唯一的標識記錄FOREIGN KEY (FK) 標識該欄位為該表的外鍵NOT NULL 標識該欄位不可為空UNIQUE KEY (UK) 標識該欄位的值是唯一的AUTO_INCREMENT 標識該欄位的值自動成長(整數類型,而且為主鍵)DEFAULT 為該欄位設定預設值UNSIGNED 無符號ZEROFILL 使用0填充
1 1. 是否允許為空白,預設NULL,可設定NOT NULL,欄位不允許為空白,必須賦值2 2. 欄位是否有預設值,預設的預設值是NULL,如果插入記錄時不給欄位賦值,此欄位使用預設值3 sex enum(‘male‘,‘female‘) not null default ‘male‘4 age int unsigned NOT NULL default 20 必須為正值(無符號) 不允許為空白 預設是205 3. 是否是key6 主鍵 primary key7 外鍵 foreign key8 索引 (index,unique...)
介紹2、not null與default
是否可空,null表示空,非字串
not null - 不可空
null - 可空
==================not null====================mysql> create table t1(id int); #id欄位預設可以插入空mysql> desc t1;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+-------+| id | int(11) | YES | | NULL | |+-------+---------+------+-----+---------+-------+mysql> insert into t1 values(); #可以插入空mysql> create table t2(id int not null); #設定欄位id不為空白mysql> desc t2;+-------+---------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+---------+------+-----+---------+-------+| id | int(11) | NO | | NULL | |+-------+---------+------+-----+---------+-------+mysql> insert into t2 values(); #不能插入空ERROR 1364 (HY000): Field ‘id‘ doesn‘t have a default value==================default====================#設定id欄位有預設值後,則無論id欄位是null還是not null,都可以插入空,插入空預設填入default指定的預設值mysql> create table t3(id int default 1);mysql> alter table t3 modify id int not null default 1;==================綜合練習====================mysql> create table student( -> name varchar(20) not null, -> age int(3) unsigned not null default 18, -> sex enum(‘male‘,‘female‘) default ‘male‘, -> hobby set(‘play‘,‘study‘,‘read‘,‘music‘) default ‘play,music‘ -> );mysql> desc student;+-------+------------------------------------+------+-----+------------+-------+| Field | Type | Null | Key | Default | Extra |+-------+------------------------------------+------+-----+------------+-------+| name | varchar(20) | NO | | NULL | || age | int(3) unsigned | NO | | 18 | || sex | enum(‘male‘,‘female‘) | YES | | male | || hobby | set(‘play‘,‘study‘,‘read‘,‘music‘) | YES | | play,music | |+-------+------------------------------------+------+-----+------------+-------+mysql> insert into student(name) values(‘egon‘);mysql> select * from student;+------+-----+------+------------+| name | age | sex | hobby |+------+-----+------+------------+| egon | 18 | male | play,music |+------+-----+------+------------+驗證
View Code3、unique
作用:限制欄位的值唯一
#單列唯一create table t1(id int nnique,name char(16));#聯合唯一create table server(id int nuique,ip char(15),port int,unique(ip,port));
4、primary key
primary key 單從約束的角度去看,就等同於not null unique
強調;
1、一張表中必須有,並且只能有一個主鍵
2、一張表中都應該有一個id欄位,而且應該把id欄位做成主鍵
1 ============單列做主鍵=============== 2 #方法一:not null+unique 3 create table department1( 4 id int not null unique, #主鍵 5 name varchar(20) not null unique, 6 comment varchar(100) 7 ); 8 9 mysql> desc department1;10 +---------+--------------+------+-----+---------+-------+11 | Field | Type | Null | Key | Default | Extra |12 +---------+--------------+------+-----+---------+-------+13 | id | int(11) | NO | PRI | NULL | |14 | name | varchar(20) | NO | UNI | NULL | |15 | comment | varchar(100) | YES | | NULL | |16 +---------+--------------+------+-----+---------+-------+17 rows in set (0.01 sec)18 19 #方法二:在某一個欄位後用primary key20 create table department2(21 id int primary key, #主鍵22 name varchar(20),23 comment varchar(100)24 );25 26 mysql> desc department2;27 +---------+--------------+------+-----+---------+-------+28 | Field | Type | Null | Key | Default | Extra |29 +---------+--------------+------+-----+---------+-------+30 | id | int(11) | NO | PRI | NULL | |31 | name | varchar(20) | YES | | NULL | |32 | comment | varchar(100) | YES | | NULL | |33 +---------+--------------+------+-----+---------+-------+34 rows in set (0.00 sec)35 36 #方法三:在所有欄位後單獨定義primary key37 create table department3(38 id int,39 name varchar(20),40 comment varchar(100),41 constraint pk_name primary key(id); #建立主鍵並為其命名pk_name42 43 mysql> desc department3;44 +---------+--------------+------+-----+---------+-------+45 | Field | Type | Null | Key | Default | Extra |46 +---------+--------------+------+-----+---------+-------+47 | id | int(11) | NO | PRI | NULL | |48 | name | varchar(20) | YES | | NULL | |49 | comment | varchar(100) | YES | | NULL | |50 +---------+--------------+------+-----+---------+-------+51 rows in set (0.01 sec)52 53 單列主鍵
單列主鍵
create table t19( ip char(15), port int, primary key(ip,port));
聯合主鍵5、auto_increment
束欄位為自動成長,被約束的欄位必須同時被key約束
create table t20( id int primary key auto_increment, name char(16))engine=innodb;# auto_increment注意點:1、通常與primary key連用,而且通常是給id欄位加2、auto_incremnt只能給被定義成key(unique key,primary key)的欄位加
MySQL之完整性條件約束