第一节数据库管理系统概述

在www.db-engines.com/en/ 这个网站中可以看到对数据库的排名

数据库分为:

  关系型数据库:

    mysql------mariaDB

    oracle

  非关系型数据库

    nosql

数据管理系统:是在磁盘存储的机制上做的一个更高效的数据管理系统。

对于关系型数据库:将数据存放在一张张表中,每个表之间可能有相关联关系

它的核心组件:库,表,索引,视图,sql,存储引擎 , 存储函数,触发器,事件调度器

约束:

主键约束: 是惟一的,非空,一张表只能有一个

唯一建约束:是唯一存在的,非空,但可以有多个

外建:参考与另一张表之间的约束

检查约束:check

mysql官方站点:www.mysql.com   mariadb.org

mysql的相关工具:

mysql   utilities    管理工具 提供一组命令行工具用于维护和管理 MySQL 服务器

mysql  workbench   性能评估

mysql  connectors   连接器

mysql的安装方式有3种

1 源码包安装

2 二进制包安装,直接解压后可用‘

3rpm包安装

2 利用二进制进行安装

将原有的mariadb-server   mariadb  卸载

确认mysql用户存在

解压mysql压缩包到/usr/local/下 解压后就可以直接使用 ,无需安装

做个软连接

ln -sn mysql-5.7.18-linux-glibc2.5-x86_64/ mysql

将这个mysql目录下改为root:mysql

创建个目录来存放数据 更改属主属组

编辑环境变量:

vim  /etc/profile.d/mysql.sh

export   PATH= /usr/lcoal/mysql/bin:$PATH

. /etc/profile.d/mysql.sh

做mysql初始化:

mysql  --verbose   --help    查看mysql的详细帮助

# my_print_defaults ;显示默认要去读的配置文件路径

创建个配置文件:/usr/local/mysql/etc/my.cnf 下

  1 创建目录 :mkdir -pv /usr/local/mysql/etc

  2 复制/etc/my.cnf  到该目录下并进行修改

    vim   my.cnf

把上面pid-file 改为

复制命令道/etc/ini.d/mysqld   这样就可以使用service命令启动了

需要创建error.log 和 mysql.log这个文件  属主属组都是mysql   否则启动会报错

启动服务:

# service mysqld start

mysql客户端程序:  交互式模式和命令模式两种

mysql   命令  mysql     -uroot    -hlocalhost    -p

 常用选项:

--host=host_name, -h host_name:服务端地址;

-user=user_name, -u user_name:用户名;

--password[=password], -p[password]:用户密码;

--port=port_num, -P port_num:服务端端口;

--protocol={TCP|SOCKET|PIPE|MEMORY}  协议

本地通信:基于本地回环地址进行请求,将基于本地通信协议;基于socket文件进行登录

非本地通信:使用非本地回环地址进行的请求;TCP协议;

socket=path, -S path

--database=db_name, -D db_name:  设默认库的

--compress, -C:数据压缩传输

--execute=statement, -e statement:非交互模式执行SQL语句;

--vertical, -E:查询结果纵向显示;

登录mysql交互界面后

可输入help查看帮助

查看参数:

参数有两种,一种是全局GLOBAL   一种会话session

会话是临时的,只对当前会话有效 且是立即生效的

GLOBAL 是对以后新建了的会话生效 值得修改要求用户有管理权限

mysql>   show  GLOBAL  VARIABLES     显示参数

用set进行修改 (有些是可以改有些不能改)

SER  [SESSION|GLOBAL]  system_var_name = expr  使用like或where子句

 

mysql的状态变量

show  [GLOBAL|SESSION]  status  [LIKE | WHERE]

status的值可以至零一般不进行修改

mySQL的数据类型:HELP     DATA  TYPE   查看数据类型

字符型:

  CHAR(#), BINARY(#):定长型;CHAR不区分字符大小写,而BINARY区分;

  VARCHAR(#), VARBINARY(#):变长型

  TEXT:TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT

  BLOB:TINYBLOB,BLOB,MEDIUMBLOB, LONGBLOB

数值型:

  

浮点型:近似

FLOAT

DOUBLE

REAL

BIT

    整型:精确

日期时间型:

  日期:DATE

时间:TIME

日期j时间:DATETIME

时间戳:TIMESTAMP

年份:YEAR(2), YEAR(4)

内建类型

ENUM:枚举

ENUM('Sun','Mon','Tue','Wed')

    SET:集合

类型修饰符:

  字符型:NOT NULL,NULL,DEFALUT ‘STRING’,CHARACET SET ‘CHARSET’,COLLATION ‘collocation'

SHOW  CHARACTER  SET;   查看字符集

  整型:NOT NULL, NULL, DEFALUT value, AUTO_INCREMENT, UNSIGNED

  日期时间型:NOT NULL, NULL, DEFAULT

SQL MODE:定义mysqld对约束等违反时的响应行为等设定;

  SHOW  VARIABLES  LIKE  ‘sql_mode’    查看sql模型

修改方式:2种修改方式

mysql> SET GLOBAL sql_mode='MODE';

mysql> SET @@global.sql_mode='MODE';

基本操作

数据库:

创建,更改 ,删除

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name CHARACTER SET [=] charset_name  COLLATE [=] collation_name

ALTER {DATABASE | SCHEMA} [db_name] CHARACTER SET [=] charset_name  COLLATE [=] collation_name

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

表的创建,修改,删除

(1) CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name

查看支持的所有存储引擎:

mysql> SHOW ENGINES;

查看指定表的存储引擎:

mysql> SHOW TABLE STATUS LIKE clause;

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name]   删除

ALTER  TABLE tbl_name[alter_specification [, alter_specification] ...]  修改

可修改内容:

  (1) table_options

  (2) 添加定义:ADD    (字段、字段集合、索引、约束)

  (3) 修改字段:

  (4) 删除操作:DROP

查看表结构定义:DESC tbl_name;

查看表定义:SHOW CREATE TABLE tbl_name;

查看表属性信息:SHOW TABLE STATUS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]

索引:操作创建,修改 删除

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type] ON tbl_name (index_col_name,...)

SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name] [WHERE expr]

DROP  INDEX index_name ON tbl_name

索引类型:

1 聚集索引、非聚集索引:索引是否与数据存在一起;

2 主键索引、辅助索引

3 稠密索引、稀疏索引:是否索引了每一个数据项;

视图:

虚表:存储下来的SELECT语句;

创建:

CREATE  VIEW view_name [(column_list)] AS select_statement;

修改:

ALTER  VIEW view_name [(column_list)] AS select_statement;

删除:

DROP VIEW [IF EXISTS] view_name [, view_name] ...     ;

查询执行路径:

请求-->查询缓存-->解析器-->预处理器-->优化器-->查询执行引擎-->存储引擎-->缓存-->响应

SELECT语句的执行流程:

FROM  --> WHERE --> Group By --> Having --> Order BY --> SELECT --> Limit

DISTINCT:数据去重;

SQL_CACHE:显式指定缓存查询语句的结果;

SQL_NO_CACHE:显式指定不缓存查询语句的结果;

query_cache_type服务器变量有三个值:

  ON:启用;

  SQL_NO_CACHE:不缓存;默认符合缓存条件都缓存;

  OFF:关闭;

  DEMAND:按需缓存;

  SQL_CACHE:缓存;默认不缓存

字段可以使用别名 :

col1 AS alias1, col2 AS alias2, ...

WHERE子句:指明过滤条件以实现“选择”功能;

过滤条件:布尔型表达式;

[WHERE where_condition]

算术操作符:+, -, *, /, %

比较操作符:=, <>, !=, <=>, >, >=, <, <=

IS NULL, IS NOT NULL

区间:BETWEEN min AND max

IN:列表;

LIKE:模糊比较,%和_;

RLIKE或REGEXP

逻辑操作符:

AND, OR, NOT

GROUP BY:根据指定的字段把查询的结果进行“分组”以用于“聚合”运算;

  avg(), max(), min(), sum(), count()

HAVING:对分组聚合后的结果进行条件过滤;

ORDER BY:根据指定的字段把查询的结果进行排序;

  升序:ASC

  降序:DESC

LIMIT:对输出结果进行数量限制

三,多表查询和子查询

多表查询:

  连接操作:

交叉连接:笛卡尔乘积;

  内连接:

  等值连接:让表之间的字段以等值的方式建立连接;

  不等值连接:

    自然连接

  自连接:自己跟自己连接

  外连接:

    左外连接:

     FROM tb1 LEFT JOIN tb2 ON tb1.col = tb2.col

    右外连接:

     FROM tb1 RIGHT JOIN tb2 ON tb1.col = tb2.col

实例:

下载一个sql脚本hellodb.sql

]# mysql -uroot -hlocalhost < hellodb.sql

多表等值查询

自连接:

子查询:在查询中嵌套查询;

SELECT *  FROM (SELECT * FROM  students  where  age  >  20) AS   S   WHERE  S.Gender=’M’;

用于WHERE子句中的子查询;

  (1) 用于比较表达式中的子查询:子查询仅能返回单个值;

  (2) 用于IN中的子查询:子查询可以返回一个列表值;

    SELECT  *  FROM  STUDENTS  WHERE  ClassID  IN  (SELECT  DISTINCT ClassID  FROM  students  WHERE Gender = ‘F’)  AND  Gender=‘M’;

   (3) 用于EXISTS中的子查询

用于FROM子句中的子查询;

SELECT tb_alias.col1, ... FROM (SELECT clause) AS tb_alias WHERE clause;

联合查询:将多个查询语句的执行结果相合并;UNION

SELECT clause UNION SELECT cluase;

练习:

(1) 在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄;

SELECT Name,Age FROM students WHERE Age > 25 AND Gender='M';

(2) 以ClassID为分组依据,显示每组的平均年龄;

SELECT ClassID,avg(age) FROM students GROUP BY ClassID;

(3) 显示第2题中平均年龄大于30的分组及平均年龄;

SELECT ClassID,avg(age) AS Aging FROM students GROUP BY ClassID HAVING Aging>30;

(4) 显示以L开头的名字的同学的信息;

SELECT * FROM students WHERE Name LIKE 'L%';

(5) 显示TeacherID非空的同学的相关信息;

SELECT * FROM students WHERE TeacherID IS NOT NULL;

(6) 以年龄排序后,显示年龄最大的前10位同学的信息;

SELECT * FROM students ORDER BY Age DESC LIMIT 10;

导入hellodb.sql,以下操作在students表上执行

1、以ClassID分组,显示每班的同学的人数;

SELECT ClassID,count(StuID) FROM students GROUP BY ClassID;

2、以Gender分组,显示其年龄之和;

SELECT Gender,SUM(Age) FROM students GROUP BY Gender;

3、以ClassID分组,显示其平均年龄大于25的班级;

SELECT ClassID,avg(age) FROM students GROUP BY ClassID HAVING avg(Age) > 25;

mysql基础理论的更多相关文章

  1. MySQL 基础理论面试题整理

    前言: 之前整理公司面试题的时候,看了一篇大神些 SQL 优化之六脉神剑 文章,写的真好! 博主有一些 MySQL 的面试题,简单抽了一个备注一下,补充一下自己不熟悉的地方.   一.在MySQL中, ...

  2. 我心中的MySQL DBA

    原文网址链接:http://wangwei007.blog.51cto.com/68019/1718311 MySQL是一个跨平台的开源关系型数据库管理系统,目前MySQL被广泛地应用在Interne ...

  3. MySQL数据库再回首

    前言: 数据库是程序员的数据源泉,加上近期 要开发DB可视化.性能分析的功能 重新回顾一下MySQL知识,以下是笔记: MySQL架构 MySQL基础理论 1.什么是关系型数据库? 关系型数据库,这个 ...

  4. Mysql系列四:数据库分库分表基础理论

    一.数据处理分类 1. 海量数据处理,按照使用场景主要分为两种类型: 联机事务处理(OLTP) 面向交易的处理系统,其基本特征是原始数据可以立即传送到计算机中心进行处理,并在很短的时间内给出处理结果. ...

  5. MySQL学习笔记01_数据库基础知识

    01_1 mysql数据库启动与停止 以<管理员权限>启动cmd: 输入net stop mysql停止mysql服务: 输入net start mysql启动mysql服务: 输入mys ...

  6. 字符集与Mysql字符集处理(二)

    接着上篇文章继续讲字符集的故事.这一篇文章主要讲MYSQL的各个字符集设置,关于基础理论部分,参考于这里.   1. MYSQL的系统变量 – character_set_server:默认的内部操作 ...

  7. MySQL学习笔记一

    MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...

  8. 【转】哦,mysql 的其它发行版本Percona, mariadb

    原文:http://geek.csdn.net/news/detail/130146 2016年11月25日,沃趣科技"智慧应用 数据先行"2016产品发布会暨新三板挂牌庆祝会在杭 ...

  9. MySql数据库基本介绍和基本语法

    一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系统中,关系型数据库使用最为 ...

随机推荐

  1. web@css高级选择器(after,befor用法),基本css样式

    1.高阶选择器:子代后代,相邻通用兄弟,交集并集,属性,伪类,伪元素子代后代选择器 div>p{}  div p{}相邻通用兄弟 div+p{}  div~p{}理解:div同学的同桌p  di ...

  2. python decorators

    it's a syntatical sugar: @function1 def function2: do something equal to: function2 = function1(func ...

  3. VI和VIM

    linux下vi.VIM命令大全   进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + file ...

  4. 如何安装和配置RabbitMQ

    今天开始一个小小的练习,学习一下安装和配置RabbitMQ,为什么要学它,因为WCF可以完全兼容和使用RabbitMQ了.我们新的大数据系统需要使用消息队列,所以就开始研究一下,把它重新封装一下,更便 ...

  5. 如何在同一台电脑上使用两个github账户(亲测有效)

    1 前言 由于有两个github账号,要在同一台电脑上同步代码,需要给每一个账号添加一个SSH public key,此时推送时git push origin,不知道是哪个账号的远程仓库名称,所以需要 ...

  6. Day8--------------yum软件包管理

    1.url三段式:协议.域名.路径 例如:http://wan.360.cn/game 2.本地yum配置: vim /etc/yum.repos.d/local.repo [local] #固定格式 ...

  7. tcpdump详解

    tcpdump -i eth1 'host 121.14.84.221 and greater 76' -Ap -v -s10000 抓取 eth1 和 121.14.84.221 上的所有长度大于7 ...

  8. Android Apk 瘦身大法

    原文地址: https://mp.weixin.qq.com/s/XS0tuLgTfyp4rW4h69wyQQ 一, 我们在多人开发项目 或者 遗留项目中开发时,会有些自己没用到的资源文件,但是自己也 ...

  9. Confluence 6 从外部小工具中注册访问

    希望从 Confluence 中删除一个小工具,你可以选择小工具边上的 URL ,然后单击删除(Delete). 如果你希望取消订阅一个应用的小工具,你需要删除整个订阅.你不能仅仅删除你订阅中的某一个 ...

  10. Vue.extend和Vue.component的联系与差异

    extend 是构造一个组件的语法器. 你给它参数 他给你一个组件 然后这个组件 你可以作用到Vue.component 这个全局注册方法里, 也可以在任意vue模板里使用apple组件 var ap ...