一、MySQL简介

1、什么是数据库 ?

  数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。

  主流的数据库有:sqlserver,mysql,Oracle、SQLite、Access、MS SQL Server等,本文主要讲述的是mysql

2、数据库管理系统的优点

1、相互关联的数据的集合
2、较少的数据冗余
3、程序与数据相互独立
4、保证数据的安全、可靠
5、最大限度地保证数据的正确性
6、数据可以并发使用并能同时保证一致性

3、数据库管理系统的基本功能

数据定义
数据处理
数据安全
数据备份 

4、数据库管理系统

1、数据库是数据的汇集,它以一定的组织形式存于存储介质上
2、DBMS是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心
3、DBA:负责数据库的规划、设计、协调、维护和管理等工作
4、应用程序指以数据库为基础的应用程序

5、数据库系统的架构

单机架构
大型主机/终端架构
主从式架构(C/S)
分布式架构

6、关系型数据库

1、关系 :关系就是二维表,其中:表中的行、列次序并不重要
2、行row:表中的每一行,又称为一条记录
3、列column:表中的每一列,称为属性,字段
4、主键Primary key:用于惟一确定一个记录的字段
5、域domain:属性的取值范围,如,性别只能是‘男’和‘女’两个值

7、联系的类型

一对一联系(1:1)
一对多联系(1:n)
多对多联系(m:n)

(1)数据的操作:

数据提取:在数据集合中提取感兴趣的内容。SELECT
数据更新:变更数据库中的数据。INSERT、DELETE、UPDATE

(2)数据的约束条件 :是一组完整性规则的集合

实体(行)完整性 Entity integrity
域(列)完整性 Domain Integrity
参考完整性 Referential Integrity

8、简易数据规划流程

第一阶段:收集数据,得到字段

• 收集必要且完整的数据项
• 转换成数据表的字段

第二阶段:把字段分类,归入表,建立表的关联

• 关联:表和表间的关系
• 分割数据表并建立关联的优点
• 节省空间
• 减少输入错误
• 方便数据修改

第三阶段:

• 规范化数据库

9、数据库的正规化分析

1、数据库规范化,又称数据库或资料库的正规化、标准化,是数据库设计中的一系列原理和技术,以减少数据库中数据冗余,增进数据的一致性。关系模型的发明者埃德加·科德最早提出这一概念,并于1970年代初定义了第一范式、第二范式和第三范式的概念
2、RDMBS设计范式基础概念
3、设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,不同的规范要求被称为不同范式,各种范式呈递次规范,越高的范式数据库冗余越小/2目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般
数据库只需满足第三范式(3NF)即可

10、范式

1NF:无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性,确保每一列的原子性。除去同类型的字段,就是无重复的列
说明:第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库
2NF:属性完全依赖于主键,第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一地区分。通常为表加上一个列,以存储各个实例的唯一标识PK,非PK的字段需要与整个PK有直接相关性
3NF:属性不依赖于其它非主属性,满足第三范式必须先满足第二范式。第三范式要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系

二、SQL概念  

1、SQL: Structure Query Language
      结构化查询语言
      SQL解释器:
2、数据存储协议:应用层协议,C/S
  S:server, 监听于套接字,接收并处理客户端的应用请求
  C:Client
3、客户端程序接口
     CLI
     GUI
4、应用编程接口
    ODBC:Open Database Connectivity
    JDBC:Java Data Base Connectivity

5、约束

1、约束:constraint,表中的数据要遵守的限制
2、主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;必须提供数据,即NOT NULL,一个表只能有一个
3、惟一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;允许为NULL,一个表可以存在多个
4、外键:一个表中的某字段可填入的数据取决于另一个表的主键或唯一键已有的数据
5、检查:字段值在一定范围内

6、基本概念

1、索引:将表中的一个或多个字段中的数据复制一份另存,并且按特定次序排序存储
 2、关系运算:

选择:挑选出符合条件的行
投影:挑选出需要的字段
连接:表间字段的关联

7、数据模型

1、数据抽象:

物理层:数据存储格式,即RDBMS在磁盘上如何组织文件
逻辑层:DBA角度,描述存储什么数据,以及数据间存在什么样的关系
视图层:用户角度,描述DB中的部分数据

2、关系模型的分类:

关系模型
基于对象的关系模型
半结构化的关系模型:XML数据

8、MySQL系列

官方网址:

https://www.mysql.com/
http://mariadb.org/
https://www.percona.com

官方文档:

https://dev.mysql.com/doc/
https://mariadb.com/kb/en/
https://www.percona.com/software/mysql-database/percona-server

三、MYSQL的特性

插件式存储引擎:也称为“表类型”,存储管理器有多种实现版本,功能和特性可能均略有别;用户可根据需要灵活选择,Mysql5.5.5开始innoDB引擎是
MYSQL默认引擎
MyISAM ==> Aria
InnoDB ==> XtraDB
1、单进程,多线程
2、诸多扩展和新特性
3、提供了较多测试组件
4、开源

四、安装 MYSQL

Mariadb安装方式:
1、源代码:编译安装
2、二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用
3、程序包管理器管理的程序包
CentOS 安装光盘
项目官方:https://downloads.mariadb.org/mariadb/repositories/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb-x.y.z/yum/centos7-amd64/

centos6安装mysql:

yum install mysql-server

centos6的相关程序:

rpm -ql mysql-server
/var/log/mysqld.log 存放日志路径
/usr/libexec/mysqld 服务执行主程序
/etc/rc.d/init.d/mysqld 服务的配置文件

centos7安装mariadb;

yum install mariadb-server  

centos7相关程序:

[root@ansiblescripts]#rpm -ql mariadb
/usr/libexec/mysqld 服务器执行主程序
/usr/lib/systemd/system/mariadb.service 服务程序
/etc/my.cnf.d/server.cnf 配置文件
/var/lib/mysql 数据库数据存放的路径
/var/log/mariadb/mariadb.log 存放日志路径

centos6启动mysql服务

service mysqld start

五、MySQL操作

1、MySQL数据库

(1)mysql客户端选项

-u 用户
-h 主机地址/主机名
-p 密码
-P 端口(大写字母)
-s:静默
-S 套接字位置(指定连接socket文件路径)
-e: 执行SQL命令

例:mysql -u user -p passwd

(2)常见错误如下:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2), it means that the MySQL server daemon (Unix) or service (Windows) is not running.

(3)退出连接:

QUIT 或者 Ctrl+D

(4)-e 选项用法:

[root@ansiblescripts]#mysql -pcentos  -e "show databases" 直接输入命令可以查询,不需要进入到mysql里面再输入命令
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+

(5)socket地址

服务器监听的两种socket地址:
(1)ip socket: 监听在tcp的3306端口,支持远程通信
(2)unix sock: 监听在sock文件上,仅支持本机通信
如:/var/lib/mysql/mysql.sock)
说明:host为localhost,127.0.0.1时自动使用unix sock

2、查看数据库,创建数据库,使用数据库查看数据库

(1)查看数据库

show databases;

默认(安装自带)数据库:

mysql - 用户权限相关数据
test - 用于用户测试数据
information_schema - MySQL本身架构相关数据

(2)创建数据库:

create database db1 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;   #utf8编码
create database db1 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; #gbk编码

(3)使用数据库:

use db1;

(4)显示当前使用的数据库中所有表:

SHOW TABLES;

(5)设置数据库密码:

mysql  数据库路径:ls /var/lib/mysql/目录下。

[root@ansiblescripts]#mysql_secure_installation  设置数据库密码的脚本

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here. Enter current password for root (enter for none):
OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation. Set root password? [Y/n] y 设置root口令
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success! By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment. Remove anonymous users? [Y/n] y 删除匿名用户账号
... Success! Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] y 禁止远程登录
... Success! By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment. Remove test database and access to it? [Y/n] y 删除test测试数据库
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success! Reloading the privilege tables will ensure that all changes made so far
will take effect immediately. Reload privilege tables now? [Y/n] y 立即生效当前设置
... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB
installation should now be secure. Thanks for using MariaDB!

三、用户管理

mysql用户账号由两部分组成:

'USERNAME'@'HOST‘

说明:

1、HOST限制此用户可通过哪些远程主机连接mysql服务器
2、支持使用通配符:
% 匹配任意长度的任意字符
172.16.0.0/255.255.0.0 或 172.16.%.%
_ 匹配任意单个字符

1、创建用户

create user '用户名'@'IP地址' identified by '密码';

2、删除用户

drop user '用户名'@'IP地址';

3、修改用户

rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';

4、修改密码

set password for '用户名'@'IP地址' = Password('新密码');

注:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

四、mariadb配置

侦听3306/tcp端口可以在绑定有一个或全部接口IP上

vim /etc/my.cnf
[mysqld]
skip-networking=1(启用)

说明:关闭网络连接,只侦听本地客户端, 所有和服务器的交互都通过一个socket实现,socket的配置存放在/var/lib/mysql/mysql.sock) 可在/etc/my.cnf修改

1,ON,TRUE意义相同, 0,OFF,FALSE意义相同

五、服务器端配置

服务器端(mysqld):工作特性有多种配置方式
1、命令行选项:
2、配置文件:类ini格式
集中式的配置,能够为mysql的各应用程序提供配置信息

[mysqld]
[mysqld_safe]
[mysqld_multi] 多实例
[mysql]
[mysqldump]
[server]
[client]
格式:parameter = value

说明:_和- 相同
1,ON,TRUE意义相同, 0,OFF,FALSE意义相同

六、迁移数据库实验:

当根目录的内存不够大时,我们需要将数据库进行迁移,那么,我们该怎么迁移呢?

(1)首先分一个未被使用的分区:

[root@ansible~]#fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them.
Be careful before using the write command. Command (m for help): n
All primary partitions are in use
Adding logical partition 6
First sector (322967552-419430399, default 322967552):
Using default value 322967552
Last sector, +sectors or +size{K,M,G} (322967552-419430399, default 419430399): +10G
Partition 6 of type Linux and of size 10 GiB is set Command (m for help): t 注意定义逻辑卷类型
Partition number (1-6, default 6): 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM' Command (m for help): w
The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

(2)将分区进行同步:

[root@ansible~]#partprobe
Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0 has been opened read-only.
[root@ansible~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 100G 0 part /
├─sda3 8:3 0 50G 0 part /data
├─sda4 8:4 0 1K 0 part
├─sda5 8:5 0 3G 0 part [SWAP]
└─sda6 8:6 0 10G 0 part
sdb 8:16 0 10G 0 disk
└─vg0-testly 253:0 0 64M 0 lvm
sdc 8:32 0 10G 0 disk
sr0 11:0 1 10G 0 rom

(3)创建LVM卷组:

[root@ansible~]#pvcreate /dev/sda6 创建物理卷组
Physical volume "/dev/sda6" successfully created.
[root@ansible~]#vgcreate vg1 /dev/sda6 创建逻辑卷组
Volume group "vg1" successfully created
[root@ansible~]#lvcreate -n mysql -l 100%FREE vg1 创建LVM卷组
Logical volume "mysql" created.
[root@ansible~]#lvdisplay 查询创建结果
--- Logical volume ---
LV Path /dev/vg1/mysql
LV Name mysql
VG Name vg1
LV UUID zsLEIg-c0Hd-f49l-Hp8f-U9A2-Cele-cWvJoW
LV Write Access read/write
LV Creation host, time ansible, 2019-11-11 16:44:50 +0800
LV Status available
# open 0
LV Size <10.00 GiB
Current LE 2559
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1

 (4)将当前的/dev/vg1/mysql卷组进行挂载到创建的目录下,最好是写入到/etc/fstab目录下,永久保存:

[root@ansible~]#mkfs.xfs /dev/vg1/mysql
meta-data=/dev/vg1/mysql isize=512 agcount=4, agsize=655104 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2620416, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@ansible~]#blkid
/dev/sda1: UUID="4357cc0e-6ee7-4a8f-8064-d1a54bdbf17f" TYPE="xfs"
/dev/sda2: UUID="38dd5f68-4f30-411c-b80a-0f4a60b06c6f" TYPE="xfs"
/dev/sda3: UUID="eb4bf5e6-2645-4b1c-bda8-12c5831b81c2" TYPE="xfs"
/dev/sda5: UUID="b8c37e0b-3628-40b6-ac44-c36ca09b448f" TYPE="swap"
/dev/sda6: UUID="MScF2N-3cQm-yw6s-vqx2-X0Vp-ySXm-urDZvE" TYPE="LVM2_member"
/dev/sdb: UUID="AYecKo-37eD-N6sC-jL33-kCrb-ACAV-ez47oc" TYPE="LVM2_member"
/dev/sr0: UUID="2018-11-26-14-22-58-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
/dev/sdc: UUID="JMGIQr-CS6e-XpUb-1MNu-J4fW-faeW-twAMni" TYPE="LVM2_member"
/dev/mapper/vg0-testly: UUID="9478f57c-2957-493e-948c-549cc28177bf" TYPE="ext4"
/dev/mapper/vg1-mysql: UUID="299553df-ea83-4dab-8c51-b0a57bcd6f9c" TYPE="xfs"
[root@ansible~]#mkdir /data/mysql
[root@ansible~]#mount /dev/vg1/mysql /data/mysql

(5)修改当前的所属组和所有者权限,与/var/lib/mysql权限一致:

[root@ansibledata]#ll -d /data/mysql /var/lib/mysql
drwxr-xr-x 2 root root 6 Nov 11 16:45 /data/mysql
drwxr-xr-x 4 mysql mysql 165 Nov 11 15:46 /var/lib/mysql
[root@ansibledata]#chown mysql. /data/mysql
[root@ansibledata]#ll /data/mysql

 (6)迁移数据库数据,在/etc/my.cnf配置文件中修改: 

[root@ansibledata]#vim /etc/my.cnf

[mysqld]
#datadir=/var/lib/mysql
datadir=/data/mysql 将迁移的目录写入
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0 禁止使用软链接

(7)重启mysql服务器:

[root@ansibledata]#systemctl restart mariadb

(8)查看迁移的数据库数据

[root@ansibledata]#ls /data/mysql
aria_log.00000001 aria_log_control ibdata1 ib_logfile0 ib_logfile1 mysql performance_schema test

  

 

  

 

 

 

 

  

 

 

  

 

MySQL基础部分(一)的更多相关文章

  1. Mysql基础代码(不断完善中)

    Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...

  2. MYSQL基础操作

    MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...

  3. 【夯实Mysql基础】记一次mysql语句的优化过程

    1. [事件起因] 今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多. 一个sql是 链接了5个表同时使 ...

  4. MySQL基础(非常全)

    MySQL基础 一.MySQL概述 1.什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 2.什么是 MySQL.Oracle.SQLite.Access ...

  5. mysql 基础篇5(mysql语法---数据)

    6 增删改数据 -- ********一.增删改数据********* --- -- 1.1 增加数据 -- 插入所有字段.一定依次按顺序插入 INSERT INTO student VALUES(1 ...

  6. MySQL 基础语句

    MySQL 基础语句 多个知识点 ----------------------------------------------------------------------------------- ...

  7. MySQL:基础—数据分组

    MySQL:基础-数据分组 1.为什么要分组: 比如一个表中有多条订单记录,如上图,每条记录对应着一个商品,现在我要查询 每个商品被订购的单数 准备出货?也就是找到每个商品被订购的数量. 如果只找一个 ...

  8. MySQL基础学习总结

    1.MySQL基础概念 mysql逻辑架构如下: 每个客户端连接都会在服务器中拥有一个线程,这个连接的查询只会在这个单独的线程中执行. MySQL是分层的架构.上层是服务器层的服务和查询执行引擎,下层 ...

  9. MySQL基础(五)——视图

    MySQL基础(五)--视图

  10. MySQL基础(四)——索引

    MySQL基础(四)--索引

随机推荐

  1. sonarqube-jenkins-config

    Sonar Config .Jenkinsfile config stage('SonarQube analysis') { steps { script { scannerHome = tool ' ...

  2. Spring Boot使用过滤器Filter

    首先创建一个测试用的controller:TestController: package com.zifeiy.test.controller; import org.springframework. ...

  3. WIN10激活教程,亲测,有效

    WIN10激活教程: 1.打开开始菜单,找到设置,点开“更新和安全”,切换到“激活”选项卡,查看到当前系统的激活状态 2.在搜索框输入“CMD”,出现“命令提示符”工具时,右击选择“以管理员身份”运行 ...

  4. 【C/C++开发】运算符重载

    c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁.高效.在c++中不止函数可以重载,运算符也可以重载.由于一般数据类型间的运算符没有重载的必要, ...

  5. 【计算机视觉】Object Proposal之BING++

    本文是对 BING 算法的升级,主要是在快的同时保持定位精度  两个 + 分别对应: edge-based recursive boxes as one "+", and MTSE ...

  6. Linux 安装环境初始化检查 安装Nginx

    一 .阿里云 centos 6.8 32 位裸环境 实现:Linux Nginx mysql php redis 查看当前安装的服务 [root@iZgahlk1l73998Z etc]# servi ...

  7. eclipse搭建springboot的项目

    记录一次自己搭建springboot的经历 springboot项目创建 这里借用别的博主分享的方法 https://blog.csdn.net/mousede/article/details/812 ...

  8. PAT甲级 图 相关题_C++题解

    图 PAT (Advanced Level) Practice 用到图的存储方式,但没有用到图的算法的题目 目录 1122 Hamiltonian Cycle (25) 1126 Eulerian P ...

  9. LC 144. / 94. / 145. Binary Tree Preorder/ Inorder/ PostOrder Traversal

    题目描述 144. Binary Tree Preorder Traversal 94. Binary Tree Inorder Traversal 145. Binary Tree Postorde ...

  10. ThinkPHP读取配置信息

    use think\Config; dump(Config::get()); // 或者 dump(config());示例:dump(Config::get('database.database') ...