赞
踩
目录
数据的分类
使用磁盘文件来存储数据
出现了网状模型、层次模型数据库
关系型数据库和结构化查询语言
“关系-对象”型数据库
相互关联的数据的集合
较少的数据冗余
程序与数据相互独立
保证数据的安全、可靠
最大限度地保证数据的正确性
数据可以并发使用并能同时保证一致性
Relational Database Management System,关系模型最初由IBM公司的英国计算机科学家埃德加·科德(Edgar F. Codd)于1969年描述,1974年,IBM开始开发系统R,这是一个开发RDBMS原型的研究项目。然而,第一个商业上可用的RDBMS是甲骨文,于1979年由关系软件(现为甲骨文公司)发布.
1.7.3.1 关系统型数据库相关概念
1.7.3.2 常用关系数据库
MySQL: MySQL, MariaDB, Percona Server
PostgreSQL: 简称为pgsql,EnterpriseDB
Oracle
MSSQL
DB2
表1:
表2:
1.7.3.3 数据库排名
DB-Engines Ranking - popularity ranking of database management systems
• 实体内部的联系:指组成实体的各属性之间的联系。如职工实体中,职工号和部门经理号之间
有一种关联关系
• 实体之间的联系:指不同实体之间联系。例:学生选课实体和学生基本信息实体之间
• 实体之间的联系用菱形框表示
一对一联系(1:1)
一对多联系(1:n):外键
多对多联系(m:n):增加第三张表
数据提取:在数据集合中提取感兴趣的内容。SELECT
数据更新:变更数据库中的数据。INSERT、DELETE、UPDATE
收集数据,得到字段
收集必要且完整的数据项
转换成数据表的字段
1)描述主流的数据库系统 关系型数据库: Mysql(Oracle公司) 、 SQL server(微软) 、access(微软公司office产品) Oracle 、DB2(IBM公司),sybase(sybase) 等等
2)关系型数据库和非关系型数据库的区别 关系数据库: 关系数据库结构是二维数据库表,二维表当中每个字段(列)用来描述对象的一个属性, 每个记录(行)用来描述一个对象的信息(完整信息),关系数据库写到哪里也就是存储在硬盘当中 读写系统就会受到的IO限制或者瓶颈,其他 关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织 优点: 1、易于维护:都是使用表结构,格式一致; 2、使用方便:SQL语言通用,可用于复杂查询; 3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。 缺点: 1、读写性能比较差,尤其是海量数据的高效率读写; 2、固定的表结构,灵活度稍欠; 3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
3)缓存加速软件 非关系型数据库(NoSQL): MongoDB 、 Redis(内存数据库/缓存数据库)K-V键值对、与之类似的Memcache,K-V键值对 redis-memecache对比: 相同点:存储高热数据(在内存中高速运行) 不同点:redis可以做持久化保存,可以存储对象
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
优点:1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、 图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。 2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘; 3、高扩展性与高可用性; 4、成本低:nosql数据库部署简单,基本都是开源软件。
缺点:1、不提供sql支持,学习和使用成本较高; 2、无事务处理; 3、数据结构相对复杂,复杂查询方面稍欠。
使用数据库可以高效且条理分明地存储数据,使人们能够更加迅速、方便地管理数据。 数据库具有以下特点。
可以结构化存储大量的数据信息,方便用户进行有效的检索和访问。
可以有效地保持数据信息的一致性、完整性,降低数据冗余。
可以满足应用的共享和安全方面的要求。
数据库技术是计算机科学的核心技术之一,具有完备的理论基础。对数据库基本概念的掌握,将有助于对数据库的理解。
描述事物的符号记录
包括数字,文字、图形、图像、声音、档案记录等
以“记录”形式按统一的格式进行存储
3.2.2 表
将不同的记录组织在一起
用来存储具体数据
3.2.3数据库
表的集合,是存储数据的仓库
以一定的组织方式存储的相互有关的数据集合
数据库管理系统(Database Management System,DBMS)是实现对数据库资源有效组织、 管理和存取的系统软件。它在操作系统的支持下,支持用户对数据库的各项操作。DBMS 主要包括以下功能。
是一个人机系统,由硬件、OS、数据库、DBMS、应用软件和数据库用户组成
用户可以通过DBMS或应用程序操作数据库
过程:
应用程序把查询SQL语句发给服务器端执行。
服务器解析请求的SQL语句。
语句执行。
PS:
确保SQL语法正确;
确保SQL语义上的正确性即对象是否存在;
数据库用户是否具有相应的访问权限。
客户端程序
mysql: 交互式的CLI工具
mysqladmin:基于mysql协议管理mysqld
mysqlimport:数据导入工具
MyISAM存储引擎的管理工具:
myisamchk:检查MyISAM库
myisampack:打包MyISAM表,只读
服务器端程序
mysqld_safe
mysqld
mysqld_multi 多实例 ,示例:mysqld_multi
- [root@localhost ~]#yum info mariadb
- 可安装的软件包
- 已加载插件:fastestmirror, langpacks
- Loading mirror speeds from cached hostfile
- 可安装的软件包
- 名称 :mariadb
- 架构 :x86_64
- 时期 :1
- 版本 :5.5.56
- 发布 :2.el7
- 大小 :8.7 M
- 源 :yum
- 简介 : A community developed branch of MySQL
- 网址 :http://mariadb.org
- 协议 : GPLv2 with exceptions and LGPLv2 and BSD
- 描述 : MariaDB is a community developed branch of
- : MySQL. MariaDB is a multi-user,
- : multi-threaded SQL database server. It is a
- : client/server implementation consisting of
- : a server daemon (mysqld) and many different
- : client programs and libraries. The base
- : package contains the standard MariaDB/MySQL
- : client programs and generic MySQL files.
-
- MySQL被Sun收购后,搞了个过渡的6.0版本,没多久就下线了,后来被Oracle收购后,终于迎来了像样的5.6
- 版本,之后就是5.7、8.0版本。由于6.0版本号已被用过,7.x系列版本专用于NDB Cluster,因而新版本
- 号从8.0开始。
- 1、安装Mysql环境依赖包
- yum -y install \
- ncurses \
- ncurses-devel \
- bison \
- cmake
-
- 2、创建运行用户
- useradd -M -s /sbin/nologin mysql
-
- 3、编译安装
- cd /opt
- tar zxvf mysql-boost-5.7.20.tar.gz
-
- cd /opt/mysql-5.7.20/
- cmake \
- -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
- -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
- -DSYSCONFDIR=/etc \
- -DSYSTEMD_PID_DIR=/usr/local/mysql \
- -DDEFAULT_CHARSET=utf8 \
- -DDEFAULT_COLLATION=utf8_general_ci \
- -DWITH_EXTRA_CHARSETS=all \
- -DWITH_INNOBASE_STORAGE_ENGINE=1 \
- -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
- -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
- -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
- -DMYSQL_DATADIR=/usr/local/mysql/data \
- -DWITH_BOOST=boost \
- -DWITH_SYSTEMD=1
-
- make && make install
-
- 4、修改mysql 配置文件
- vim /etc/my.cnf
- [client]
- port = 3306
- socket=/usr/local/mysql/mysql.sock
-
- [mysqld]
- user = mysql
- basedir=/usr/local/mysql
- datadir=/usr/local/mysql/data
- port = 3306
- character-set-server=utf8
- pid-file = /usr/local/mysql/mysqld.pid
- socket=/usr/local/mysql/mysql.sock
- bind-address = 0.0.0.0
- skip-name-resolve
- max_connections=2048
- default-storage-engine=INNODB
- max_allowed_packet=16M
- server-id = 1
-
- sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
-
- 5、更改mysql安装目录和配置文件的属主属组
- chown -R mysql:mysql /usr/local/mysql/
- chown mysql:mysql /etc/my.cnf
-
- 6、设置路径环境变量
- echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
- source /etc/profile
-
- 7、初始化数据库
- cd /usr/local/mysql/bin/
- ./mysqld \
- --initialize-insecure \
- --user=mysql \
- --basedir=/usr/local/mysql \
- --datadir=/usr/local/mysql/data
-
- 8、添加mysqld系统服务
- cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
- systemctl daemon-reload
- systemctl start mysqld.service
- systemctl enable mysqld
-
- 9、修改mysql 的登录密码
- mysqladmin -u root -p
-
- 10、授权远程登录
- mysql -u root -p
- 1. #创建mysql源
- cd /etc/yum.repos.d/
- vim mysql.repo
- [mysql]
- name=mysql5.7
- baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
- gpgcheck=0
-
- 2. #安装服务mysql-community-server
- yum -y install mysql-community-server
-
- 3. #启动服务
- systemctl start mysqld
- ss -ntap |grep 3306
-
- 4. #登入数据库,但是密码是默认的,需要查看
- mysql -u root -p
- grep password /var/log/mysqld.log
- mysql -u root -p'+8saq%5+ljzG'
- #特殊符号用单引号引起来
-
- 5. #登入数据库后必须修改密码
- status
- alter user root@'localhost' identified by 'Yxp15@2021';
-
- #可以使用mysql> \h查看帮助
什么是数据库多实例
多实例类似微信双开,端口号类比微信账号,数据库类比聊天窗口,表类比聊天记录
MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306、3307等),同时运
行多个MySQL服务进程,这些服务进程通过不同的Socket监听不同的服务端口来提供服务。
多实例可能是MySQL的不同版本,也可能是MySQL的同一版本实现
多实例的好处
可有效利用服务器资源。当单个服务器资源有剩余时,可以充分利用剩余资源提供更多的服务,且
可以实现资源的逻辑隔离节约服务器资源。例如公司服务器资源紧张,但是数据库又需要各自尽量
独立的提供服务,并且还需要到主从复制等技术,多实例就是最佳选择
多实例弊端
存在资源互相抢占的问题。比如:当某个数据库实例并发很高或者SQL查询慢时,整个实例会消耗
大量的CPU、磁盘I/O等资源,导致服务器上面其他的数据库实例在提供服务的质量也会下降,所以
具体的需求要根据自己的实际情况而定。
- 1. #安装mariadb-server并启动登入系统
- yum -y install mariadb-server
- systemctl start mariadb.service
-
- #一路回车,并设置密码
- mysql_secure_installation
-
- #登入系统
- mysql -u root -p123123
-
-
-
- 2. #创建目录和文件夹
- mkdir -pv /mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid}
-
- 3. #设置属主属组
- chown -R mysql.mysql /mysql
- tree -d /mysql/
-
- 4. #初始化数据库
- mysql_install_db --user=mysql --datadir=/mysql/3306/data
- mysql_install_db --user=mysql --datadir=/mysql/3307/data
- mysql_install_db --user=mysql --datadir=/mysql/3308/data
-
- 5. #编辑配置文件
- vim /mysql/3306/etc/my.cnf
- [mysqld]
- port=3306
- datadir=/mysql/3306/data
- socket=/mysql/3306/socket/mysql.sock
- log-error=/mysql/3306/log/mysql.log
- pid-file=/mysql/3306/pid/mysql.pid
-
- 6. #修改3307和3308配置文件
- sed 's/3306/3307/' /mysql/3306/etc/my.cnf > /mysql/3307/etc/my.cnf
-
- sed 's/3306/3308/' /mysql/3306/etc/my.cnf >
- /mysql/3308/etc/my.cnf
-
-
- 7. #准备启动脚本
- vim /mysql/3306/bin/mysqld
- #!/bin/bash
-
- port=3306
- mysql_user="root"
- mysql_pwd=""
- cmd_path="/usr/bin"
- mysql_basedir="/mysql"
- mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"
-
- function_start_mysql()
- {
- if [ ! -e "$mysql_sock" ];then
- printf "Starting MySQL...\n"
- ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf &> /dev/null &
- else
- printf "MySQL is running...\n"
- exit
- fi
- }
-
-
- function_stop_mysql()
- {
- if [ ! -e "$mysql_sock" ];then
- printf "MySQL is stopped...\n"
- exit
- else
- printf "Stoping MySQL...\n"
- ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
- fi
- }
-
-
- function_restart_mysql()
- {
- printf "Restarting MySQL...\n"
- function_stop_mysql
- sleep 2
- function_start_mysql
- }
-
- case $1 in
- start)
- function_start_mysql
- ;;
- stop)
- function_stop_mysql
- ;;
- restart)
- function_restart_mysql
- ;;
- *)
- printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
- esac
-
- 8. #重复上述过程,分别建立3307,3308的启动脚本
-
- 9. #授权并启动服务
- chmod +x /mysql/3306/bin/mysqld
- chmod +x /mysql/3307/bin/mysqld
- chmod +x /mysql/3308/bin/mysqld
-
- /mysql/3306/bin/mysqld start
- /mysql/3307/bin/mysqld start
- /mysql/3308/bin/mysqld start
-
- #查看有没有启动成功
- ss -natp|grep 33
-
-
- 10. #怎么看mysql这个进程是不是超线程
- 1)#找到mysql进程号
- pstree -p
- 2)#查看,5450就是查看的进程号
- cat /proc/5450/status |grep Threads
-
- 11. #登入mysql
- #示例
- mysql -h127.0.0.1 -P3308
-
- 12. #怎么杀掉这个进程,示例
- /mysql/3308/bin/mysqld stop
-
- 13. #修改密码示例
- mysqladmin -uroot -S /mysql/3306/socket/mysql.sock password
- '123123'
-
- 14. #设置开机启动
- vim /etc/rc.d/rc.local
- for i in {3306..3308};do /mysql/$i/bin/mysqld start;done
-
- chmod +x /etc/rc.d/rc.local
-
- 开机后
- bash /etc/rc.d/rc.local
- 1. #安装插件
- yum install -y libffi-devel
- yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
-
- 2. #将php包导入/opt下,解压安装php
- cd /opt/
- tar zxvf Python-3.7.7_.tgz
- ##编译
- cd Python-3.7.7/
- ./configure --prefix=/usr/local/Python-3.7.7/
-
- ##安装
- make && make install
-
- ##做软连接
- ln -s /usr/local/Python-3.7.7/bin/python3.7 /usr/bin/python37
- ln -s /usr/local/Python-3.7.7/bin/pip3.7 /usr/bin/pip37
- pip37 install mycli -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
- ln -s /usr/local/Python-3.7.7/bin/mycli /usr/bin/mycli
-
- 3. #登录
- mycli -u root -p 123123
-
-
- ####如果不装插件
- [root@localhost ~]#vim /etc/my.cnf
- [mysql]
- prompt=(\\u@\\h) [\\d]>\\_
-
- auto-rehash
数据库:database
表:table,行:row 列:column
索引:index
视图:view
存储过程:procedure
存储函数:function
触发器:trigger
事件调度器:event scheduler,任务计划
用户:user
权限:privilege
在数据库系统中,SQL 语句不区分大小写,建议用大写
SQL语句可单行或多行书写,默认以 " ; " 结尾
关键词不能跨多行或简写
用空格和TAB 缩进来提高语句的可读性
子句通常位于独立行,便于编辑,提高可读性
数据库对象和命名
数据库的组件(对象):
数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等
命名规则:
必须以字母开头,后续可以包括字母,数字和三个特殊字符(# _ $)
不要使用MySQL的保留字,如tabble select show databases
SQL语句分类
DDL: Data Defination Language 数据定义语言
CREATE,DROP,ALTER
DML: Data Manipulation Language 数据操纵语言
INSERT,DELETE,UPDATE
软件开发:CRUD
DQL:Data Query Language 数据查询语言
SELECT
DCL:Data Control Language 数据控制语言
GRANT,REVOKE
TCL:Transaction Control Language 事务控制语言
COMMIT,ROLLBACK,SAVEPOINT
- #DDL: Data Defination Language 数据定义语言
- CREATE,DROP,ALTER
-
- #DML: Data Manipulation Language 数据操纵语言
- INSERT,DELETE,UPDATE
-
- #DQL:Data Query Language 数据查询语言
- SELECT
-
-
- #DCL:Data Control Language 数据控制语言
- GRANT,REVOKE,COMMIT,ROLLBACK
-
-
- SELECT * #SELECT子句
- FROM products #FROM子句
- WHERE price>666 #WHERE子句
- mysql> help create
- #help 后面跟上具体命令可以查看帮助
- Many help items for your request exist.
- To make a more specific request, please type 'help <item>',
- where <item> is one of the following
- topics:
- CREATE DATABASE
- CREATE EVENT
- CREATE FUNCTION
- CREATE FUNCTION UDF
- CREATE INDEX
- CREATE LOGFILE GROUP
- CREATE PROCEDURE
- CREATE SERVER
- CREATE TABLE
- CREATE TABLESPACE
- CREATE TRIGGER
- CREATE USER
- CREATE VIEW
- SHOW
- SHOW CREATE DATABASE
- SHOW CREATE EVENT
- SHOW CREATE FUNCTION
- SHOW CREATE PROCEDURE
- SHOW CREATE TABLE
- SHOW CREATE USER
- SPATIAL
-
-
- ##也可以进一步
- mysql> help create DATABASE \G
- show charset;
- #查看支持字符集
- 默认拉丁文字
-
- utf8 | UTF-8 Unicode
- #阉割版的
-
- utf8mb4 | UTF-8 Unicode
- #真实的版本
-
- 我们编译安装已经修改过了
- mysql> show databases;
- #查看当前数据库
-
-
- mysql> use mysql;
- #使用 mysql表
-
-
- MySQL root@localhost:school> select * form yzx;
- #查看yzx表格的
- CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME'
- CHARACTER SET 'character set name'
- COLLATE 'collate name';
-
- #创建数据库
- create database dbb1;
-
- #创建的时候指定语言
- create database db3 charset=utf8;
-
-
- #查看创建的数据库
- show create database dbb1;
-
- #加的数据位置
- cd /usr/local/mysql/data/test/
ALTER DATABASE DB_NAME character set utf8;
DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';
例如
drop database db1;
SHOW DATABASES;
例如:
show databases;
system ls
system hostname
mysql -V
数据类型:
数据长什么样
数据需要多少空间来存放
数据类型
系统内置数据类型
用户定义数据类型
MySQL**支持多种内置数据类型**
数值类型
日期/时间类型
字符串(字符)类型
选择正确的数据类型对于获得高性能至关重要,三大原则:
更小的通常更好,尽量使用可正确存储数据的最小数据类型
简单就好,简单数据类型的操作通常需要更少的CPU周期
尽量避免NULL,包含为NULL的列,对MySQL更难优化
tinyint(m) 1个字节 范围(-128~127)
smallint(m) 2个字节 范围(-32768~32767)
mediumint(m) 3个字节 范围(-8388608~8388607)
int(m) 4个字节 范围(-2147483648~2147483647)
bigint(m) 8个字节 范围(+-9.22*10的18次方)
上述数据类型,如果加修饰符unsigned后,则最大值翻倍
如:tinyint unsigned的取值范围为(0~255)
float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位, 注意: 小数点不占用总个数
double(m,d) 双精度浮点型16位精度(8字节) m总个数,d小数位, 注意: 小数点不占用总个数
设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位
在数据库中存放的是精确值,存为十进制
格式 decimal(m,d) 表示 最多 m 位数字,其中 d 个小数,小数点不算在长度内
比如: DECIMAL(6,2) 总共能存6位数字,末尾2位是小数,字段最大值 9999.99 (小数点不算在长度内)
参数m<65 是总个数,d<30且 d<m 是小数位
MySQL5.0和更高版本将数字打包保存到一个二进制字符串中(每4个字节存9个数字)。
例如: decimal(18,9)小数点两边将各存储9个数字,一共使用9个字节:其中,小数点前的9个数字用4个字节,小数点后的9个数字用4个字节,小数点本身占1个字节
浮点类型在存储同样范围的值时,通常比decimal使用更少的空间。float使用4个字节存储。double占用8个字节,因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时
char(n) 固定长度,最多255个字符,注意不是字节
varchar(n) 可变长度,最多65535个字符
tinytext 可变长度,最多255个字符
text 可变长度,最多65535个字符
mediumtext 可变长度,最多2的24次方-1个字符
longtext 可变长度,最多2的32次方-1个字符
BINARY(M) 固定长度,可存二进制或字符,长度为0-M字节
VARBINARY(M) 可变长度,可存二进制或字符,允许长度为0-M字节
内建类型:ENUM枚举, SET集合
char和varchar的比较:
CREATE DATABASE school;
USE school;
CREATE TABLE ky15 (id int NOT NULL,name char(10) NOT NULL,score decimal(5,2),passwd char(48) DEFAULT'', PRIMARY KEY (id));
DESC zzz;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。