当前位置: 首页 > article >正文

[2003].第2-01节:关系型数据库表及SQL简介

所有博客大纲

后端学习大纲

MySQL学习大纲


1.数据库表介绍:

1.1.表、记录、字段

  • 1.E-R(entity-relationship,实体-联系)模型中有三个主要概念是: 实体集 、 属性 、 联系集
  • 2.一个实体集(class)对应于数据库中的一个表(table)一个实体(instance)则对应于数据库表中的一行(row),也称为一条记录(record)。一个属性(attribute)对应于数据库表中的一列(column),也称为一个字段(field)
    在这里插入图片描述

ORM思想 (Object Relational Mapping)体现

  • 数据库中的一个表 <—> Java或Python中的一个类
  • 表中的一条数据 <—> 类中的一个对象(或实体)
  • 表中的一个列 <----> 类中的一个字段、属性(field)

1.2.表与表的关联关系

  • 1.表与表之间的数据记录有关系(relationship)。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示
  • 2.有四种关系,分别是一对一关联、一对多关联、多对多关联、自我引用

a.一对一关联(one-to-one)

  • 1.在实际的开发中应用不多,因为一对一可以创建成一张表
  • 2.举例:设计学生表 :学号、姓名、手机号码、班级、系别、身份证号码、家庭住址、籍贯、紧急联系人、…等。如果表的字段数较多,可将学生表拆为两个表,两个表的记录是一一对应关系
    • 基础信息表 (常用信息):学号、姓名、手机号码、班级、系别
    • 档案信息表 (不常用信息):学号、身份证号码、家庭住址、籍贯、紧急联系人、…
  • 3.两种建表原则:
    • 外键唯一:主表的主键和从表的外键(唯一),形成主外键关系,外键唯一
    • 外键是主键:主表的主键和从表的主键,形成主外键关系
      在这里插入图片描述

b. 一对多关系(one-to-many)

  • 1.常见实例场景: 客户表和订单表 , 分类表和商品表 , 部门表和员工表
    在这里插入图片描述
  • 2.举例:一个员工对应一个部门,一个部门对应多个员工,主表是部门表,从表是员工表
    • 员工表:编号、姓名、…、所属部门
    • 部门表:编号、名称、简介
  • 3.一对多建表原则:在从表(多方)创建一个字段,这个字段作为外键指向主表(一方)的主键
    在这里插入图片描述

c.多对多关系:

  • 1.要表示多对多关系必须创建第三个表,该表通常称为 联接表 ,它将多对多关系划分为两个一对多关系。将这两个表的主键都插入到第三个表中
    在这里插入图片描述

  • 2.举例1:学生-课程

    • 学生信息表 :一行代表一个学生的信息(学号、姓名、手机号码、班级、系别…)
    • 课程信息表:一行代表一个课程信息(课程编号,授课老师等)
    • 选课信息表:一个学生可以选择多门课,一个课程可以多个学生选择( 联接表
  • 3.举例2:产品-订单

    • “订单”表和“产品”表有一种多对多的关系,这种关系是通过与“订单明细”表建立两个定义的。一个订单可以有多个产品,每个产品可以出现在多个订单中。
    • 产品表 :“产品”表中的每条记录表示一个产品。
    • 订单表 :“订单”表中的每条记录表示一个订单。
    • 订单明细表 :每个产品可以与“订单”表中的多条记录对应,即出现在多个订单中。一个订单可以与“产品”表中的多条记录对应,即包含多个产品( 联接表
      在这里插入图片描述
  • 3.举例3:用户-角色:

    • 多对多关系建表原则:需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键
      在这里插入图片描述

d.自我引用(Self reference):关系

在这里插入图片描述


2.SQL概述

2.1 SQL背景

  • 1.1974 年,IBM研究员发布了一篇揭开数据库技术的论文《SEQUEL:一门结构化的英语查询语言》,直到今天这门结构化的查询语言并没有太大的变化,相比于其他语言,SQL 的半衰期可以说是非常长 了。
  • 2.SQL(Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言,与数据直接打交道 ,由IBM 上世纪70年代开发出来。后由美国国家标准局(ANSI)开始着手制定SQL标准,先后有 SQL-86 , SQL-89 ,SQL-92 , SQL-99 等标准
  • 3.SQL 有两个重要的标准,分别是 SQL92 和 SQL99,它们分别代表了 92 年和 99 年颁布的 SQL 标准,我们今天使用的SQL 语言依然遵循这些标准
  • 4.不同的数据库生产厂商都支持SQL语句,但都有特有内容
    在这里插入图片描述

2.2.SQL分类:

SQL语言在功能上主要分为如下3大类:

  • 1.DDL:数据定义语言:
    • 这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。
    • 主要的语句关键字包括CREATE \ ALTER \ DROP \ RENAME \ TRUNCATE
  • 2.DML:数据操作语言。
    • 用于添加、删除、更新和查询数据库记录,并检查数据完整性。
    • 主要的语句关键字包括INSERT \ DELETE \ UPDATE \ SELECT
    • SELECT是SQL语言的基础,最为重要(重中之重)
  • 3.DCL:数据控制语言:
    • 用于定义数据库、表、字段、用户的访问权限和安全级别
    • 主要的语句关键字包括COMMIT \ ROLLBACK \ SAVEPOINT \ GRANT \ REVOKE

因为查询语句使用的非常的频繁,所以很多人把查询语句单拎出来一类:DQL(数据查询语言),那么分类就是如下形式:

  • 1.DDL 数据定义语言
  • 2.DML 数据操作语言
  • 3.DQL 数据查询语言
  • 4.DCL 数据控制语言

还有单独将 COMMIT 、 ROLLBACK 取出来称为TCL (Transaction Control Language,事务控制语言)。


2.3.SQL语言的规则:

a.基本规则:

  • 1.SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进
  • 2.每条命令以 ;\g\G 结束
    在这里插入图片描述
  • 3.关键字不能被缩写也不能分行
  • 4.关于标点符号
    • 必须保证所有的()、单引号、双引号是成对结束的
    • 必须使用英文状态下的半角输入方式
    • 字符串型和日期时间类型的数据可以使用单引号(’ ')表示
    • 列的别名,尽量使用双引号(" "),而且不建议省略as

b.命名规则:

  • 1.数据库、表名不得超过30个字符,变量名限制为29个
  • 2.必须只能包含 A–Z, a–z, 0–9, _共63个字符
  • 3.数据库名、表名、字段名等对象名中间不要包含空格
  • 4.同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名
  • 5.必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使用`(着重号)引起来
  • 6.保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了

c.命名规则举例:

#以下两句是一样的,不区分大小写
show databases;
SHOW DATABASES;
#创建表格
#create table student info(...); #表名错误,因为表名有空格
create table student_info(...);
#其中order使用``飘号,因为order和系统关键字或系统函数名等预定义标识符重名了
CREATE TABLE `order`();
select id as "编号", `name` as "姓名" from t_stu; #起别名时,as都可以省略
select id as 编号, `name` as 姓名 from t_stu; #如果字段别名中没有空格,那么可以省略""
select id as 编 号, `name` as 姓 名 from t_stu; #错误,如果字段别名中有空格,那么不能省略""

2.4.SQL语言的规范:

  • 1.MySQL在Windows环境下是大小写不敏感的
  • 2.MySQL在Linux环境下是大小写敏感的
    • 数据库名、表名、表的别名、变量名是严格区分大小写的
    • 关键字、函数名、列名(或字段名)、列的别名(字段的别名) 是忽略大小写的
  • 3.推荐采用统一的书写规范:
    • 数据库名、表名、表别名、字段名、字段别名等都小写
    • SQL 关键字、函数名、绑定变量等都大写

2.5.注 释:

  • 单行注释:#注释文字(MySQL特有的方式)
  • 单行注释:-- 注释文字(--后面必须包含一个空格)
  • 多行注释:/* 注释文字 */

2.6.数据导入指令

  • 1.在命令行客户端登录mysql,使用source指令导入:mysql> source d:\mysqldb.sql

http://www.kler.cn/a/454112.html

相关文章:

  • 一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类
  • 前端Python应用指南(四)Django实战:创建一个简单的博客系统
  • 新建一个springboot项目
  • 使用 ffmpeg 拼接合并视频文件
  • windows C#-使用对象初始值设定项初始化对象
  • Java中以某字符串开头且忽略大小写字母如何实现【正则表达式(Regex)】
  • [bug]java导出csv用Microsoft Office Excel打开乱码解决
  • 【K8S问题系列 | 20 】K8S如何删除异常对象(Pod、Namespace、PV、PVC)
  • 各种网站(学习资源、常用工具及其他,持续更新中~)
  • Python - 获取当前函数中的所有参数信息(名称和值)
  • 【Rust自学】7.3. 路径(Path)Pt.2:访问父级模块、pub关键字在结构体和枚举类型上的使用
  • Redis基础知识分享(含5种数据类型介绍+增删改查操作)
  • c#自定义事件
  • 2023年软件产业报告|2023年我国软件业经济运行情况及未来发展趋势预期
  • 【论文阅读笔记】Scalable, Detailed and Mask-Free Universal Photometric Stereo
  • 数据库系统概论
  • ctfshow-web入门-文件包含(web82-web86)条件竞争实现session会话文件包含
  • Llama3.370B超越GPT-4o和Claude3.5 Sonnet
  • 从随机生成到深度学习:使用DCGAN和CycleGAN生成图像的实战教程
  • Android 开发中自定义Toast
  • Metricbeat安装教程——Linux——Metricbeat监控ES集群
  • 从安全角度看 SEH 和 VEH
  • 软件测试之Android-sdk环境搭建
  • 网络安全top国际会议
  • C#数学相关开发性能优化方法
  • [计算机网络]RIP协议