存储架构

数据库(MySQL)

微信扫一扫,分享到朋友圈

数据库(MySQL)
0

DB、DBS、DBMS之间有什么关系?

  • DB、DBS、DBMS三者的关系是:DBS(数据库系统)包括DB(数据库)和DBMS(数据库管理系统)。数据库系统是一个通称,包括数据库、数据库管理系统、数据库管理人员等的统称,是最大的范畴。  
  • DBMS和DB的关系:DBMS数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库(DB)。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过DBMS访问数据库(DB)中的数据。
  •  DBS和DB的关系:数据库系统DBS(Data Base System,简称DBS)是一个实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。它通常由软件、数据库(DB)和数据管理员(DBA)组成。

扩展资料

数据库及数据库系统组成成分:

  • 数据库,即存储在磁带、磁盘、光盘或其他外存介质上、按一定结构组织在一起的相关数据的集合。  
  • 数据库管理系统(DBMS)。它是一组能完成描述、管理、维护数据库的程序系统。它按照一种公用的和可控制的方法完成插入新数据、修改和检索原有数据的操作。 
  • 数据库管理员(DBA),有重新组织数据的能力,能改变数据的存储结构或数据存储位置。 
  • 用户和应用程序,具有可修改性和可扩充性。

参考资料:

百度百科—DBMS

百度百科—DBS

百度百科—数据库

数据库的基本概念

  • 数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的 数据集合。存储、维护和管理数据的集合。
  • 数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统 访问数据库中的数据。
  •   注意:通常情况下,经常会用数据库来表示他们使用的数据库软件,这经常会引起混淆,确切的说, 数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。

常见数据库管理系统

  • Oracle:目前比较成功的关系型数据库管理系统。运行稳定、功能齐全、性能超群、技术领先。主要应用在大型的企业数据库领域。
  •  MySQL:免费的数据库系统。被广泛用于中小型应用系统。体积小、速度快、总体拥有成本低,开放源代码。2008年被SUN收购,2009年SUN被Oracle收购。
  •  SQL Server:Microsoft的产品。软件界面友好、易学易用,在操作性和交互性方面独树一帜。 
  • PostgreSQL:加州大学伯克利分校以教学目的开发的数据库系统,支持关系和面向对象的数据库,属于自由数据库管理系统。
  •  DB2:IBM的产品。

数据库服务器、数据库和表的关系

  • 所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。 
  • 为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。 
  • 数据库服务器、数据库和表的关系如图所示: 

如何操作数据库

  • 数据库管理系统可以通过SQL(结构化查询语言)来定义和操作数据,维护数据的完整性和安全性,以及进行各种数据库的管理等。 

什么是SQL

  • SQL:Structure Query Language。 
  • SQL被美国国家标准局(ANSI)确定为 关系型数据库 语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。 
  • SQL优点: 
  1. 不是某个特定数据库供应商专有的语言。几乎所有重要的数据库管理系统都支持SQL。
  2.  简单易学,该语言的语句都是由描述性很强的英语单词组成,且这些单词的数目不多。 
  3. 高度非过程化,即用SQL操作数据库,只需指出“做什么”,无须指明“怎么做”,存取路径的选择和操作的执行由DBMS自动完成。 

SQL的分类

  • 它所支持的SQL提供以下功能: 
  1. DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
  2. DML(Data Manipulation Language):数据操作语言,用来操作数据库表中的记录(数据);  
  3. DQL(Data Query Language):数据查询语言,用来查询记录(数据)。 
  4. DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;

DDL数据定义语言

  • DDL:Data Definition Language 
  • 作用:用于描述数据库中要存储的现实世界实体的语言。即创建数据库和表的结构。 
  • 常用关键字: CREATE ALTER DROP  

创建数据库

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_specification [, create_specification] ...]
 
create_specification:
    [DEFAULT] CHARACTER SET charset_name //指定字符集
  | [DEFAULT] COLLATE collation_name  //指定数据库字符集的比较方式复制代码

查看、删除数据库

显示数据库语句:
SHOW DATABASES

显示数据库创建语句:
SHOW CREATE DATABASE db_name
 
数据库删除语句:
DROP DATABASE  [IF EXISTS]  db_name 
复制代码

修改、备份、恢复数据库

ALTER  DATABASE  [IF NOT EXISTS] db_name    
	[alter_specification [, alter_specification] ...] 

alter_specification:    

    [DEFAULT] CHARACTER SET charset_name  
|   [DEFAULT] COLLATE collation_name
复制代码

创建表(基本语句)

CREATE TABLE table_name
(
	field1  datatype,
	field2  datatype,
	field3  datatype
)character set 字符集 collate 校对规则
field:指定列名 datatype:指定列类型
复制代码

注意:创建表前,要先使用use db语句使用库。

MySQL常用数据类型

分类数据类型说明

数值类型BIT(M)
TINYINT [UNSIGNED] [ZEROFILL] 
BOOL,BOOLEAN 
SMALLINT [UNSIGNED] [ZEROFILL] 
INT [UNSIGNED] [ZEROFILL] 
BIGINT [UNSIGNED] [ZEROFILL] 
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] 
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 位类型。M指定位数,默认值1,范围1-64
带符号的范围是-128到127。无符号0到255。
使用0或1表示真或假
2的16次方
2的32次方
2的64次方
M指定显示长度,d指定小数位数
表示比float精度更大的小数

文本、二进制类型CHAR(size) char(20)
VARCHAR(size)  varchar(20)
BLOB   LONGBLOB
TEXT(clob)          LONGTEXT(longclob)固定长度字符串
可变长度字符串
二进制数据
大文本时间日期DATE/DATETIME/TimeStamp日期类型(YYYY-MM-DD)  (YYYY-MM-DD HH:MM:SS),TimeStamp表示时间戳,它可用于自动记录insert、update操作的时间复制代码

修改表

使用 ALTER TABLE 语句追加, 修改, 或删除列的语法。

ALTER TABLE table_name
ADD		   (column datatype [DEFAULT expr]
		   [, column datatype]...);
复制代码
ALTER TABLE table_name
MODIFY	   column datatype [DEFAULT expr]
		   [, column datatype]...;
复制代码
ALTER TABLE table_name
DROP	      (column);
复制代码
  • 修改表的名称:Rename table 表名 to 新表名 
  • 修改表的字符集:alter table student character set utf8;

DML数据操纵语言

  • DML:Data Manipulation Language 
  • 作用:用于向数据库表中插入、删除、修改数据。 
  • 常用关键字: INSERT UPDATE DELETE

Insert语句

  • 使用 INSERT 语句向表中插入数据。
INSERT INTO	table [(column [, column...])]
VALUES		(value [, value...]);
复制代码
  • 插入的数据应与字段的数据类型相同。
  • 数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。 
  • 在values中列出的数据位置必须与被加入的列的排列位置相对应。 
  • 字符和日期型数据应包含在单引号中。  
  • 插入空值,不指定或insert into table value(null) 

mysql中文乱码

mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、system。

  • client是客户端使用的字符集。  
  • connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。 
  •  database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。 
  •  results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。 
  •  server是服务器安装时指定的默认字符集设定。 
  •  system是数据库系统使用的字符集设定。 

Update语句

  • 使用 update语句修改表中数据。 
    UPDATE 	tbl_name    
    	SET col_name1=expr1 [, col_name2=expr2 ...]    
    	[WHERE where_definition]    
    复制代码
  • UPDATE语法可以用新值更新原有表行中的各列。 
  • SET子句指示要修改哪些列和要给予哪些值。 
  • WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。 

Delete语句

  • 使用 delete语句删除表中数据。 
delete from _name       
	[WHERE where_definition]    
复制代码
  • 如果不使用where子句,将删除表中所有数据。 
  • Delete语句不能删除某一列的值(可使用update) 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。 
  • 同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。 
  • 删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有所不同,参看mysql文档。 
  1. truncate table 不仅是删除表里面的数据,而且还会清空表里面主键的标识。也就是说使用过truncate table 的表在重新写入数据的时候,标识符会从0或1重新开始(看你设置的种子号)。
    delete * from就是仅仅能删除数据,不能清空标识。不过delete * from可以后面加Where truncate table却不能加Where。。
  2. TRUNCATE TABLE 和不带 WHERE 的 DELETE 功能是一样的,都是删除表中的所有数据,不过 TRUNCATE TABLE 速度更快,占用的日志更少,这是因为 TRUNCATE TABLE 直接释放 数据页 并且在事务日志中也只记录 数据页 的释放,而 DELETE 是 一行一行地 删除,在事务日志中要记录 每一条记录 的删除。

那么可不可以用 TRUNCATE TABLE 代替不带 WHERE 的 DELETE 呢?在以下情况是不行的:

  • 要保留标识的情况下不能用 TRUNCATE TABLE,因为 TRUNCATE TABLE 会重置标识
  • 需要使用触发器的情况下不能使用 TRUNCATE TABLE ,它不会激发触发器。
  • 对于由 FOREIGN KEY 约束引用的表(即主键所在的表,不是外键所在的表)不能使用 TRUNCATE TABLE。
  • 对于参与了索引视图的表不能使用 TRUNCATE TABLE ,注意指索引视图,并非普通视图。

Truncate是SQL中的一个删除数据表内容的语句,用法是:

TRUNCATE TABLE [Table Name]复制代码
    • 具有聚集索引的视图成为索引视图;必须先为视图创建聚集索引,然后才能为该视图定义其他索引,因为在创建其他索引的时候,SQL SERVER, 会重建表是的非聚集索引。

DQL数据查询语言(简单的)

  • DQL:Data Query Language 
  • 作用:查询数据,返回结果集。 
  • 常用关键字: SELECT

Select语句(1)

  • 基本select语句 
SELECT [DISTINCT] *|{column1, column2, column3..}FROM	table;
复制代码
  • Select 指定查询哪些列的数据。 
  • column指定列名。 
  • *号代表查询所有列。 
  • From指定查询哪张表。 
  • DISTINCT可选,指显示结果时,是否剔除重复数据 

Select语句(2)

  • 在select语句中可使用表达式对查询的列进行运算 
SELECT *|{column1|expression, column2|expression,..}FROM	table;
复制代码
  • 在select语句中可使用as语句 
SELECT column as 别名 from 表名;
复制代码

Select语句(3)

  • 在where子句中经常使用的运算符 
比较运算符>   <   <=   >=   =    <>大于、小于、大于(小于)等于、不等于BETWEEN  ...AND...显示在某一区间的值(含头含尾)IN(set)显示在in列表中的值,例:in(100,200)LIKE ‘张pattern’模糊查询IS NULL判断是否为空
逻辑运算符and多个条件同时成立or多个条件任一成立not不成立,例:where not(salary>100);复制代码
    • Like语句中,% 代表零个或多个任意字符,_ 代表一个字符,例first_name like ‘_a%’; 

Select语句(4)

  • 使用order by 子句排序查询结果。 
SELECT column1, column2. column3..
		FROM	table;
		order by column asc|desc
复制代码
  • Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。
  •  Asc 升序、Desc 降序 
  • ORDER BY 子句应位于SELECT语句的结尾。

Select语句(5) 

  • 使用group by 子句对列进行分组
SELECT column1, column2. column3.. FROM	table;
		group by column
复制代码
  • 使用having 子句过滤 
SELECT column1, column2. column3..
		FROM	table;
		group by column having ...
复制代码
  • Having和where均可实现过滤,但在having可以使用合计函数,having通常跟在group by后,它作用于组。

数据完整性

  • 数据完整性是为了保证插入到数据中的数据是正确的,它防止了用户可能的输入错误。
  • 数据完整性主要分为以下三类: 
  1. 实体完整性: 规定表的一行(即每一条记录)在表中是唯一的实体。实体完整性通过表的主键来实现。 
  2. 域完整性: 指数据库表的列(即字段)必须符合某种特定的数据类型或约束。比如NOT NULL。 
  3. 参照完整性: 保证一个表的外键和另一个表的主键对应。 

定义表的约束

  • 定义主键约束 
    •  primary key:不允许为空,不允许重复 
      • 删除主键:alter table tablename drop primary key ; 
  • 定义主键自动增长 auto_increment 
  • 定义唯一约束 unique 
  • 定义非空约束 not null 
  • 定义外键约束 constraint ordersid_FK foreign key(ordersid) references orders(id),

DQL数据查询语言(复杂的)

  • 连接查询: 
    • 交叉连接(cross join):不带on子句,返回连接表中所有数据行的笛卡儿积。 
    • 内连接(inner join):返回连接表中符合连接条件及查询条件的数据行。 
    • 外连接:分为左外连接(left out join)、右外连接(right outer join)。与内连接不同的是,外连接不仅返回连接表中符合连接条件及查询条件的数据行,也返回左表(左外连接时)或右表(右外连接时)中仅符合查询条件但不符合连接条件的数据行。 
  • 子查询 
  • 联合查询 
  • 报表查询

连接查询

  • 连接查询的from子句的连接语法格式为:
from TABLE1 join_type TABLE2  [on (join_condition)] [where (query_condition)]
复制代码
  • 其中,TABLE1和TABLE2表示参与连接操作的表,TABLE1为左表,TABLE2为右表。on子句设定连接条件,where子句设定查询条件,join_type表示连接类型。

交叉连接查询 

  • 交叉连接查询CUSTOMER表和ORDERS表 
SELECT * FROM customer CROSS JOIN orders;
SELECT * FROM customer,orders;
复制代码

内连接查询

  • 显式内连接:使用inner join关键字,在on子句中设定连接条件
SELECT * FROM customer c INNER JOIN orders o ON c.id=o.customer_id; 
复制代码
  • 隐式内连接:不包含inner join关键字和on关键字,在where子句中设定连接条件
SELECT * FROM customer c,orders o WHERE c.id=o.customer_id; 
复制代码

右外连接查询

  • 使用right outer join关键字,在on子句中设定连接条件
    SELECT * FROM customer c RIGHT OUTER JOIN orders o ON c.id=o.customer_id; 
    复制代码
    • 不仅包含符合c.id=o.customer_id连接条件的数据行,还包含orders右表中的其他数据行,带查询条件的右外连接查询,在where子句中设定查询条件
      SELECT * FROM customer c RIGHT OUTER JOIN orders o ON c.id=o.customer_id WHERE o.price>250;
      复制代码

子查询

  • 子查询也叫嵌套查询,是指在select子句或者where子句中又嵌入select查询语句,子查询的语句放在小括号之内。
  • 查询“赵安康”的所有订单信息
    SELECT * FROM orders WHERE customer_id=(SELECT id FROM customer WHERE name LIKE '%赵安康%');
    复制代码

左外连接查询

  • 使用left outer join关键字,在on子句中设定连接条件 
SELECT * FROM customer c LEFT OUTER JOIN orders o ON c.id=o.customer_id; 
复制代码
    • 不仅包含符合c.id=o.customer_id连接条件的数据行,还包含customer左表中的其他数据行 
  • 带查询条件的左外连接查询,在where子句中设定查询条件
    SELECT * FROM customer c LEFT OUTER JOIN orders o ON c.id=o.customer_id WHERE o.price>250;
    复制代码

联合查询

  • 联合查询能够合并两条查询语句的查询结果,去掉其中的重复数据行,然后返回没有重复数据行的查询结果。联合查询使用union关键字
    SELECT * FROM orders WHERE price>200 UNION SELECT * FROM orders WHERE customer_id=1;
    复制代码

报表查询

  • 报表查询对数据行进行分组统计,其语法格式为:
[select …] from … [where…] [ group by … [having… ]] [ order by … ] 
复制代码
  • 其中group by 子句指定按照哪些字段分组,having子句设定分组查询条件。在报表查询中可以使用SQL函数。

合计函数-Count

  • Count(列名)返回某一列,行的总数 
Select count(*)|count(列名) from tablename
		[WHERE where_definition]  复制代码

合计函数-SUM

  • Sum函数返回满足where条件的行的和 
Select sum(列名){,sum(列名)…} from tablename
		[WHERE where_definition]       
复制代码
  • 注意:sum仅对数值起作用,否则会报错
  • 注意:对多列求和,“,”号不能少。

合计函数-AVG

  • AVG函数返回满足where条件的一列的平均值 
Select sum(列名){,sum(列名)…} from tablename
		[WHERE where_definition]   
复制代码

合计函数-MAX/MIN

  • Max/min函数返回满足where条件的一列的最大/最小值 
Select max(列名) from tablename
		[WHERE where_definition]   
复制代码
复制代码

数据的备份与恢复

  • 数据库备份: mysqldump -u root -psorry test>test.sql 
  • 数据库恢复: 
    • 创建数据库并选择该数据库 
    • SOURCE 数据库文件 
    • 或者: mysql -u root -psorry test<test.sql 
阅读原文...

微信扫一扫,分享到朋友圈

数据库(MySQL)
0
稀土掘金

《数据密集型应用系统设计》第八章《分布式系统的挑战》笔记

上一篇

AMD Navi显卡规格泄露:7nm工艺,最高249美元,支持光追

下一篇

评论已经被关闭。

插入图片

热门分类

往期推荐

数据库(MySQL)

长按储存图像,分享给朋友