主鍵:primary key,主要的鍵,一張表只能有一個(gè)字段可以使用對(duì)應(yīng)的鍵,用來(lái)唯一的約束該字段里面的數(shù)據(jù),不能重復(fù),這種稱(chēng)之為主鍵
增加主鍵:
方案一:在創(chuàng)建表的時(shí)候,直接在字段之后,跟primary key關(guān)鍵字(主鍵本身不允許為空)
方案二:在創(chuàng)建表的時(shí)候,在所有的字段之后,使用primary key(主鍵字段列表)來(lái)創(chuàng)建主鍵,如果有多個(gè)字段作為主鍵,可以是復(fù)合主鍵
方案三:當(dāng)表已經(jīng)創(chuàng)建好之后,額外追加主鍵,可以通過(guò)修改表字段屬性,也可以直接追加
alter table 表名 add primary key(字段列表);
主鍵約束:主鍵對(duì)應(yīng)的字段中的數(shù)據(jù)不允許重復(fù),一旦重復(fù),數(shù)據(jù)操作(增和改)失敗
更新主鍵 & 刪除主鍵
alter table 表名 drop primary key;
主鍵分類(lèi):業(yè)務(wù)主鍵、邏輯主鍵
create table my_student(
id int primary key auto_increment comment '邏輯主鍵:自增長(zhǎng)',
number char(10) not null comment '學(xué)號(hào)',
name varchar(10) not null
)
自動(dòng)增長(zhǎng):auto_increment,當(dāng)對(duì)應(yīng)的字段,不給值,或給默認(rèn)值、或給NULL值,會(huì)自動(dòng)的被系統(tǒng)觸發(fā),系統(tǒng)會(huì)從當(dāng)前字段中已有的最大值基礎(chǔ)上,再進(jìn)行+1操作,得到一個(gè)新的不同的數(shù)據(jù)
特點(diǎn):
任何一個(gè)字段要做自增長(zhǎng),前提必須本身就是一個(gè)索引
自增長(zhǎng)字段必須是數(shù)字,而且是整型
一張表最多只能有一個(gè)自增長(zhǎng)
修改自增長(zhǎng):alter table 表名 auto_increment=值;
查看自增長(zhǎng)對(duì)應(yīng)的變量:show variables like 'auto_increment%';
刪除自增長(zhǎng):alter table 表名 modify 字段 類(lèi)型;
唯一鍵(unique key)
默認(rèn)允許自動(dòng)為空,而且可以多個(gè)為空
增加唯一鍵
方案一:在創(chuàng)建表的時(shí)候,字段之后直接跟unique / unique key
方案二:在所有的字段之后增加unique key(字段列表);
方案三:在創(chuàng)建表之后增加唯一鍵
更新唯一鍵 & 刪除唯一鍵
錯(cuò)誤的刪除方法:alter table 表名 drop unique key;
alter table 表名 drop index 索引名字;
索引:系統(tǒng)根據(jù)某種算法,將已有的數(shù)據(jù),或未來(lái)可能新增的數(shù)據(jù),單獨(dú)建立一個(gè)文件,文件能夠?qū)崿F(xiàn)快速的匹配數(shù)據(jù),并且能夠快速地找到對(duì)應(yīng)表中的記錄
索引的意義:
提升查詢(xún)數(shù)據(jù)的效率
約束數(shù)據(jù)的有效性、唯一性等
MySQL中提供了多種索引
主鍵索引:primary key
唯一索引:unique key
全文索引:fulltext index
普通索引:index
創(chuàng)建
create [unique] index 索引名 on 表名(字段名(長(zhǎng)度));
alter 表名 add [unique] index [索引名] on (字段名(長(zhǎng)度));
刪除:drop index [索引名] on 表名;
查看:show index from 表名\G
使用alter命令添加數(shù)據(jù)表的索引
alter table 表名 add primary key (字段列表):添加一個(gè)主鍵,意味著索引值必須是唯一且不為空
alter table 表名 add unique 索引名 (字段列表):創(chuàng)建索引的值必須是唯一的,允許NULL,且NULL可能會(huì)出現(xiàn)多次
alter table 表名 add fulltext 索引名 (字段列表):添加全文索引
alter table 表名 add index 索引名 (字段列表):添加普通索引,索引值可出現(xiàn)多次
小知識(shí)點(diǎn):
-- 向pri1、2表插入數(shù)據(jù)
insert into my_pri1
values ('古天樂(lè)','bc20190001'),
('臭蛋','bc20190002');
insert into my_pri2
values('bc20190001','bc25890001',90),
('bc2019002','bc25890002',85),
('bc2019003','bc25890003',92);
-- 主鍵沖突(重復(fù))
insert into my_pri1
values('劉濤','bc20190002');-- 不可以;主鍵沖突
insert into my_pri2
values('bc20190001','bc25890001',100);-- 不可以;主鍵沖突
-- 刪除主鍵
alter table my_pri3drop primary key;
-- 自增長(zhǎng)
create table my_auto(
idint primary key
auto_increment comment'自動(dòng)增長(zhǎng)',
name varchar(10)not null
)charset utf8;
-- 觸發(fā)自增長(zhǎng)
insert into my_auto(name)
values ('鄧麗君');
insert into my_auto
values (null,'成龍');
insert into my_auto
values (default ,'吳綺莉');
-- 指定數(shù)據(jù)
insert into my_autovalues (6,
'黃曉明');
insert into my_autovalues (null,
'楊穎');
-- 修改表選項(xiàng)的值
alter table my_auto
auto_increment=4;-- 向下修改(改?。?不生效
alter table my_auto
auto_increment=10;-- 向上修改(改大) 生效
-- 查看自增長(zhǎng)變量
show variableslike
'auto_increment%';
-- 修改自增長(zhǎng)的步長(zhǎng)
set auto_increment_increment=5;-- 一次自增5
-- 插入記錄;使用自增長(zhǎng)
insert into my_autovalues(null,
'楊紫');
insert into my_autovalues(null,
'張一山');
-- 刪除自增長(zhǎng)
alter table my_auto modify idint
primary key;-- 錯(cuò)誤;主鍵在理論上是單獨(dú)存在的(系統(tǒng)會(huì)認(rèn)為我們要在加一個(gè)主鍵)
alter table my_auto modify idint;-- 有主鍵的時(shí)候,千萬(wàn)不要在加主鍵
-- 創(chuàng)建一個(gè)唯一鍵
create table my_unique1(
number char (10)unique comment
'學(xué)號(hào):唯一,允許為空',
name varchar (20)not null
)charset utf8;
create table my_unique2(
number char (10)not null comment
'學(xué)號(hào)',
name varchar (20)not null,
-- 增加唯一鍵
unique key(number)
)charset utf8;
create table my_unique3(
idint primary key auto_increment,
number char (10)not null,
name varchar (20)not null
)charset utf8;
-- 追加唯一鍵
alter table my_unique3add unique
key(number);-- 給number增加唯一鍵
alter table my_unique3add unique
key(name);-- 給name增加唯一鍵
-- 插入數(shù)據(jù)
insert into my_unique1
values (null,'大熊'),
('bc20190001','胖虎'),
(null,'靜香');
insert into my_unique1
values ('bc20190001','哆啦A夢(mèng)');
-- 刪除唯一鍵? -----刪除的是索引index
alter table my_unique3drop indexnumber;