简单写写mysql的主键、外键、索引

元气满满的小黄鸭呀!!!!!!

MySQL的主键、外键、索引的简单整理

主键

对于关系表,有个很重要的约束,就是任意两条记录不能重复,能够通过某个字段唯一区分出不同的记录,这个字段被称为主键。

  1. 唯一标志一条记录,不能有重复值,不允许为空
  2. 用来保证数据的完整性
  3. 主键只能有一个

外键:

在表中,通过某列字段,可以把数据与另外一张表关联起来,这种列称为外键

  1. 一个表的外键是另一个表的主键
  2. 用来和其他表建立连接
  3. 一个表可以有多个外键
  4. 外键不是通过列名实现的,而是通过定义外键约束实现的

    ALTER TABLE students

    ADD CONSTRAINT fk_class_id

    FOREIGN KEY (class_id)

    REFERENCES classes (id);

    其中,外键约束的名称fk_class_id可以任意,FOREIGN KEY (class_id)指定了class_id作为外键,REFERENCES classes (id)指定了这个外键将关联到classes表的id列(即classes表的主键)。

    通过定义外键约束,关系数据库可以保证无法插入无效的数据。

    由于外键约束会降低数据库的性能,大部分互联网应用程序为了追求速度,并不设置外键约束,而是仅靠应用程序自身来保证逻辑的正确性。这种情况下,class_id仅仅是一个普通的列,只是它起到了外键的作用而已。

    要删除一个外键约束,也是通过ALTER TABLE实现的:

    ALTER TABLE students
    DROP FOREIGN KEY fk_class_id;

    注意:删除外键约束并没有删除外键这一列。删除列是通过DROP COLUMN ...实现的。

    (删除列:alter table 表名 drop column 列名;)

索引

索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度

如果要经常根据score列进行查询,就可以对score列创建索引:

ALTER TABLE students

ADD INDEX idx_score (score);

索引的效率取决于索引列的值是否散列,即该列的值如果越互不相同,那么索引效率越高。反过来,如果记录的列存在大量相同的值,例如gender列,大约一半的记录值是M,另一半是F,因此,对该列创建索引就没有意义。

可以对一张表创建多个索引。索引的优点是提高了查询效率,缺点是在插入、更新和删除记录时,需要同时修改索引,因此,索引越多,插入、更新和删除记录的速度就越慢。

对于主键,关系数据库会自动对其创建主键索引。使用主键索引的效率是最高的,因为主键会保证绝对唯一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值