关于数据库你必须知道这些

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 在平时的开发过程中,数据库是必须掌握的一项技能,只有熟练的掌握了数据库的相关知识才能大大的提高开发效率和代码质量。

前言


在平时的开发过程中,数据库是必须掌握的一项技能,只有熟练的掌握了数据库的相关知识才能大大的提高开发效率和代码质量。


本文全面且详细的说一说数据库的相关知识。


一、数据库介绍


1.1 概念


数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。


1.2 数据库分类


数据库从类型上来区分可以分为以下三种数据库:


网络数据库


网络数据库是指把数据库技术引入到计算机网络系统中,借助于网络技术将存储于数据库中的大量信息及时发布出去;而计算机网络借助于成熟的数据库技术对网络中的各种数据进行有效管理,并实现用户与网络中的数据库进行实时动态数据交互。


层级数据库


层次结构模型实质上是一种有根结点的定向有序树(在数学中"树"被定义为一个无回的连通图)。


关系数据库


关系数据库是我们日常开发的使用最多的数据库类型。关系数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。


典型关系型数据库


Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL、SQLite。


二、SQL基本操作


结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。


2.1 SQL分类


结构化查询语言在之前的一片文章也详细的说明过:SQL语言:DDL、DML、DQL、DCL详解,它可以分为以下几种:


1、 数据查询语言(DQL:Data Query Language):


其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。


2、数据操作语言(DML:Data Manipulation Language):


其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。


3、事务处理语言(TPL):


它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。


4、数据控制语言(DCL):


它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。


5、数据定义语言(DDL):


其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。


三、Mysql基本介绍


MySQL是一个关系型数据库管理系统,也是在日常开发过程中使用最多的数据库之一。它由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。


3、1 MySQL数据库相关操作


启动和停止MySQL服务


命令行方式:net start/stop


系统服务方式:services.msc


登录和退出MySQL系统


登录:mysql/mysql.exe -hPup


退出:exit/quit/\q


3、1、1 数据库操作


创建数据库:create database 数据库名字 [库选项]


显示数据库


   1、显示全部:show databases;


   2、匹配部分:show databases like ‘pattern’;


选择数据库:use 数据库名字;


修改数据库


   1、修改数据库字符集:alter database 数据库名字 [新库选项];


删除数据库:drop database 数据库名字;


3、1、2 数据表操作


   创建数据表


   1、普通创建表:create table 表名 (字段名 字段类型) [表选项]


   2、表选项:存储引擎、字符集、校对集


   3、复制已有表结构:create table 表名 like 已有表名;


   显示数据表


   1、显示所有表:show tables;


   2、匹配显示表:show tables like ‘pattern’;


   3、显示表结构


   Describe\desc\show columns from 表名


   4、显示表创建语句:show create table 表名;


   设置表属性:varchar/int


   修改表结构


   1、修改表名:rename table 旧表名 to 新表名


   2、修改表选项:alter table 表名 表选项 [=] 新值


   3、新增字段:alter table 表名 add [column] 新字段名 列类型 [列属性] [位置first/after 字段名]


   4、修改字段名:alter table 表名 change 旧字段名 新字段名 字段类型 [列属性] [新位置]


   5、修改字段类型(属性):alter table 表名 modify 字段名 新类型 [新属性] [新位置]


   6、删除字段:alter table 表名 drop 字段名


    删除表结构:drop table 表名列表;


3、1、3 数据操作


插入操作


   1、指定字段:Insert into 表名[(字段列表)] values(对应字段列表)


   2、全表字段:Insert into 表名 values(对应表结构)


查询操作


   1、查询表中全部数据:select * from 表名


   2、查询表中部分字段:select 字段列表 from 表名


删除操作:delete from 表名;


更新操作:update 表名 set 字段 = 新值;


3、2 列属性


简单属性


1、Null属性


2、默认值


设定默认值


使用default关键字


3、列描述


主键


1、创建主键


字段后创建:primary key


表字段后创建:primary key(字段)


表创建后增加:alter table 表名 add primary key(字段)


2、查看主键:desc\show create table 表名;


3、删除主键:alter table  表名 drop primary key;


4、复合主键:primary key(字段列表)


自动增长


1、原理

初始值

步长


2、使用自动增长:auto_increment


3、修改自动增长:alter table 表名 auto_increment = 新值;


4、删除自动增长:alter table 表名 modify 字段 字段类型 [没有自增长]


5、初始设置


查看初始状态:Show variables like ‘auto_increment%’;


修改初始设置:set auto_increment_increment/offset = 新值;


6、细节问题


一张表只能有一个自增长字段


唯一键


1、创建唯一键


字段后创建:unique [key];


表字段后创建:unique key(字段名)


表创建后:alter table 表名 add unique key(字段名);


2、查看唯一键


3、删除唯一键:alter table 表名 drop index 唯一键名字


4、复合唯一键:unique key(字段列表)


外键


1、外键概念


如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。


2、基本操作


增加外键:[constraint `外键名字` ] foreign key(外键字段) references 主表(主键);


查看外键:desc/show create table 表名;


删除外键:alter table 表名 drop foreign key 外键名字;


外键约束


1、约束的基本概念


2、外键约束的概念


3、外键约束级别


严格:district


级联:cascade


置空:set null


四、SQL的高级数据操作


4、1 复杂查询


新增数据


1、多数据插入


insert into 表名[(字段列表)] values(值列表1),(值列表2)…;
复制代码


2、主键冲突


冲突更新:


insert into [(字段列表)] values(值列表1) on duplicate key update 字段 = 新值;
复制代码


冲突替换:


replace into 表名[(字段列表)] values(值列表1;
复制代码


3、蠕虫复制


insert into 表名 [(字段列表)] select */字段列表 from 表
复制代码


更新数据


   1、条件限制:where 条件;


   2、记录数限制:limit 数据;


删除数据


   1、条件限制:where 条件;


   2、记录数限制:limit 数据;


查询数据


   1、From数据源


单表数据:表名


多表数据:表1,表2…,笛卡尔积


动态数据:from (select语句) as 别名


   2、Where子句:条件限定


   3、Group by子句


分组统计:group by 字段名;


聚合函数:Count,max,min,avg,sum,group_concat


多分组:group by 字段1,字段2…


分组排序:group by 字段 [asc|desc]


回溯统计:with rollup


   4、Having子句:针对group by结果判定


   5、Order by子句:order by 字段 [asc|desc]


   6、Limit子句


记录数限制:limit 数量;


分页:limit 起始位置,数量;


连接查询


   1、连接查询的意义


   2、连接查询分类


交叉连接、内连接、外连接、自然连接


   3、交叉连接:左表 cross join 右表;


   4、内连接:左表 [inner] join 右表 on 连接条件;


   5、外连接


左连接:左表 left join 右表 on 连接条件;


右连接:左表 right join 右表 on 连接条件;


   6、自然连接:左表  natural [inner/left/right] join 右表


   7、using关键字


子查询


   1、子查询概念


子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块。当一个查询是另一个查询的条件时,称之为子查询。


   2、主查询概念


   3、子查询和主查询的关系


   4、子查询分类


按位置:from子查询、where子查询


按功能:标量/列/行/表/exists 子查询


   5、子查询中特定关键字使用

in、any、some、all


4、2 用户权限管理


用户管理



1、创建用户

表插入:insert into mysql.user (username,password,host) values(用户信息列表)


SQL指令:create user 用户名@主机地址 [identyfied by ‘明文密码’];


2、删除用户:drop user 用户名@主机地址;


3、修改用户密码


更新表:update mysql.user set password=password(‘明文密码’) where username=用户名 and host=主机地址;

SQL指令:set password for 用户名@主机地址;


权限管理


1、授予权限:grant


grant 权限列表/all privileges on 数据库.数据表 to 用户名@主机地址;


2、取消权限:revoke


revoke 权限列表/all privileges on 数据库.数据表 from 用户名@主机地址;


3、刷新权限:flush

flush privileges;


4、权限分类


数据权限、结构权限、管理权限


密码丢失的解决方案


   1、关闭Mysql服务器


   2、利用Mysqld.exe重启服务器

mysqld/mysqld.exe –skip-grant-tables


   3、新建客户端利用mysql无用户登录


   4、修改密码


   5、关闭服务器,正常启动服务器  


总结


本文对数据库的一些基本概念和操作进行了总结,关于数据库的更深层次的知识,比如触发器、视图、存储过程、数据库优化等等,之前也有文章进行了专门的详细介绍,有兴趣的可以参考阅读,后面也将会更新关于数据库的其他文章。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
SQL Go 数据库
MSSQL系列之二.二数据库与表管理
MSSQL系列之二.二数据库与表管理
72 0
|
2月前
|
存储 JSON 前端开发
数据库有成千上万的表是怎么回事?
大型数据库经过多年运行常积累数以万计的数据表,其中很多是中间表,占用大量资源,导致数据库膨胀。这些中间表大多为数据呈现服务,因前端报表频繁修改而不断增加。SPL 通过独立计算引擎,将中间数据移至文件系统,减少数据库负担,提高性能,优化资源利用。
|
关系型数据库 MySQL 数据库
MySQL数据库三大范式
MySQL数据库三大范式
|
负载均衡 数据库
关于数据库读写分离
数据库读写分离是一种常用的数据库架构设计方式,主要目的是提高数据库的性能和可伸缩性。在传统的单节点数据库中,所有的读写操作都集中在一个节点上,容易造成性能瓶颈和单点故障。而通过读写分离,可以将读操作和写操作分别分配到不同的节点上,从而提高数据库的吞吐量和并发处理能力。
240 0
|
存储 SQL 关系型数据库
MySQL基础篇——MySQL数据库 表的操作,
MySQL基础篇——MySQL数据库 表的操作,
193 0
|
SQL 关系型数据库 MySQL
MySql基础-笔记12 -重复数据处理、SQL注入、导入导出数据
MySql基础-笔记12 -重复数据处理、SQL注入、导入导出数据
207 0
MySql基础-笔记12 -重复数据处理、SQL注入、导入导出数据
|
存储 数据库连接 数据库
SQLite关于数据库和表的操作
SQLite 的 DETACH DATABASE 语句是用来把命名数据库从一个数据库连接分离和游离出来,连接是之前使用 ATTACH 语句附加的。如果同一个数据库文件已经被附加上多个别名,DETACH 命令将只断开给定名称的连接,而其余的仍然有效。您无法分离 main 或 temp 数据库。 SQLite 的 DETACH DATABASE ‘Alias-Name’ 语句的基本语法如下:
122 1
|
SQL 关系型数据库 MySQL
MySQL基础教程5——DDL—表操作
使用create table 表名( 字段一 字段一类型 comment 字段一注释, 字段二 字段二类型 comment 字段二注释 ); comment 表注释 注意: 最后一个字段结尾不用加,,comment 注释可以不加。
|
SQL 存储 Oracle
Oracle数据库 | 基于SQL基础分析
Oracle数据库 | 基于SQL基础分析
129 0
|
SQL Oracle 关系型数据库
数据库基础(三)----- 多表查询,事务,DCL
数据库基础(三)----- 多表查询,事务,DCL
数据库基础(三)----- 多表查询,事务,DCL