Mysql添加、删除、主键(外键)方法详细讲解

 更新时间:2024年06月03日 09:45:59   作者:爱吃java的羊儿  
MySQL是一种广泛使用的开源关系型数据库管理系统,在数据库设计中主键和外键是两个重要的概念,下面这篇文章主要给大家介绍了关于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字段创建普通索引

方法三:创建表时指定索引

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

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

总结 

到此这篇关于Mysql添加、删除、主键(外键)方法的文章就介绍到这了,更多相关Mysql添加删除主键外键内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql8创建、删除用户以及授权、消权操作详解

    mysql8创建、删除用户以及授权、消权操作详解

    上网找过资料说要进入mysql数据库在进行这些操作,所以下面这篇文章主要给大家介绍了关于mysql8创建、删除用户以及授权、消权操作的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • 浅谈MySQL大表优化方案

    浅谈MySQL大表优化方案

    这篇文章主要介绍了浅谈MySQL大表优化方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Mysql备份多个数据库代码实例

    Mysql备份多个数据库代码实例

    这篇文章主要介绍了Mysql备份多个数据库代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • MySQL配置SSL主从复制

    MySQL配置SSL主从复制

    本文给大家分享的是如何给mysql配置SSL主从复制的具体方法,分别给出了5.6和5.7两个版本的实例,希望大家能够喜欢
    2019-01-01
  • MySQL触发器简单用法示例

    MySQL触发器简单用法示例

    这篇文章主要介绍了MySQL触发器简单用法,结合实例形式分析了mysql触发器的创建、执行、查看、删除等相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • 详细谈谈MYSQL中的COLLATE是什么

    详细谈谈MYSQL中的COLLATE是什么

    mysql COLLATE是校对集的意思,可以理解为,排序规则等,下面这篇文章详细的给大家介绍了关于MYSQL中COLLATE是什么的相关资料,需要的朋友可以参考下
    2021-06-06
  • Mysql使用存储过程快速添加百万数据的示例代码

    Mysql使用存储过程快速添加百万数据的示例代码

    这篇文章主要介绍了Mysql使用存储过程快速添加百万数据,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • MySQL查询学习之基础查询操作

    MySQL查询学习之基础查询操作

    这篇文章主要给大家介绍了关于MySQL查询学习之基础查询操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • mysql忘记密码怎么办

    mysql忘记密码怎么办

    mysql忘记密码怎么办?这篇文章主要为大家详细介绍了MySQL忘记密码的解决办法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • mysql中json基础查询详解(附图文)

    mysql中json基础查询详解(附图文)

    MySQL提供了一些函数来对JSON数据进行操作,下面这篇文章主要给大家介绍了关于mysql中json基础查询的相关资料,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10

最新评论