Bootstrap

Mysql添加、删除、主键(外键)

目录

索引与键的增删改

主键

单独设置主键

删除主键

外键

外键的使用

建表时添加外键

单独添加外键

删除外键

唯一键


索引与键的增删改

主键

主键会自动添加唯一索引,所以主键列不需要添加索引

建表时设置主键

方法1、

create table student(
	id int primary key
);

方法2、

create table student(
	id int,
	primary key (id)
);
单独设置主键
alter table student add primary key(id)
删除主键
alter table student drop primary key;

外键

外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束(简单来说外键是另一个表的主键或者唯一约束)。外键可以有重复的, 可以是空值,用来建立和加强两个表数据之间的连接

外键的使用


外键的使用需要满足下列的条件:
1、两张表必须都是InnoDB表,并且它们没有临时表。

2、建立外键关系的对应列必须具有相似的InnoDB内部数据类型。

3、建立外键关系的对应列必须建立了索引。

创建外键的两种方式:
方式一:在创建表的时候进行添加
方式二:表已经创建好了,继续修改表的结构来添加外键。


建表时添加外键

方法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,   --学生的学号
)comment '学生表';

表2

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:

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);

删除外键

语法:alter table 表名称 drop foreign key 外键名称;

eg1:

alter table score drop foreign key score_1;	

eg2:

alter table tableName1 drop foreign key foreignKeyName;

唯一键

唯一键会自动添加唯一索引,所以唯一键列不需要添加索引

普通索引

创建一张表

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','吉安');
 
方法一:直接创建索引
 CREATE INDEX 索引名 ON 表名 (列名(length));
  • (列名(length)):length是可选项,下同。如果忽略length 的值,则使用整个列的值作为索引。如果指定,使用列的前length个字符来创建索引,这样有利于减小索引文件的大小。在不损失精确性的情况下,长度越短越好。
  • 索引名建议以“index"结尾。
 create index name_index on member(name);  以name字段创建普通索引
 ​
 create index cardid_index on member(cardid(4));  指定cardid字段值的前4个字符做普通索引的值
方法二:修改表方式创建索引

ALTER TABLE 表名 ADD INDEX 索引名(列名);

ALTER TABLE member ADD INDEX phone_index(phone);   以phone字段创建普通索引
方法三:创建表时指定索引

一般不在创建表的时候添加索引,会让插入数据变慢。

  1. CREATE TABLE 表名(字段1数据类型,字段2数据类型[,...],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;   --以修改表的方式删除索引

唯一索引(创建唯一键即创建唯一索引)


唯一索引:与普通索引类似,但区别是唯一索引列的每个值都唯一。 唯一索引 允许有空值(注意和主键不同)。如果是用组合索引创建,则列值的组合必须唯一。添加唯一键将自动创建唯一索引。

创建唯一键或者创建唯一索引都可实现。

方法一:直接创建唯一索引

 CREATE UNIQUE INDEX 索引名 ON 表名(字段名);

create unique index address_index on member (address);
方法二:以修改表的方式创建

ALTER TABLE 表名 ADD UNIQUE 索引名(字段名);

alter table member add unique phone_index(phone);
方法三:创建表时指定索引

CREATE TABLE 表名(字段1 数据类型,字段2 数据类型[...],UNIQUE 索引名(字段名));

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的属性

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(字段名);
ALTER TABLE member add primary key(id);    --将id字段添加为主键 

组合索引(单列索引与多列索引)
组合索引(单列索引与多列索引):可以是单列上创建的索引,也可以是在多列上创建的索引。

需要满足最左原则,因为select 语句的where条件是依次从左往右执行的,所以在使用select 语句查询时where 条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。

方法一:直接创建索引

CREATE INDEX 索引名 on 表名(字段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);

 alter table member add index phone_name_cardid_index(phone,name,cardid);
方法三:创建表的时候指定索引

CREATE TABLE 表名(列名1 数据类型,列名2 数据类型,列名3 数据类型, INDEX 索引名(字段1,字段2,字段3));

create table member(id int(10),name varchar(10),phone int(11),index name_phone_index(name,phone));

;