MySql中,真正約束字段的是數據類型,但是數據類型的約束太單一,需要有一些額外的約束,來更加保證數據的合法性。
MySql中的常用列屬性有:null、not null、default、primary key、auto_increment和comment。
1、空屬性。
空屬性有2個值,分別是 null(空,默認的) 和 not null(不為空),mysql數據庫默認字段都是為null的,但是在實際開發過程中,盡可能保證所有的數據都不應該為null,空數據沒有意義,空數據沒有辦法參加運算。
語法:字段名 數據類型 not null
例子:創建一張【my_notnull】的表,為其添加一個name字段,並指定不為空。
create table if not exists my_notnull(
name varchar(10) not null
)charset utf8;
空數據是不參加運算的。
2、列描述。
列描述(注釋):comment,實際沒有什么含義,是專門用來描述字段的,會根據創建語句保存,用來給程序員(或者數據庫管理員)來進行了解的。主要用於查看創建表的語法上進行查看。
語法:字段名 數據類型 comment ‘說明文字’
例子:創建一張【my_comment 】的表,為其添加一個name字段,並為其添加說明。
create table if not exists my_comment(
name varchar(10) comment '姓名字段'
)charset utf8;
3、默認值。
用default表示,某一種數據會經常的出現某個具體值,可以在一開始指定好,在需要真實數據的時候,用戶可以選擇性地使用默認值。
語法:字段名 數據類型 default 默認值
例子:添加一個【my_default】表,為其添加name字段,age字段,並未age字段指定默認值為18。
create table if not exists my_default(
name varchar(10) not null comment '姓名',
age tinyint unsigned not null default 18 comment '年齡'
)charset utf8;
插入數據:如果要使用默認值,在給表插入數據的時候,不給字段賦值即可。
insert into my_default(name) values('張三');
4、主鍵。
一般情況下,對主鍵的理解是唯一鍵,一張表中只能有1個字段可以使用主鍵,用於約束該字段里面的數據,一張表中最多有1個主鍵。
4.1、添加主鍵。
添加主鍵有4種方式。
a)、創建表的時候,在字段后加上 primary key。
語法: 字段名 數據類型 primary key
例子:添加一個名叫【my_primark_key1】的表,為其添加id字段和name字段,且將id字段設置成主鍵。
create table if not exists my_primary_key1(
id int primary key,
name varchar(10) not null
)charset utf8;
插入數據:insert into my_primary_key1 values(1001,'張三');
再次插入同樣的數據就會報錯:insert into my_primary_key1 values(1001,'張三');原因是主鍵值不能相同。
b)、復合主鍵。
在創建表的時候,在所有的字段之后,使用primay key(主鍵字段列表)來創建主鍵(可以有多個字段作為主鍵)來創建復合主鍵。
語法:primary key(字段1,字段2......)
例子:創建一張【my_primark_key2】的表,為其添加number字段(int類型)和classname 字段(varchar類型),將這個字段添加成復合主鍵。
create table if not exists my_primary_key2(
number int not null,
classname varchar(20) not null,
primary key(number,classname)
)charset utf8;
插入數據:插入數據只有兩個字段(number,name)共同重復時才會插入失敗,如果有1個字段重復,另一個字段不重復,那么會插入成功。
insert into my_primary_key2(number,classname) values(1001,'高一(2)班'); -- 插入成功
insert into my_primary_key2(number,classname) values(1001,'高一(3)班'); -- 插入成功,因為插入的值中有1個字段的值與表中的值不一樣。
insert into my_primary_key2(number,classname) values(1001,'高一(2)班'); -- 插入失敗,因為插入的值中的2個字段值與表中的數據重復。
c)、向表中的字段追加主鍵。
語法:alter table 表名字 字段名 數據類型 primary key(新建一個字段,添加主鍵,如果字段已經存在要用修改的方式);
例子:新建一個名叫【my_primary_key3】的表,為其加入id字段和name字段。
create table if not exists my_primary_key3(
id int,
name varchar(10) not null
)charset utf8;
修改 my_primary_key3表中的id字段為主鍵。
alter table my_primary_key3 modify id int primary key comment '編號';
d)、通過add primary key(字段名) 進行添加。
語法:alter table 表名字 add primary key(要添加主鍵的字段名);
例子:添加 id為主鍵。
alter table userinfo add primary key(id);
4.2、主鍵約束。
主鍵對應的字段中的數據不允許重復,一旦重復,操作失敗。
4.3、更新主鍵,刪除主鍵。
主鍵沒有辦法更新,只能先刪除主鍵,然后再添加主鍵。
語法:alter table 表名字 drop primary key
例子:修改【my_primary_key3】表中已存在的主鍵,為name字段設置主鍵。
alter table my_primary_key3 drop primary key3; -- 先刪除。
為name 字段添加主鍵(修改的形式)。
alter table my_primary_key3 modify name varchar(10) primary key;
5、自增長。
當對應的字段不給值,或者說默認值,或者給null的時候會自動地被系統觸發,系統會從當前字段中已有的最大值再進行+1,得到一個新的不同的字段,通常和主鍵搭配。
5.1、添加自增長。
自增長的特點 :
a)、任何一個字段做自增長前提 自身是一個索引(key一欄有值)。
b)、自增長字段通常是整形。
c)、一個表中只能有1個自增長。
例子:添加一張【my_auto_increment】的表,為其添加id字段和name字段,其中id字段設置成主鍵和自增長。
create table if not exists my_auto_increment(
id int primary key auto_increment,
name varchar(10) not null
)charset utf8;
插入值。
insert into my_auto_Increment values(null,'張三'); -- 有效
insert into my_auto_Increment(name) values('李四'); -- 有效
自增長如果對應的字段輸入了值,那么自增長失效,但是下一次還是能夠正確的自增長(從最大值+1)。
如:insert into my_auto_Increment values(10,'王五');
再次插入數據的時候,自增長就會從11開始。
insert into my_auto_Increment values(null,'趙六');
5.2、修改自增長。
自增長如果是涉及到字段改變,必須先刪除自增長,后增加,一張表中只能有1個自增長。
修改當前已存在自增長的值,修改只能比當前已有的自增長的最大值大,不能小(小則不生效)。
update my_auto_increment set id = 20 where name = '趙六'; -- 將姓名為趙六的id修改成20
再次插入數據。insert into my_auto_Increment values(null,'甜七');
5.3、刪除自增增長。
自增長是字段的一個屬性,可以通過modify屬性來修改(字段沒有自增長)。
語法:alter table 表名字 modify 字段名 數據類型
例子:將【my_auto_Increment】表中 id字段的自增長去掉。
alter table my_auto_increment modify id int;
5.4、自增長為什么從1開始?又為什么每次都是自增1呢?
所有系統的表現(如字符集、校對集)都是由系統的內部變量進行控制的。
查看自增長對應的變量的語法:show variables like 'auto_increment%';
可以修改變量實現不同的效果。如果對整個數據修改(而不是但張表),這種方式是修改時會話級(當前客戶端,當此連接有效,關閉失效)。
修改成一次自增為5。
set auto_increment_increment = 5; -- 表示一次自增5
6、唯一鍵。
一張表往往有很多字段需要具有唯一性,數據不能重復,這個時候用唯一鍵(unique)就體現出其優勢了,可以解決表中多個字段需要唯一性約束的問題,唯一鍵的本質與主鍵的性質差不多,唯一鍵默認的允許字段為空,
而且可以多個字段為空(空字段不參與唯一性比較)。
6.1、添加唯一鍵。
語法:字段名 數據類型 unique/unique key
有3種方式添加唯一鍵。
a)、在字段后面添加唯一鍵。
例子:新建一張【my_unique】的表,為其添加一個name字段,並設置成唯一鍵。
create table if not exists my_unique(
name varchar(10) not null unique
)charset utf8;
插入數據:
insert into my_unique('李四'); -- 有效數據。
再次插入一個名叫李四的就會報錯。
這個時候會出現一種假象。
查看破解假象,查看表的創建語法。
b)、在所有的字段之后添加 unique key(字段列表),復合唯一鍵。
例子:添加一張【my_unique】的表,為其添加number字段(int類型)和name字段(varchar類型),然后將兩個設置成復合唯一鍵。
create table if not exists my_unique2(
number int not null,
name varchar(20) not null,
unique key(number,name)
)charset utf8;
插入數據。
insert into my_unique2 values(10001,'張三'); -- 有效數據
insert into my_unique2 values(10001,'李四'); -- 有效數據(符合唯一鍵是兩個字段值要相同)
insert into my_unique2 values(10001,'張三'); -- 無效數據(復合主鍵重復了)
c)、追加唯一鍵。
語法:alter table 表名字 add unque key(字段名);
例子:新建一張【my_unique3】的表,添加一個字段name(carchar類型)。
create table if not exists my_unique3(
name varchar(30) not null
)charset utf8;
向my_unique3表中追加唯一鍵。
alter table my_unique3 add unique key(name);
6.2、更新唯一鍵。
先刪除,后新增。
6.3、刪除唯一鍵。
語法:alter table 表名字 drop index 索引名字(唯一鍵默認的使用字段名作為索引名字)
End。