MySQL 必知必会--基础概念

目录

 

主键,外键和索引

一,主键 Primary Key

定义

例子

二,外键

定义

例子

三,索引

定义

例子

四,概念对比

主键 vs 唯一索引


主键,外键和索引

一,主键 Primary Key

定义

主键就是在一个表中,能够唯一标识表内一行的一列或多列。

没有主键的话,删除和更新一行数据,会比较困难,因为你无法保证操作只涉及到你想要操作的行

主键并不是必须的,但是DBA都会给每个表生产主键,方便数据操作和管理

数据库系统会为主键自动建立唯一性索引

 

构成主键的列有什么要求:

1,任意2行不能有相同的主键

2,主键列不允许为NULL

3,主键列中的值不允许修改

4,主键值不能重用(就是说就是你删除了某行,这个行的主键值也不能用于新的行)

 

例子

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(5) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`,`name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

此处,实际使用id作为主键即可,选择id和name作为主键,仅仅为演示如何用多列多主键

对于已经创建好的表,也可以添加主键(如果没创建的话)

Alter table user add Primary Key(id);

 

二,外键

定义

外键就是子表引用主表中的一列或多列,这些列构成了主表的主键。

它的作用是建立和加强2个表之间的数据连接,保证数据的一致性等。

外键列会被自动建立索引

 

例子

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(5) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `score` (
  `id` int(11) NOT NULL,
  `score` tinyint(4) DEFAULT '0',
  KEY `fk_id` (`id`),
  CONSTRAINT `fk_id` FOREIGN KEY (`id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

创建外键的语法:CONSTRAINT  外键名字   FOREIGN KEY (外键列的名字)  REFERENCES   主表(主表中的列)

如果不指定CONSTRAINT  外键名字,数据库会自动生成一个名字

 

也可以在表创建后为表添加外键

alter table score add constraint fk_id  foreign key (id) references user(id);

 

 

三,索引

定义

建立索引的目的是方便检索,加快访问速度

索引分为普通索引和唯一索引,主键是一种唯一索引。

 

例子

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(5) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `idx_name` (`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;

这个例子中,我们创建表时,为name列创建了普通索引

我们也可以创建表后,添加索引

alter table user add index idx_name (name);

添加唯一索引

alter table user drop index idx_name

alter table user add unique index idx_name(name);

 

 

四,概念对比

主键 vs 唯一索引

主键一定是唯一索引,但唯一索引不一定是主键

一个表中可以有多个唯一索引,但只能有一个主键

主键列不允许为空,但是唯一索引的列可以为空

主键可以被其他表作为外键引用,而唯一索引不行

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值