MySQL 基础之一
为了满足关系范式:通常一个大的数据集会拆成在一个库(集合内)中多张表表来存储,每一张表就是由行和列组成的二维关系,表与表之间也有关系,查询有时候需要做表链接,而表链接这个过程需要依赖于索引到各种算法来实现尽可能少的产生中间数据。
一、数据库层次关系
1、数据库系统 dbms: database managemnet system
2、数据库 database: 一个数据库系统中有多个数据库;
3、数据表 table: 多行多列的表格;一个数据库中有多个表;
4、字段 field: 一列数据;一个表有多个列;
5、行 row: 一行数据;一个表有多行;
6、数据 data: 具体数据;

3、大小写及命令细节
1、mysql不区分大小写;
2、如果是生成文件夹的命令,文件夹名称有大小写之分,不同系统对文件名称有大小写区分;
3、标识符:建议使用字母、数字、下划线,不以数字开关;
4、标识符与系统关键字冲突,最好使用反引号:``
;
5、数据库名、表名、视图名,建议小写,及下划线命名方式;
https://blog.51cto.com/sonlich/1970069
4、数据的组织结构 :层次型、网状型、关系型、
5、事务:多个操作被当作一个整体对待
A:原子性
C :一致性
I:隔离性
D:持久性
6、SQL:Structure Query Language
结构化查询语言
SQL解析器
数据存储协议:应用层协议 C/S架构
S :server 监听于套接字,接受并处理客户端的应用请求
C : 程序接口:GUI 、CLI
应用层编程接口 :ODBC Open DataBase Connection
二、基础概念
约束:constraint 向数据表提供的数据要遵守的限制
主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行:必须提供数据 即NOT NULL;
唯一键 :一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行:允许为NULL;
外键:一个表中的某个字段可填入数据取决于另一个表的主键已有的数据;
检查性:
索引:将表中的一个或多个字段中的数据复制一份另存,并且此需要按特定次序排序存储
关系运算:
选择:挑选出符合条件的行(部分)
投影:挑选出需要的字段(列)
数据抽象:
物理层:决定数据的存储格式,即RDBMS在磁盘上如何组织文件
表和文件并不是一一对应的,如何存储是在物理层决定
对磁盘而言,看到的内容使二进制数据流
逻辑层:描述DB存储什么数据,以及数据间存在什么样的关系
视图层:描述DB中的部分数据
对用户而言,看到内容是文件
关系模型的分类:
关系模型
实体-关系模型
基于对象的关系模型
半结构化的关系模型
安装MySQL :
源代码:编译安装 需cmake
https://blog.51cto.com/xiexiaojun/1679995
二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用
https://blog.51cto.com/sonlich/1970069
https://blog.51cto.com/xiexiaojun/1660813
三、MariaDB,开源RDBMS的实现
特性
插件式存储引擎【表类型】:逻辑概念转换成磁盘格式【表--->文件】,提供逻辑概念的约束得以执行 存储引擎也称之为“表类型” a)支持更多的存储引擎:
mysql标准的存储引擎:MyISAM【不支持事务】,InnoDB【事务,间隙锁】
MariaDB:Aria【myisam的升级版:崩溃后恢复】,InnoDB(XtraDB的别名) b)诸多的扩展和新特性
c)较多的测试组件
d)truly open source
3.1、安装和使用MariaDB
https://blog.51cto.com/xiexiaojun/1679995
CentOS 7直接提供:yum -y install mariadb-server
CentOS 6 通用二进制安装
CentOS : 通用二进制格式安装MariaDB 、获取源码
官方站点:www.mariadb.org
、安装MariDB
)添加用户
)准备数据库
)展开及配置
、测试启动服务并登陆MariaDB
、安全初始化
、通用配置 、获取源码
、安装MariaDB
) 添加用户:
# groupadd -r -g mysql
# useradd -r -g -u mysql ) 准备数据库:
# btrfs
# lvm2 快照,数据库备份 # fdisk -l /dev/[sh]d[a-z] //查看所有磁盘
# fdisk /dev/sda //管理指定磁盘
# partx -a /dev/sda
# partx -a /dev/sda # pvcreate /dev/sda3
# vgcreate vg0 /dev/sda3
# lvcreate -L 10G -n mylv vg0 # 查看可被格式的文件系统类型
# cat /proc/filesystems
**没有xfs,xfs比ext文件易扩展,易用
# 查看模块
# lsmod # 安装使用xfs文件系统
# yum search xfs //xfsprogs.i686 : Utilities for managing the XFS filesystem
文件系统组成: 模块、用户空间的管理工具、POSIX
# yum -y install xfsprogs # 安装后查看内核中的模块
# rpm -ql xfsprogs //只提供程序,并未提供模块
# modinfo xfs //没有此模块
# modprobe xfs //如果有则可以安装 # mke2fs -t ext4 /dev/vg0/mylv
# vim /etc/fstab
/dev/vg0/mylv /mydata/data ext4 defaults
# mkdir -p /mydata/data
# chown mysql.mysql /mydata/data
# mount -a 3) 展开及配置:
展开:
# tar xf mariadb-5.5.-linux-i686.tar.gz -C /usr/local/ # cd /usr/local/
# ls //查看文件
# ln -sv mariadb-5.5.-linux-i686 mysql
# ll //查看链接
# cd mysql
# ll //查看权限
# chown -R mysql:mysql ./*
# ll //确认 元数据生成:
# scripts/mysql_install_db --help
--user=user_name
--basedir=path //指明mariadb的安装目录
--datadir=path //MariaDB的数据库的目录
--defaults-extra-file=name //配置文件 # /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --user=mysql --datadir=/mydata/data/ # ls /mydata/data //查看文件是否生成 准备配置文件:
配置文件读取路径: /etc/my.cnf --> /etc/mysql/my.cnf --> --default-extra-file=/PATH/TO/CONF_FILE --> ~/.my.cnf
# mkdir /etc/mysql
# ls support-files/ //查看提供的文件
1) my*.cnf //均为配置 large(512M内存), meduim(256M), small(64M) 内存4G innodb-heavy-4G.cnf
2) mysql.server //提供的服务脚本 # cp support-files/my-large.cnf /etc/mysql/my.cnf 修改配置文件: 配置文件类ini格式, 相同配置段出现多次时,最后一个配置段为最终生效段. [client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock //客户端通过/tmp/mysql.sock与服务端通信
[mysqld]
port = 3306 //服务端监听的端口
socket = /tmp/mysql.sock //服务端监听在unix socket
# Try number of CPU's*2 for thread_concurrency 线程数为CPU核心数的2倍
thread_concurrency = 4 --------
datadir = /mydata/data //数据库的目录
innodb_file_per_table = on //innodb的特性,每个文件当作一个表
skip_name_resolve = on //跳过IP-->反解为主机名.授权只基于IP即可,加速 准备服务脚本
# ls support-files/ //查看服务脚本的位置及权限
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# chkconfig --list mysqld 4)测试启动服务
# ss -tnl //查看3306端口是否被占用
# service mysqld start /usr/local/mysql/bin/mysqld_safe_helper: Can't create/write to file '/var/log/mysqld.log' (Errcode: 13)
# touch /var/log/mysqld.log
# chown root.mysql /var/log/mysqld.log
# chmod 660 /var/log/mysqld.log # /usr/local/mysql/bin/mysql
MariaDB [(none)]> 5) 安全初始化
MariaDB [(none)]> SELECT User,Host,Password FROM mysql.user;
+------+-----------------------+----------+
| User | Host | Password |
+------+-----------------------+----------+
| root | localhost | |
| root | localhost.localdomain | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
| | localhost.localdomain | |
+------+-----------------------+----------+
6 rows in set (0.00 sec)
注意:在本地主机上root,及一个匿名用户没有对应的密码 # /usr/local/mysql/bin/mysql_secure_installation # /usr/local/mysql/bin/mysql -uroot -hlocalhost -pmagedu
MariaDB [(none)]> 6)通用配置
查看安装目录
# ls /usr/local/mysql
bin data include lib mysql-test scripts sql-bench
COPYING EXCEPTIONS-CLIENT INSTALL-BINARY man README share support-files 1、导出PATH变量
# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
# . /etc/profile.d/mysql.sh
2、导出库文件
# vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
# ldconfig [-v]
3、导出头文件
# ln -sv /usr/local/mysql/include /usr/include/mysql
4、导出man手册
# vim /etc/man.config
MANPATH /usr/local/mysql/man
3.2、MariaDB程序组成
# ls /usr/local/mysql/bin 1、服务端程序
mysqld_safe[ps命令即可查询:"线程安全的mysql"]
mysqld_multi["多个mysql,使用不同的端口"]
mysqld mysql协议:数据存储协议:C/S架构
实现: mysqld
进程间的通信:
同主机通信:unix socket、message queue(signal)、share memory、semphor(旗语)
跨主机:socket、rpc--监听在tcp的3306端口,支持远程通信 mysqld同主机:基于unix socket通信
服务器监听在: server地址: localhost, 127.0.0.1
二进制安装:/tmp/mysql.sock
rpm安装: /var/lib/mysql/mysql.sock 、客户端程序
mysql CLI、GUI(phpMyadmin)
mysqladmin
mysqlbinlog 二进制日志管理
mysqldump CLI交互式客户端程序: mysql使用
mysql [-uUSERNAME] [-hHOST] [-pPASSWORD] 注意:
、mysql用户名: 'USERNAME'@'HOST'
HOST:支持通配符:
% 匹配任意长度的任意字符
_ 匹配任意单个字符 例如: 172.16.0.0/16网络用通配符表示
172.16.%
172.16..%
172.16.%.%
、不给-u: 默认用户名为root
不给-h: 默认HOST为localhost或127.0.0.
不给-p: 默认PASSWORD为空
3.3、SQL接口
SQL接口: 与mysqld相互
MariaDB [(none)]> 客户端命令:本地执行
命令名 简写格式
help (\?) //获取帮助
clear (\c) //清空输入的内容
ego (\G) 垂直显示结果
quit (\q) //退出mysql,
status (\s) //查看服务器的状态信息
system (\!) //执行shell命令
use (\u) use DB, 设定默认数据库 服务端命令:通过mysql协议发往服务器端,执行并取回结果,命令有结束符";"
> SELECT VERSION();
调用函数并执行
> SELECT +;
> SELECT 0.99^
> SELECT 1.0^
3.4、关系型数据库的常见组件、
SQL 过程是编程,自定义函数(UDF),内置函数(IDF)
数据库:database
表 :table
行:row
列:column
索引:index
视图:view 并行多用户访问:
用户:USER
权限:PRIVILEGES
------运维需掌握------------
DBA可调用的代码/函数
存储过程:procedure 没有返回值
存储函数:function 有返回值
触发器:触发额外代码执行
事件调试器:event scheduler [crontab 周期性任务计划]
3.5、SQL语句(注:对mysql命令不区分大小写)
DDL :Data Defination Language 数据定义语言
CREATE :创建数据库和数据库的一些对象
DROP : 删除数据表、索引、触发程序、条件约束以及数据表的权限等(没有回收站,执行动作后数据会从磁盘中抹去)
ALTER:修改数据表定义及属性
DML:Data Manipulation Language 数据操作语言 (向表中插入、修改、查询)
INSERT 、DELETE 、UPDATE 、SELECT
DCL : Data Control Language 数据控制语言
Grant : 允许对象的创建者给某用户或某组或所有用户 赋予某些特定的权限
Revoke : 可以废除某用户或某组或所有用户访问权限
注意:写的格式统一,因为mysql缓存是根据MD5值存储缓存。如果两次输入的字母大小写不同时,其MD5值不同。
3.6、数据库管理
查看 :SHOW DATABASES;
语法:
创建数据库 :CREATE DATABASE | [IF NOT EXISTS] "db_name" [create_specification];
删除数据库 :DROP DATABASE | [IF NOT EXISTS] "db_name" [create_specification]; <没有回收站>只能基于备份恢复
create_specification:
CHARACTER SET 'charecter set name' 字符集
COLLATE 'collate name' 排序规则
查看当前支持哪些字符集和排序规则:
>SHOW CHARACTER SET ;
>SHOW COLLATION ;
获取命令帮助:
3.7、表:
CREATE TABLE tb_name (col1 datatype 修饰符,col2 datatype 修饰符,...) ENGINE=' ' 查看所有的引擎:>SHOW ENGINE;
查看表:SHOW TABLES [FROM db_name]
查看表结构:DESC [db_name.]tb_name
删除表:DROP TABLE tb_name ;
3.8、数据类型、
数据类型: datatype
字符:
定长字符:
不区分大小写 char(#) 用或不用,给1个占10个
区分大小写 binary(#) 变长字符:
不区分大小写 varchar(#) 有结束符,占用一个, 给1个,占2个
区分大小写 varbinary(#) 对象存储:大文本存储
TEXT 不区分大小写
BLOB 区分----二进制的大对象
内置:
ENUM 枚举(给你几种,最多有几种选择)
SET 集合
数值:
精确:整型[int]、十进制[decimal]
int
tinyint 1byte
smallint 2bytes
mediumint 3bytes
int 4bytes
bigint 8bytes 范围: - ^-
近似: 单精度浮点[float]、双精度浮点[double] 修饰
NOT NULL :非空约束
DEFAULT NULL :设定默认值
https://blog.51cto.com/sonlich/1970069
MySQL 基础之一的更多相关文章
- Mysql基础代码(不断完善中)
Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...
- MYSQL基础操作
MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...
- 【夯实Mysql基础】记一次mysql语句的优化过程
1. [事件起因] 今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多. 一个sql是 链接了5个表同时使 ...
- MySQL基础(非常全)
MySQL基础 一.MySQL概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access ...
- mysql 基础篇5(mysql语法---数据)
6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1 ...
- MySQL 基础语句
MySQL 基础语句 多个知识点 ----------------------------------------------------------------------------------- ...
- MySQL:基础—数据分组
MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...
- MySQL基础学习总结
1.MySQL基础概念 mysql逻辑架构如下: 每个客户端连接都会在服务器中拥有一个线程,这个连接的查询只会在这个单独的线程中执行. MySQL是分层的架构.上层是服务器层的服务和查询执行引擎,下层 ...
- MySQL基础(五)——视图
MySQL基础(五)--视图
- MySQL基础(四)——索引
MySQL基础(四)--索引
随机推荐
- DevExtreme学习笔记(一) DataGrid中注意事项
1.阻止cell编辑 config.onEditorPreparing = function (e) { if (e.dataField === 'xx' && e.row.data. ...
- .net core使用ocelot---第八篇 Consul
简介 .net core使用ocelot---第一篇 简单使用 .net core使用ocelot---第二篇 身份验证使用 .net core使用ocelot---第三篇 日志记录 .net ...
- UI5-技术篇-Hybrid App-2-Geolocation位置定位
在SAP WEB IDE简单测试基于HTML5自带的定位功能,相关步骤如下: 1.VIEW代码 <mvc:View xmlns:core="sap.ui.core" xmln ...
- 笔谈I帧、P帧、B帧、PTS、DTS(一)
做视频的播放,涉及到关键帧一说,从视频流中取出数据显示图像的时候,这些一幅幅图像之间到底有什么关联呢.那就有必要弄清楚I帧.P帧.B帧.PTS.DTS的概念,文章 I,P,B帧和PTS,DTS的关系 ...
- OSI7层模型和网络排错、网络安全
1.OSI7层模型和网络排错 7层模型和网络排错 序号 层 网络排错举例 措施 1 物理层故障 查看链接状态发送和接收数据包 2 数据链路层故障 MAC冲突ADSL欠费网速没法协商一致计算机连接到错误 ...
- 阿里云SOP
阿里云SOP 摘要 注册阿里云账号. 领取及配置ECS. 领取及配置RDS. 部署网站. 注册阿里云账号 在主页点击注册 填入相应的信息 领取及配置ECS 注册后领取免费的ECS,RDS. 打开控制台 ...
- kubernetes-使用kubeadm添加node节点
node节点服务器需要安装好 kubeadm, kubelet 和 kubectl: 使用kubeadm join 命令即行,使用master节点kebeadm init时的提示: root@boke ...
- C++(三十六) — 等号操作符重载、&&,||不可重载
1.等号操作符重载,实现深拷贝 //等号运算符重载 // obj3=obj1;//原始的是浅拷贝,现在要重载为深拷贝 Name& operator=(Name &obj1) { //1 ...
- [Python] Codecombat 攻略 地牢 Kithgard (1-22关)
首页:https://cn.codecombat.com/play语言:Python 第一界面:地牢 Kithgard(22关) 时间:1-3小时 内容:语法.方法.参数.字符串.循环.变量等 网页: ...
- Fiddler使用资料-整理
以下是一个博主写的一个系列. 随笔分类 - Fiddler 10.Fiddler中设置断点修改Response 摘要:当然Fiddler中也能修改Response 第一种:打开Fiddler 点击 ...