Mysql添加、刪除、主鍵(外鍵)方法詳細(xì)講解
主鍵
主鍵會(huì)自動(dòng)添加唯一索引,所以主鍵列不需要添加索引
建表時(shí)設(shè)置主鍵
方法1、
create table student( id int primary key );
方法2、
create table student( id int, primary key (id) );
單獨(dú)設(shè)置主鍵
alter table student add primary key(id)
刪除主鍵
alter table student drop primary key;
外鍵
外鍵是指引用另外一個(gè)表中的一列或多列數(shù)據(jù),被引用的列應(yīng)該具有主鍵約束或者唯一性約束(簡(jiǎn)單來(lái)說(shuō)外鍵是另一個(gè)表的主鍵或者唯一約束)。外鍵可以有重復(fù)的, 可以是空值,用來(lái)建立和加強(qiáng)兩個(gè)表數(shù)據(jù)之間的連接
外鍵的使用
外鍵的使用需要滿足下列的條件:
1、兩張表必須都是InnoDB表,并且它們沒(méi)有臨時(shí)表。
2、建立外鍵關(guān)系的對(duì)應(yīng)列必須具有相似的InnoDB內(nèi)部數(shù)據(jù)類型。
3、建立外鍵關(guān)系的對(duì)應(yīng)列必須建立了索引。
創(chuàng)建外鍵的兩種方式:
方式一:在創(chuàng)建表的時(shí)候進(jìn)行添加
方式二:表已經(jīng)創(chuàng)建好了,繼續(xù)修改表的結(jié)構(gòu)來(lái)添加外鍵。
建表時(shí)添加外鍵
方法1、
create table teacher( student_id int not null, foreign key(student_id) references student(id) );
alter table teacher add constraint teacher_ref_student(foreignKeyName) foreign key(student_id) references student(id);
方法2、
表1
create table student( id int primary key, --學(xué)生的學(xué)號(hào) )comment '學(xué)生表';
表2
create table score( studentID int, coureseID int, scoreID int primary key, foreign key(studentID) references student(id) --添加外鍵 )comment '成績(jī)表'
單獨(dú)添加外鍵
語(yǔ)法:alter table 表名稱 add foreign key (列名稱) references關(guān)聯(lián)表名稱(列名稱);
eg1:
alter table teacher add constraint teacher_ref_student(foreignKeyName) foreign key(student_id) references student(id);
eg2:
alter table student add foreign key (id) references score(studentID);
刪除外鍵
語(yǔ)法:alter table 表名稱 drop foreign key 外鍵名稱;
eg1:
alter table score drop foreign key score_1;
eg2:
alter table tableName1 drop foreign key foreignKeyName;
唯一鍵
唯一鍵會(huì)自動(dòng)添加唯一索引,所以唯一鍵列不需要添加索引
普通索引
創(chuàng)建一張表
create table member(id int(10) ,name varchar(10) ,age int(18) ,phone int(11) ,address varchar(50),); insert into member values (1,'a','19','111','贛州'); insert into member values (2,'b','24','222','于都'); insert into member values (3,'c','20','333','九江'); insert into member values (4,'d','18','444','南昌'); insert into member values (5,'e','16','555','吉安');
方法一:直接創(chuàng)建索引
CREATE INDEX 索引名 ON 表名 (列名(length));
- (列名(length)):length是可選項(xiàng),下同。如果忽略length 的值,則使用整個(gè)列的值作為索引。如果指定,使用列的前l(fā)ength個(gè)字符來(lái)創(chuàng)建索引,這樣有利于減小索引文件的大小。在不損失精確性的情況下,長(zhǎng)度越短越好。
- 索引名建議以“index"結(jié)尾。
create index name_index on member(name); 以name字段創(chuàng)建普通索引 ? create index cardid_index on member(cardid(4)); 指定cardid字段值的前4個(gè)字符做普通索引的值
方法二:修改表方式創(chuàng)建索引
ALTER TABLE 表名 ADD INDEX 索引名(列名);
ALTER TABLE member ADD INDEX phone_index(phone); 以phone字段創(chuàng)建普通索引
方法三:創(chuàng)建表時(shí)指定索引
一般不在創(chuàng)建表的時(shí)候添加索引,會(huì)讓插入數(shù)據(jù)變慢。
CREATE TABLE 表名(字段1數(shù)據(jù)類型,字段2數(shù)據(jù)類型[,...],INDEX 索引名 (列名));
create table member(id int(10) ,name varchar(10) ,cardid int(18), phone int(11) ,address varchar(50), INDEX name_index(name));
刪除索引:
drop index name_index on member; --直接刪除索引? drop index cardid_index on member; --直接刪除索引? alter table member DROP index phone_index; --以修改表的方式刪除索引
唯一索引(創(chuàng)建唯一鍵即創(chuàng)建唯一索引)
唯一索引:與普通索引類似,但區(qū)別是唯一索引列的每個(gè)值都唯一。 唯一索引 允許有空值(注意和主鍵不同)。如果是用組合索引創(chuàng)建,則列值的組合必須唯一。添加唯一鍵將自動(dòng)創(chuàng)建唯一索引。
創(chuàng)建唯一鍵或者創(chuàng)建唯一索引都可實(shí)現(xiàn)。
方法一:直接創(chuàng)建唯一索引
CREATE UNIQUE INDEX 索引名 ON 表名(字段名);
create unique index address_index on member (address);
方法二:以修改表的方式創(chuàng)建
ALTER TABLE 表名 ADD UNIQUE 索引名(字段名);
alter table member add unique phone_index(phone);
方法三:創(chuàng)建表時(shí)指定索引
CREATE TABLE 表名(字段1 數(shù)據(jù)類型,字段2 數(shù)據(jù)類型[...],UNIQUE 索引名(字段名));
create table member(id int(10) ,name varchar(10) ,cardid int(18) ,phone int(11) ,address varchar(50),unique phone_index(phone));
主鍵索引(和創(chuàng)建主鍵的方式一樣)
主鍵索引是一種特殊的唯一索引,必須指定為“PRIMARY KEY”。一個(gè)表只能有一個(gè)主鍵,不允許有空值。 添加主鍵將自動(dòng)創(chuàng)建主鍵索引。
方法一:創(chuàng)建表時(shí)添加主鍵
create table 表名(字段1 XXX, 字段2 XXX, ...primary key(字段));
create table 表名(字段1 XXX primary key, ...); 將主鍵作為字段1的屬性
create table student(id int(10),name varchar(10),primary key(id)); ? create table student(id int(10) primary key,name varchar(10));
方法二:在現(xiàn)有表中添加主鍵
ALTER TABLE 表名 add primary key(字段名);
ALTER TABLE member add primary key(id); --將id字段添加為主鍵
組合索引(單列索引與多列索引)
組合索引(單列索引與多列索引):可以是單列上創(chuàng)建的索引,也可以是在多列上創(chuàng)建的索引。
需要滿足最左原則,因?yàn)閟elect 語(yǔ)句的where條件是依次從左往右執(zhí)行的,所以在使用select 語(yǔ)句查詢時(shí)where 條件使用的字段順序必須和組合索引中的排序一致,否則索引將不會(huì)生效。
方法一:直接創(chuàng)建索引
CREATE INDEX 索引名 on 表名(字段1,字段2,字段3);
create index name_cardid_phone_index on member3(name,cardid,phone); 使用3個(gè)字段創(chuàng)建組合索引 alter table member3 drop index name_cardid_phone_index; 刪除組合索引 遵循最左原則
方法二:修改表的方式創(chuàng)建索引
alter table 表名 add index 索引名(字段1,字段2, ..., 字段n);
alter table member add index phone_name_cardid_index(phone,name,cardid);
方法三:創(chuàng)建表的時(shí)候指定索引
CREATE TABLE 表名(列名1 數(shù)據(jù)類型,列名2 數(shù)據(jù)類型,列名3 數(shù)據(jù)類型, INDEX 索引名(字段1,字段2,字段3));
create table member(id int(10),name varchar(10),phone int(11),index name_phone_index(name,phone));
總結(jié)
到此這篇關(guān)于Mysql添加、刪除、主鍵(外鍵)方法的文章就介紹到這了,更多相關(guān)Mysql添加刪除主鍵外鍵內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解MySQL和Redis如何保證數(shù)據(jù)一致性
MySQL與Redis都是常用的數(shù)據(jù)存儲(chǔ)和緩存系統(tǒng),為了提高應(yīng)用程序的性能和可伸縮性,很多應(yīng)用程序?qū)ySQL和Redis一起使用,其中MySQL作為主要的持久存儲(chǔ),而Redis作為主要的緩存,那么本文就給大家介紹一下MySQL和Redis如何保證數(shù)據(jù)一致性,需要的朋友可以參考下2023-08-08
MySQL的InnoDB存儲(chǔ)引擎的數(shù)據(jù)頁(yè)結(jié)構(gòu)詳解
這篇文章主要為大家詳細(xì)介紹了MySQL的InnoDB存儲(chǔ)引擎的數(shù)據(jù)頁(yè)結(jié)構(gòu),,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03
mysql日志系統(tǒng)redo log和bin log介紹
這篇文章主要介紹了mysql日志系統(tǒng)redo log和bin log介紹,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
使用logrotete定時(shí)切割mysql的慢日志操作
本文介紹了如何在Linux系統(tǒng)中使用logrotate工具對(duì)MySQL慢查詢?nèi)罩具M(jìn)行自動(dòng)輪轉(zhuǎn)和管理配置,包括創(chuàng)建配置文件、設(shè)置輪轉(zhuǎn)頻率、文件命名、權(quán)限、執(zhí)行腳本以及測(cè)試配置的方法,感興趣的朋友一起看看吧2025-03-03

