SQL学习笔记 | 廖雪峰SQL教程

本文是SQL学习笔记,介绍了关系数据库的基础,包括数据模型、数据类型、主键和外键,以及SQL语言的查询、修改操作。深入讲解了MySQL的使用,如安装、管理数据库和实用SQL语句。最后,讨论了数据库事务的概念,包括ACID特性、事务隔离级别。
摘要由CSDN通过智能技术生成

〇、简介

教程链接:廖雪峰SQL教程
现代程序离不开关系数据库,要使用关系数据库就必须掌握SQL
一种最流行的开源数据库MySQL
NoSQL数据库,也就是非SQL的数据库,包括MongoDB、Cassandra、Dynamo等等,它们都不是关系数据库。NoSQL数据库作为SQL数据库的补充,两者不再是二选一的问题,而是主从关系。
在线SQL

1. 关系数据库概述

数据库作为一种专门管理数据的软件

数据模型

层次模型(类似树)
网状模型(类似图)
关系模型(excel表)

数据类型

REAL可写成FLOAT(24)
常用:BIGINT, VARCHAR(N)
在这里插入图片描述

主流关系数据库

商用数据库,例如:OracleSQL Server,DB2等;
开源数据库,例如:MySQL,PostgreSQL等;
桌面数据库,以微软Access为代表,适合桌面应用程序使用;
嵌入式数据库,以Sqlite为代表,适合手机应用和桌面程序。

SQL语言

SQL是结构化查询语言的缩写,用来访问和操作数据库系统。SQL语句既可以查询数据库中的数据,也可以添加更新删除数据库中的数据,还可以对数据库进行管理维护操作。不同的数据库,都支持SQL,这样,我们通过学习SQL这一种语言,就可以操作各种不同的数据库。

DDL:Data Definition Language
DDL允许用户定义数据,也就是创建表删除表修改表结构这些操作。通常,DDL由数据库管理员执行。

DML:Data Manipulation Language
DML为用户提供添加删除更新 数据的能力,这些是应用程序对数据库的日常操作。

DQL:Data Query Language
DQL允许用户 查询数据,这也是通常最频繁的数据库日常操作。

SQL关键字总是大写,以示突出,表名和列名均使用小写。

使用MySQL时,不同的表还可以使用不同的数据库引擎。如果你不知道应该采用哪种引擎,记住总是选择InnoDB就好了。

安装MySQL

https://dev.mysql.com/downloads/mysql/
MySQL会自动创建一个root用户,并提示输入root口令。
在命令提示符下输入mysql -u root -p,然后输入口令,如果一切正确,就会连接到MySQL服务器,同时提示符变为mysql>。

输入exit退出MySQL命令行。注意,MySQL服务器仍在后台运行。

一、关系模型

关系模型本质上就是若干个存储数据的二维表,可以把它们看作很多Excel表。

表的每一行称为记录(Record),记录是一个逻辑意义上的数据。

表的每一列称为字段(Column),同一个表的每一行记录都拥有相同的若干字段。

字段定义了数据类型(整型、浮点型、字符串、日期等),以及是否允许为NULL。注意NULL表示字段数据不存在。一个整型字段如果为NULL不表示它的值为0,同样的,一个字符串型字段为NULL也不表示它的值为空串’’。
通常情况下,字段应该避免允许为NULL。不允许为NULL可以简化查询条件,加快查询速度,也利于应用程序读取数据后无需判断是否为NULL。

和Excel表有所不同的是,关系数据库的表和表之间需要建立 “一对多”,“多对一”和“一对一” 的关系,这样才能够按照应用程序的逻辑来组织和存储数据。

每一行对应着一个班级,而一个班级对应着多个学生,所以班级表和学生表的关系就是**“一对多”**
一对多:一个表里的一行数据对应另一个表里的多行数据
一对一:一个表里的一行数据对应另一个表里的一行数据
在关系数据库中,关系是通过主键外键来维护的。

1. 主键(唯一标识)

关系表,任意两条记录不能重复。
够通过某个字段唯一区分出不同的记录,这个字段被称为主键
主键不允许有NULL。
主键一般不随意更改,因为它是用来唯一定位记录的,通过主键我们能索引到一个记录,而且是唯一的。

主键选取的原则
不适用任何业务相关的字段作为主键
此外,名字可以重复,邮箱,手机号等数字后续要能随时更改,所以都不能作为主键

一般把主键字段命名为id

  1. 自增整数类型(BIGINT自增):数据库会在插入数据时自动为每一条记录分配一个自增整数,这样我们就完全不用担心主键重复,也不用自己预先生成主键;
  2. 全局唯一GUID类型:使用一种全局唯一的字符串作为主键,类似8f55d96b-8acc-4636-8cb8-76bf8abc2f57。GUID算法通过网卡MAC地址、时间戳和随机数保证任意计算机在任意时间生成的字符串都是不同的,大部分编程语言都内置了GUID算法,可以自己预算出主键。

联合主键(尽量不使用)

多个字段唯一标识记录,即两个或更多的字段都设置为主键,这种主键被称为联合主键。
对于联合主键,允许一列有重复,只要不是所有主键列都重复即可
例如,学生姓名 和 学生学号 虽然性别会重复,但是两者组合起来就不会有重复。

2. 外键

在students表中,增加class_id字段,这个字段映射到classes表的主键;通过class_id的字段,可以把数据与另一张表关联起来,这种列称为外键

外键既可以通过数据库来约束,也可以不设置约束,仅依靠应用程序的逻辑来保证。

外键并不是通过列名实现的,而是通过定义外键约束实现的:

ALTER TABLE students #声明
ADD CONSTRAINT fk_class_id #增加约束,名称可以任意
FOREIGN KEY (class_id) #外键的名称
REFERENCES classes (id); #映射另一个表的主键

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

删除一个外键约束:

ALTER TABLE students
DROP FOREIGN KEY fk_class_id;

多对多

老师和班级的对应就是多对多
多对多关系实际上是通过两个一对多关系实现的,即通过一个中间表,关联两个一对多关系,就形成了多对多关系
teachers表:id和老师name
classes表:id和班级name
teacher_class表:id,teacher_id, class_id 关联上面两个表

一对一

一对一关系是指,一个表的记录对应到另一个表的唯一一个记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值