主键
主键会自动添加唯一索引,所以主键列不需要添加索引
建表时设置主键
方法1、
1 2 3 | create table student( id int primary key ); |
方法2、
1 2 3 4 | create table student( id int , primary key (id) ); |
单独设置主键
1 | alter table student add primary key (id) |
删除主键
1 | alter table student drop primary key ; |
外键
外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束(简单来说外键是另一个表的主键或者唯一约束)。外键可以有重复的, 可以是空值,用来建立和加强两个表数据之间的连接
外键的使用
外键的使用需要满足下列的条件:
1、两张表必须都是InnoDB表,并且它们没有临时表。
2、建立外键关系的对应列必须具有相似的InnoDB内部数据类型。
3、建立外键关系的对应列必须建立了索引。
创建外键的两种方式:
方式一:在创建表的时候进行添加
方式二:表已经创建好了,继续修改表的结构来添加外键。
建表时添加外键
方法1、
1 2 3 4 | create table teacher( student_id int not null , foreign key (student_id) references student(id) ); |
1 2 | alter table teacher add constraint teacher_ref_student(foreignKeyName) foreign key (student_id) references student(id); |
方法2、
表1
1 2 3 | create table student( id int primary key , --学生的学号 )comment '学生表' ; |
表2
1 2 3 4 5 6 | create table score( studentID int , coureseID int , scoreID int primary key , foreign key (studentID) references student(id) --添加外键 )comment '成绩表' |
单独添加外键
语法:alter table 表名称 add foreign key (列名称) references关联表名称(列名称);
eg1:
1 2 | alter table teacher add constraint teacher_ref_student(foreignKeyName) foreign key (student_id) references student(id); |
eg2:
1 | alter table student add foreign key (id) references score(studentID); |
删除外键
语法:alter table 表名称 drop foreign key 外键名称;
eg1:
1 | alter table score drop foreign key score_1; |
eg2:
1 | alter table tableName1 drop foreign key foreignKeyName; |
唯一键
唯一键会自动添加唯一索引,所以唯一键列不需要添加索引
普通索引
创建一张表
1 2 3 4 5 6 7 | 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' , '吉安' ); |
方法一:直接创建索引
1 | CREATE INDEX 索引名 ON 表名 (列名(length)); |
- (列名(length)):length是可选项,下同。如果忽略length 的值,则使用整个列的值作为索引。如果指定,使用列的前length个字符来创建索引,这样有利于减小索引文件的大小。在不损失精确性的情况下,长度越短越好。
- 索引名建议以“index”结尾。
1 2 | create index name_index on member( name ); 以 name 字段创建普通索引 create index cardid_index on member(cardid(4)); 指定cardid字段值的前4个字符做普通索引的值 |
方法二:修改表方式创建索引
ALTER TABLE 表名 ADD INDEX 索引名(列名);
1 | ALTER TABLE member ADD INDEX phone_index(phone); 以phone字段创建普通索引 |
方法三:创建表时指定索引
一般不在创建表的时候添加索引,会让插入数据变慢。
-
CREATE TABLE 表名(字段1数据类型,字段2数据类型[,…],INDEX 索引名 (列名));
1 2 | create table member(id int (10) , name varchar (10) ,cardid int (18), phone int (11) ,address varchar (50), INDEX name_index( name )); |
删除索引:
1 2 3 | drop index name_index on member; --直接删除索引 drop index cardid_index on member; --直接删除索引 alter table member DROP index phone_index; --以修改表的方式删除索引 |
唯一索引(创建唯一键即创建唯一索引)
唯一索引:与普通索引类似,但区别是唯一索引列的每个值都唯一。 唯一索引 允许有空值(注意和主键不同)。如果是用组合索引创建,则列值的组合必须唯一。添加唯一键将自动创建唯一索引。
创建唯一键或者创建唯一索引都可实现。
方法一:直接创建唯一索引
CREATE UNIQUE INDEX 索引名 ON 表名(字段名);
1 | create unique index address_index on member (address); |
方法二:以修改表的方式创建
ALTER TABLE 表名 ADD UNIQUE 索引名(字段名);
1 | alter table member add unique phone_index(phone); |
方法三:创建表时指定索引
CREATE TABLE 表名(字段1 数据类型,字段2 数据类型[…],UNIQUE 索引名(字段名));
1 | create table member(id int (10) , name varchar (10) ,cardid int (18) ,phone int (11) ,address varchar (50), unique phone_index(phone)); |
主键索引(和创建主键的方式一样)
主键索引是一种特殊的唯一索引,必须指定为“PRIMARY KEY”。一个表只能有一个主键,不允许有空值。 添加主键将自动创建主键索引。
方法一:创建表时添加主键
create table 表名(字段1 XXX, 字段2 XXX, …primary key(字段));
create table 表名(字段1 XXX primary key, …); 将主键作为字段1的属性
1 2 3 | create table student(id int (10), name varchar (10), primary key (id)); create table student(id int (10) primary key , name varchar (10)); |
方法二:在现有表中添加主键
ALTER TABLE 表名 add primary key(字段名);
1 | ALTER TABLE member add primary key (id); --将id字段添加为主键 |
组合索引(单列索引与多列索引)
组合索引(单列索引与多列索引):可以是单列上创建的索引,也可以是在多列上创建的索引。
需要满足最左原则,因为select 语句的where条件是依次从左往右执行的,所以在使用select 语句查询时where 条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。
方法一:直接创建索引
CREATE INDEX 索引名 on 表名(字段1,字段2,字段3);
1 2 3 | create index name_cardid_phone_index on member3( name ,cardid,phone); 使用3个字段创建组合索引 alter table member3 drop index name_cardid_phone_index; 删除组合索引 遵循最左原则 |
方法二:修改表的方式创建索引
alter table 表名 add index 索引名(字段1,字段2, …, 字段n);
1 | alter table member add index phone_name_cardid_index(phone, name ,cardid); |
方法三:创建表的时候指定索引
CREATE TABLE 表名(列名1 数据类型,列名2 数据类型,列名3 数据类型, INDEX 索引名(字段1,字段2,字段3));
1 | create table member(id int (10), name varchar (10),phone int (11), index name_phone_index( name ,phone)); |
总结
到此这篇关于Mysql添加、删除、主键(外键)方法的文章就介绍到这了,更多相关Mysql添加删除主键外键内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!