列屬性:真正約束字段的是數(shù)據(jù)類型袋狞,但是數(shù)據(jù)類型的約束很單一,需要有一些額外的約束乒疏,來更加保證數(shù)據(jù)的合法性蓖议。
列屬性有很多:NULL/NOT NULL, default, Primary key, unique key, auto_increment, comment
空屬性
兩個(gè)值:NULL(默認(rèn)的)和NOT NULL(不為空)
實(shí)際開發(fā)時(shí),盡可能的要保證所有的數(shù)據(jù)不應(yīng)該為空蛮艰,空數(shù)據(jù)沒有意義腋腮,空數(shù)據(jù)沒有辦法參與運(yùn)算。
例:
create table my_class(
name varchar(20) not null,
room varchar(20) null -- 允許為空壤蚜,不寫默認(rèn)
)charset utf8;
主鍵
Primary key即寡,一張表只能有一個(gè)字段可以使用對應(yīng)的鍵,用來唯一的約束該字段里面的數(shù)據(jù)袜刷,不能重復(fù)
1.增加主鍵
- 方案1:在創(chuàng)建表的時(shí)候聪富,直接在字段之后跟primary key關(guān)鍵字(主鍵本身不允許為空)
優(yōu)點(diǎn):非常直接;缺點(diǎn):只能使用一個(gè)字段作為主鍵著蟹。 - 方案2:在創(chuàng)建表的時(shí)候墩蔓,在所有字段之后梢莽,使用primary key(主鍵字段列表)來創(chuàng)建主鍵(如果多個(gè)字段作為主鍵,可以是復(fù)合主鍵)奸披。
--復(fù)合主鍵
create table my_pri(
number char(10) comment '學(xué)號:itcast + 0000'昏名,
course char(10) comment '課程編號',
score tinyint unsigned default 60 comment '成績'
--添加主鍵限制:學(xué)號和課程應(yīng)該是對應(yīng)的,具有唯一性
primary key(number,course)
)charset utf8;
- 方案3:當(dāng)表已經(jīng)創(chuàng)建好之后阵面,再次額外追加主鍵轻局,可以修改表字段屬性,也可以直接追加样刷。
alter table 表名 modify 字段名 類型 屬性
alter table 表名 add primary key(字段列表);
前提:作為主鍵仑扑,表中字段對應(yīng)的數(shù)據(jù)本身是獨(dú)立的(不重復(fù))
2.主鍵約束
主鍵對應(yīng)的字段中的數(shù)據(jù)不允許重復(fù),一旦重復(fù)置鼻,數(shù)據(jù)操作失敺虮凇(增和改)。
3.主鍵刪除
alter table 表名 drop primary key;
默認(rèn)值
默認(rèn)值:某一種數(shù)據(jù)會(huì)經(jīng)常性的出現(xiàn)某個(gè)具體的值沃疮,可以在一開始就指定好盒让,在需要真實(shí)數(shù)據(jù)的時(shí)候,用戶可以選擇性的使用默認(rèn)值司蔬。
默認(rèn)關(guān)鍵字:default
create table my_default(
name varchar(20) not null,
age tinyint unsigned default 0,
gender enum('男', '女', '保密') default '男'
)charset utf8;
默認(rèn)值生效:在數(shù)據(jù)進(jìn)行插入的時(shí)候邑茄,不給該字段賦值。
想要使用默認(rèn)值俊啼,可以不一定去指定列表肺缕,故意不使用字段列表,可以使用default關(guān)鍵字代替值授帕。
列描述
列描述:comment同木,描述,沒有實(shí)際含義:是專門用來描述字段跛十,會(huì)根據(jù)表創(chuàng)建語句保存彤路,用來給程序員(數(shù)據(jù)庫管理員)來進(jìn)行了解的。
create table my_teacher(
name varchar(20) not null comment ' 姓名',
money decimal(10, 2) not null comment '工資'
)charset utf8;
自增長
auto_increment
自增長通常和主鍵搭配
特點(diǎn):
- 任何一個(gè)字段要做自增長必須前提是本身是一個(gè)索引(key一欄有值)
- 自增長字段必須是數(shù)字(整型)
- 一張表最多只能由一個(gè)自增長
1.創(chuàng)建自增長
create table my_autoincrement(
id int primary key auto_increment comment '邏輯主鍵自增長',
name varchar(10) not null comment '姓名'
)charset utf8;
2.自增長的使用
當(dāng)自增長被給定的值為NULL或者默認(rèn)值的時(shí)候芥映,就會(huì)觸發(fā)自動(dòng)增長洲尊。
自增長第一個(gè)元素默認(rèn)是1,每次都是自增1奈偏。
自增長如果對應(yīng)的字段輸入了值坞嘀,那么自增長失效,但是下一次還是能夠正確的自增長(從最大值+1)
3.修改自增長
自增長如果是涉及到字段改變惊来,必須先刪除丽涩,后增加(一張表只能有一個(gè)自增長)
修改當(dāng)前自增長已經(jīng)存在的值:修改只能比當(dāng)前已有的自增的最大值大,不能胁靡稀(小不生效)
alter table 表名 auto_increment = 值;(表選項(xiàng)直接這么改)
查看自增長變量語句:
show variable like 'auto_increment%';
還可以修改自增長的初始值矢渊,以及步長(但沒什么意義)
4.刪除自增長
自增長是字段的一個(gè)屬性检眯,可以通過modify來進(jìn)行修改(保證字段沒有auto_increment即可)
alter table 表名 modify 字段 類型;
唯一鍵
一張表往往有很多字段具有唯一性,數(shù)據(jù)不能重復(fù)昆淡,但是一張表中只能有一個(gè)主鍵锰瘸,唯一鍵(unique key)就可以解決表中有多個(gè)字段需要唯一性約束的問題。
唯一鍵的本質(zhì)與主鍵差不多昂灵,唯一鍵默認(rèn)的允許自動(dòng)為空避凝,而且可以多個(gè)為空(空字段不參與唯一性比較)
1.增加唯一鍵
- 方案1:創(chuàng)建表時(shí),字段之后直接跟unique/unique key
- 方案2:在所有字段之后眨补,增加unique key(字段列表)管削,復(fù)合唯一鍵。
- 方案3:在創(chuàng)建表之后增加唯一鍵(方式和主鍵一樣)撑螺。
2.唯一鍵約束
唯一鍵與主鍵本質(zhì)相同含思,唯一的區(qū)別就是唯一鍵默認(rèn)允許為空,而且是多個(gè)為空甘晤。
如果唯一鍵也設(shè)置成了not null含潘,那么和主鍵的約束作用是一致的。
3.刪除唯一鍵
唯一鍵可以有多個(gè)线婚。
alter table 表名 drop index 索引名;
--唯一鍵默認(rèn)的使用字段名作為索引名字遏弱。
索引
幾乎所有的索引都是建立在字段之上。
索引:系統(tǒng)根據(jù)某種算法塞弊,將已有的數(shù)據(jù)(未來可能新增的數(shù)據(jù))漱逸,單獨(dú)建立一個(gè)文件,文件能夠?qū)崿F(xiàn)快速的匹配數(shù)據(jù)游沿,并且能夠快速的找到對應(yīng)表中的記錄饰抒。
索引的意義:
1、提升查詢數(shù)據(jù)的效率
2诀黍、約束數(shù)據(jù)的有效性(唯一性等)
增加索引的前提條件:索引本身會(huì)產(chǎn)生索引文件(有時(shí)候可能比數(shù)據(jù)文件還大)袋坑,會(huì)非常耗費(fèi)磁盤空間。
Mysql中提供了多種索引
- 主鍵索引:primary key
- 唯一索引:unique key
- 全文索引:fulltext index
- 普通索引:index
全文索引:針對文章內(nèi)部的關(guān)鍵字進(jìn)行索引