数据库
2021-4-2
| 2023-8-2
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 

 

SQL、DB、DBMS

DB:DataBase 数据库

数据库可以是保存在硬设备上的文件,也可以不是。在很大程度上说,数据库究竟是文件还是别的什么东西并不重要,因为我们并不直接访问数据库,是DBMS替我们访问数据库。
 

DBMS:DataBase Management System

数据库管理系统,可分为两类:
  • 基于共享文件系统的DBMS
    • 包括诸如Microsoft Access和FileMaker,用于桌面用途,通常不用于高端或更关键的应用
  • 基于客户机—服务器的DBMS
    • MySQL、Oracle以及Microsoft SQL Server等数据库是基于客户机—服务器的数据库。客户机—服务器应用分为两个不同的部分。服务器部分是负责所有数据访问和处理的一个软件,运行在称为数据库服务器的计算机上。
      与数据文件打交道的只有服务器软件,关于数据、数据添加、删除和数据更新的所有请求都由服务器软件完成。这些请求或更改来自运行客户机软件的计算机。客户机是与用户打交道的软件。例如,如果你请求一个按字母顺序列出的产品表,则客户机软件通过网络提交该请求给服务器软件。服务器软件处理这个请求,根据需要过滤、丢弃和排序数据,然后把结果送回到你的客户机软件。
       
      服务器软件为MySQL DBMS。可以在本地安装的副本上运行,也可以连接到运行在你具有访问权的远程服务器上的一个副本;客户机可以是MySQL提供的工具、脚本语言(如Perl)、Web应用开发语言(如ASP、ColdFusion、JSP和PHP)、程序设计语言(如C++、Java)等。
 

SQL

结构化查询语言,是一门标准通用的语言。标准的SQL适合于所有的数据库产品。SQL语句在执行的时候,实际上内部也会先进行编译(SQL语句的编译由DBMS完成),然后再执行sql。
SQL语句不区分大小写,在处理SQL语句时,其中所有空格都被忽略。SQL语句可以在一行上给出,也可以分成许多行。
 
SQL语句的分类
  • DQL(数据查询语言):查询语句,凡是select语句都是DQL(DQL-Data Query Language)
  • DML(数据操作语言):insert delete update,对表当中的数据进行增删改(DML-Data Manipulation Language)
  • DDL(数据定义语言):create drop alter,对表结构的增删改(DDL-Data Definition Language)
  • TCL(事务控制语言):commit提交事务,rollback回滚事务(TCL-Transactional Control Language)
  • DCL(数据控制语言):grant授权、revoke撤销权限等(DCL-Data Control Language)
 
DBMS负责执行SQL语句,通过执行SQL语句来操作DB当中的数据。DBMS -(执行)-> SQL -(操作)-> DB
 

表:table,是数据库的基本组成单元,所有的数据都以表格的形式组织,目的是可读性强。
数据库中的每个表都有一个名字,用来标识自己。此名字唯一,表示数据库中没有其他表具有相同的名字。
表名的唯一性取决于多个因素,如数据库名和表名等的结合。这表示,虽然在相同数据库中不能两次使用相同的表名,但在不同的数据库中却可以使用相同的表名。
 
一个表包括行和列:
  • 行:被称为数据/记录(data)
  • 列:被称为字段(column),每一个字段应该包括哪些属性?字段名、数据类型、相关的约束
 

主键

表中每一行都应该有可以唯一标识自己的一列(或一组列),唯一标识表中每行的这个列(或这组列)称为主键。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只涉及相关的行。
应该总是定义主键:虽然并不总是都需要主键,但大多数数据库设计人员都应保证他们创建的每个表具有一个主键,以便于以后的数据操纵和管理。
 
表中的任何列都可以作为主键,只要它满足以下条件:
  • 任意两行都不具有相同的主键值
  • 每个行都必须具有一个主键值(主键列不允许NULL值)
主键通常定义在表的一列上,但这并不是必需的,也可以一起使用多个列作为主键。在使用多列作为主键时,上述条件必须应用到构成主键的所有列,所有列值的组合必须是唯一的(但单个列的值可以不唯一)。
 
主键的最好习惯:除MySQL强制实施的规则外,应该坚持的几个普遍认可的最好习惯为:
  • 不更新主键列中的值
  • 不重用主键列的值
  • 不在主键列中使用可能会更改的值(例如,如果使用一个名字作为主键以标识某个供应商,当该供应商合并和更改其名字时,必须更改这个主键)
 
  • MySQL
  • MySQLMySQL 锁
    目录