mysql基础理论
第一节数据库管理系统概述
在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基础理论的更多相关文章
- MySQL 基础理论面试题整理
前言: 之前整理公司面试题的时候,看了一篇大神些 SQL 优化之六脉神剑 文章,写的真好! 博主有一些 MySQL 的面试题,简单抽了一个备注一下,补充一下自己不熟悉的地方. 一.在MySQL中, ...
- 我心中的MySQL DBA
原文网址链接:http://wangwei007.blog.51cto.com/68019/1718311 MySQL是一个跨平台的开源关系型数据库管理系统,目前MySQL被广泛地应用在Interne ...
- MySQL数据库再回首
前言: 数据库是程序员的数据源泉,加上近期 要开发DB可视化.性能分析的功能 重新回顾一下MySQL知识,以下是笔记: MySQL架构 MySQL基础理论 1.什么是关系型数据库? 关系型数据库,这个 ...
- Mysql系列四:数据库分库分表基础理论
一.数据处理分类 1. 海量数据处理,按照使用场景主要分为两种类型: 联机事务处理(OLTP) 面向交易的处理系统,其基本特征是原始数据可以立即传送到计算机中心进行处理,并在很短的时间内给出处理结果. ...
- MySQL学习笔记01_数据库基础知识
01_1 mysql数据库启动与停止 以<管理员权限>启动cmd: 输入net stop mysql停止mysql服务: 输入net start mysql启动mysql服务: 输入mys ...
- 字符集与Mysql字符集处理(二)
接着上篇文章继续讲字符集的故事.这一篇文章主要讲MYSQL的各个字符集设置,关于基础理论部分,参考于这里. 1. MYSQL的系统变量 – character_set_server:默认的内部操作 ...
- MySQL学习笔记一
MySQL 学习笔记 一 一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系 ...
- 【转】哦,mysql 的其它发行版本Percona, mariadb
原文:http://geek.csdn.net/news/detail/130146 2016年11月25日,沃趣科技"智慧应用 数据先行"2016产品发布会暨新三板挂牌庆祝会在杭 ...
- MySql数据库基本介绍和基本语法
一.数据库简单介绍 1. 按照数据库的发展时间顺序,主要出现了以下类型数据库系统: Ø 网状型数据库 Ø 层次型数据库 Ø 关系型数据库 Ø 面向对象数据库 上面4中数据库系统中,关系型数据库使用最为 ...
随机推荐
- Ubuntu18 输入法fcitx安装
默认iBus非常难用 1.安装fcitx终端输入fcitx提示程序尚未安装.使用命令安装sudo apt-get install fcitx-bin相关的依赖库和框架都会自动安装上.2.安装输入法su ...
- heidiSQL使用简介
2017年12月5日09:49:42 星期二 HeidiSQL下载链接 1. 这个是免费的, 不用辛苦找破解码了, 也不用担心被破解软件装后门 2. 可以一次执行多条SQL语句分开选项卡显示 3. 可 ...
- Docker 导出 & 导入
Docker 容器因为它的快速部署被深受喜爱.本文记录 Docker 容器的导出与导入,分别用到 Docker 的 export 和 import 命令. 1.查看正在运行的容器: [root@loc ...
- Ex 7_21 在一个流网络中,一条边被称为是临界的...第十三次作业
如果原图中的一条边e(u,v)是临界边,则在求解最大流的过程中这条边的流量将会被占满,即在残量图中只存在反向边e(v,u),不存在正向边e(u,v).但是残量图中并不是所有的只存在反向边的顶点对之间的 ...
- [记录]一个有趣的url请求(nodejs)
1 前言 IDE是webstrom,跟项目编程语言,应该没有多大关系. 2 现象 两个看起来是一样的url,但是一个能访问一个不能访问. 然后,复制url到console中发现了差异,分别是:file ...
- CentOS7.5从零安装Python3.6.6
ps:环境如标题 安装可能需要的依赖 yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlit ...
- redhat7.3 superset的离线安装
superset是一个python 开发的可视化工具,可以与kylin连接进行数据分析,在官网的讲解中,采用了在线安装方式,生产环境中有yum源,但是没有网,不得不采用离线安装方式.(我们先在有网的环 ...
- 10分钟了解Android的Handler机制
Handler机制是Android中相当经典的异步消息机制,在Android发展的历史长河中扮演着很重要的角色,无论是我们直接面对的应用层还是FrameWork层,使用的场景还是相当的多.分析源码一探 ...
- java常见命名规则
常见命名规则: 包:类似文件夹,用于把相同的类名进行区分(小写) 单级:例如:student 多级:例如:cn.student 类或者接口: 一个单词:单词首字母大写,例如:Student 多个单词: ...
- 查看MySQL版本的命令及常用命令
Windows / Linux 系统 前提是已经正确安装了 MySQL,打开 Windows 系统中的命令行工具(Win + R --> 输入 cmd 并按下回车键)--> 输入命令: m ...