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

在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. 006_理解inode

    inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础. 我觉得,理解inode,不仅有助于提高系统操作水平,还有助于体会Unix设计哲学,即如何把底层的复杂性抽象成一个简单概念 ...

  2. locale and system laungues

    In computing, a locale is a set of parameters that defines the user's language, region and any speci ...

  3. spring3.0+Atomikos 构建jta的分布式事务

    摘自: http://gongjiayun.iteye.com/blog/1570111 spring3.0+Atomikos 构建jta的分布式事务 spring3.0已经不再支持jtom了,不过我 ...

  4. windows Sever 2012下Oracle 12c安装配置方法图文教程

    windows Sever 2012下Oracle 12c安装配置方法图文教程 Oracle 12c安装配置方法图文教程,具体内容如下 1.我们开启虚拟机 2.Windows Sever 2012启动 ...

  5. day10 函数

    函数基础 函数概念 为什么用函数 什么是函数 定义函数 调用函数 返回值详解上节回顾 文件处理 修改文件 1.读取要修改文件内容 read可能导致内存溢出 赋值给变量 修改 将修改后的内容重新写入文件 ...

  6. 在前台根据传过来的XX级别的数字转XX的名字

    需求描述:进入页面,展示列表,列表中有个XX级别的项,数据库中的级别使用1234来存放的,现在要转成对应的一级XX,二级XX,三级XX,四级XX. 吐槽一下:正常的做法应该是在后台,就把查出来的级别1 ...

  7. Linux基础实操一

    开启Linux操作系统,要求以root用户登录GNOME图形界面,语言支持选择为汉语 使用快捷键切换到虚拟终端2,使用普通用户身份登录,查看系统提示符 使用命令退出虚拟终端2上登录的用户 使用快捷键切 ...

  8. ubuntu 安装Mysql8.0

    1. 去官网下载安装包 下载链接:点击打开链接 https://dev.mysql.com/downloads/mysql/ 如果你的系统是32位选择第一个,64位选择第二个 也可以用wget 下载 ...

  9. java web----URL

     简单使用 import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; im ...

  10. Jmeter 获取CSV行数

    import java.io.BufferedReader; import java.io.FileInputStream; String str = "E:\\Desktop\\WOS接口 ...