ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL学习笔记--2

2020-05-28 16:53:20  阅读:228  来源: 互联网

标签:class 外键 id 学习 索引 笔记 SQL NULL 主键


关系模型

关系数据库是建立在关系模型之上的,关系模型本质就是若干个存储数据的二维表,可以看成是很多个excel表。

表的行:是一条记录(Record),是一个逻辑概念;

表的列:称为字段(Column),每一行有若干字段。

字段定义了数据类型(如整形,浮点型,字符串等),以及是否允许为NULL

*注意NULL表示字段数据不存在。一个整型字段如果为NULL不表示它的值为0,同样的,一个字符串型字段为NULL也不表示它的值为空串' '。

通常情况下,字段应该避免允许为NULL。不允许为NULL可以简化查询条件,加快查询速度,也利于应用程序读取数据后无需判断是否为NULL。

表和表之间的关系有“一对多”“多对一”和“一对一”。

 

主键

 能通过它唯一区分记录的字段称为主键。也就是说,数据库中主键不能相同,一个主键只能有一条记录。比如下表如果设置name为主键,那么数据库中就不能存同名的其他人。

对主键的要求,最关键的一点是:记录一旦插入到表中,主键最好不要再修改,因为主键是用来唯一定位记录的,修改了主键,会造成一系列的影响。

因此主键最好选择与业务无关的字段,像身份证号都不可以作为主键。此外主键最好不要允许NULL类型。

一般使用 id 字段作为主键,id有两种类型:

  • 自增型:插入数据时系统自动分配一个自增数,简单方便最常用;如
    BIGINT NOT NULL AUTO_INCREMENT
  • GUID全局唯一标识符:是一种由算法生成的二进制长度为128位的数字标识符。

*联合主键:通过多个字段唯一标识记录,即两个或更多的字段都设置为主键,这种主键被称为联合主键。不常用。

外键

通过外键字段,可以将该条记录和另外一个数据表关联。

比如我们还有一个class表,前面学生表中的class_id就是外键,它与class表关联。

外键不是通过命名关联的,而是通过程序约束实现的:

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表的主键)。

通过定义外键约束,关系数据库可以保证无法插入无效的数据。即如果classes表不存在id=99的记录,students表就无法插入class_id=99的记录。

外键约束会影响性能,很多公司并不设置外键约束,仅靠程序保证逻辑正确。

删除外键:

ALTER TABLE students
DROP FOREIGN KEY fk_class_id;

该操作只是删除了外键约束,实际外键那一列没有被删除。

利用外键可以形成一对多的关系,多对多关系是通过中间表实现的,即两个一对多关系。

索引

索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。

通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度。

例如学生表中可以对score创建索引:

ALTER TABLE students
ADD INDEX idx_score (score);    idx_score是索引名称,是任意的。

索引的效率取决于索引列的值是否散列,即该列的值如果越互不相同,那么索引效率越高。如果存在大量相同的值,则索引将失去意义。

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

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

唯一索引:

像一些字段需要具有唯一性,比如身份证号,我们可以添加唯一约束:

ALTER TABLE students
ADD CONSTRAINT uni_name UNIQUE (name);

如果还需要添加索引,有唯一索引:

ALTER TABLE students
ADD UNIQUE INDEX uni_name (name);

无论是否创建索引,对于用户和应用程序来说,使用关系数据库不会有任何区别。当我们在数据库中查询时,如果有相应的索引可用,数据库系统就会自动使用索引来提高查询效率,如果没有索引,查询只是速度会变慢。因此,索引可以在使用数据库的过程中逐步优化。

 

 

 参考:廖雪峰的SQL教程

标签:class,外键,id,学习,索引,笔记,SQL,NULL,主键
来源: https://www.cnblogs.com/cpcpp/p/12981851.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有