发布时间:2025-12-09 16:04:29 浏览次数:3
Mysql: DBMS(数据库管理系统 DataBase ManagerSystem)
概述:数据库(Database)是按照数据结构组织、存储和管理数据的仓库,它产生于距今六十多年前,数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统,在各个方面得到了广泛的应用。在信息化社会,充分有效地管理和利用各类信息资源,是进行科学研究和决策管理的前提条件。数据库技术是管理信息系统、办公自动化系统、诀策支持系统等各类信息系统的核心部分,是进行科学研究和决策管理的重要技术手段。
关系型数据库:sql数据库
非关系型数据库: nosql 数据库,not only sqI数据库
关系型数据库:数据拥有固定的存储结构,通过库-表--行--列的方式存储,存储时会有表的结构化关系,过程如下:解析sql语句--连接层--磁盘存取-结构化成表,;
优势:
1.容易理解,二维表的结构非常贴近现实世界,二维表格,容易理解;
2.使用方便,通用的sq|语句使得操作关系型数据库非常方便;
3.易于维护,数据库的ACID属性,大大降低了数据冗余和数据不一致的概率;
瓶颈:
1.海量数据的读写效率低,对于网站的并发量高,往往达到每秒上万次的请求,对于传统关系型数据库来说,硬盘I/O是一个很大的挑战。
2.高扩展性和可用性,在基于web的结构中,数据库是最难以横向拓展的,当一个应用系统的用户量和访问量与日俱增的时候,数据库没有办法像webServer那样简单的通过添加更多的硬件和服务节点来拓展性能和负载能力。
关系型数据库到非关系型数据库的演变:关系型数据库的最大优点就是事务的一致性,这个特性,使得关系型数据库中可以适用于一切要求一致性比较高的系统中。比如:银行系统。但是在大部分网页应用中,对这种一致性的要求不是那么的严格,允许有一定的时间间隔,所以关系型数据库这个特点不是那么的重要了。相反,关系型数据库为了维护一致性所付出的巨大代价就是读写性能比较差。而像微博、facebook这类应用,对于并发读写能力要求极高,关系型数据库已经无法应付。所以必须用-种新的数据结构存储来替代关系型数据库。所以非关系型数据库应用而生。
非关系型数据库,就是为了加快客户端的访问速度才出现的,因为所有的非关系型数据库都是尽可能的将数据放到内存当中;非关系型数据库是以key:value的形式存储的;
非关系型数据库: NoSQL 主要指那些非关系型的、分布式的,主要代表MongoDB,Redis、CouchDB。NoSQL 提出了另一种理念,以键值来存储,且结构不稳定,每一个元组都可以有不一样的字段,这种就不会局限于固定的结构,可以减少- -些时间和空间的开销。使用这方式,为了获取用户的不同信息,不需要像关系型数据库中,需要进行多表查询。仅仅需要根据key来取出对应的value值即可,所以避免了关系型数据库复杂的查询关系,可以大大增加查询的效率;
变量名=变量值 key=value
1.连接池:最上层负责和客户端进行连接,比如jdbc,odbj这样的数据库连接的API,在这一层有连接池的概念类似于线程池,连接池可以同时处理很多歌数据库请求。同时这一层有SSL的暗拳概念,可以确保连接是安全的。
2.SQL接口:当SQL语句进入MySQL后会先到SQL接口中,这一层是封装层,将传过来的语句拆散,将底层的结果封装成SQL的数据格式。
3.解析器:这一层负责将SQL语句进行拆分,验证,如果语句有问题那么就返回错误,如果没问题就继续向下执行。
4.优化器:对SQL查询的结果优化处理,产生多种执行计划,最终将数据库会选贼最优化的方案去执行,尽快返回结果。
5.缓存:对要查询的SQL语句进行hash后缓存,如果下一次是相同的查询语句,则在SQL接口之后返回结果。
6.存储引擎:MySQL有很多种存储引擎,每一种引擎有不同的特性,他们负责组织文件的存放形式,位置,访问文件的方法等等。
7.文件系统:真正存放物理文件的单位。
MySQL下载地址MySQL :: Download MySQL Community Server (Archived Versions)
boost1.59.0下载地址Boost C++ Libraries - Browse /boost/1.59.0 at SourceForge.net
上传软件
[root@localhost ~]# lsboost_1_59_0.tar.gz mysql-5.7.12.tar.gz[root@localhost ~]# yum -y remove mysql-* boost-* //卸载本地服务[root@localhost ~]# yum -y install gcc gcc-c++ ncurses bison libgcrypt perl cmake ncurses-devel //使用yum安装依赖包[root@localhost ~]# tar -zxvf boost_1_59_0.tar.gz //解压boost包[root@localhost ~]# mv boost_1_59_0 /usr/local/boost/ //移动boost文件到其他位置[root@localhost ~]# groupadd mysql //创建mysql组[root@localhost ~]# useradd -r -g mysql mysql //建立系统账号mysql并将其添加到mysql组[root@localhost ~]# tar zxvf mysql-5.7.12.tar.gz -C /usr/src/ //解压mysql包并将其解压到/usr/src/下[root@localhost ~]# cd /usr/src/mysql-5.7.12/ [root@localhost mysql-5.7.12]#cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost -DSYSCONFDIR=/etc[root@localhost mysql-5.7.12]# make -j `cat /proc/cpuinfo|grep processor|wc -l`[root@localhost mysql-5.7.12]# make installcmake编译时附加选项的解释
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql #MySQL安装的根目录
-DMYSQL_DATADIR=/mydata/mysql/data #MySQL数据库文件存放目录
-DDEFAULT_CHARSET=utf8 #设置默认字符集为utf8
-DDEFAULT_COLLATION=utf8_general_ci #设置默认字符校对
-DMYSQL_TCP_PORT=3306 #MySQL的监听端口
-DMYSQL_USER=mysql #MySQL用户名
-DWITH_MYISAM_STORAGE_ENGINE=1 #安装MySQL的myisam数据库引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 #安装MySQL的innodb数据库引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 #安装MySQL的archive数据库引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 #安装MySQL的blackhole数据库引擎
-DWITH_MEMORY_STORAGE_ENGINE=1 #安装MySQL的memory数据库引擎
-DENABLE_DOWNLOADS=1 #编译时允许自主下载相关文件
-DDOWNLOAD_BOOST=1 #允许下载BOOST
-DWITH_BOOST=/usr/local/boost #指定系统中存在的BOOST
-DSYSCONFDIR=/etc #MySQL配置文件所在目录
-DWITH_READLINE=1 #MySQL的readline library
-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock #MySQL的通讯目录
-DENABLED_LOCAL_INFILE=1 #启用加载本地数据
-DWITH_PARTITION_STORAGE_ENGINE=1 #启动mysql的分区存储结构
-DEXTRA_CHARSETS=all #使MySQL支持所有的扩展字符
-DWITH_DEBUG=0 #禁用调试模式
-DMYSQL_MAINTAINER_MODE=0
-DWITH_SSL:STRING=bundled #通讯时支持ssl协议
-DWITH_ZLIB:STRING=bundled #允许使用zlib library
初始化解释
--initialize-insecure #禁用mysql的密码策略(密码复杂性等),--initializeaize是开启密码策略,自动生成密码在mysqld.log文件中
--user=mysql #运行的账户
--basedir=/usr/local/mysql #mysql的安装位置
--datadir=/usr/local/mysql/data #mysql数据库服务数据的物理存放路径
[mysqld] #声明区域
basedir = /usr/local/mysql #mysql的安装位置
datadir = /usr/local/mysql/data #mysql的物理文件存放位置
port = 3306 #mysql服务监听的端口
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #mysql的模式
character_set_server=utf8 #字符集
init_connect='SET NAMES utf8'
log-error=/usr/local/mysql/logs/mysqld.log #指定日志文件位置
pid-file=/usr/local/mysql/logs/mysqld.pid #指定运行服务所产生的pid文件位置
skip-name-resolve #跳过mysql的域名反向解析
information_schema: 是一个信息数据库,它保存着关于MySQL服务器所维护的所有其他数据库的信息。(如数据库名,数据库的表,表栏的数据类型与访问数限等)
Mysql:主要负责存储数据库的用户、权限设置、关键字等mysal自己需要使用的控制和管理信息
performance_schema:主要用于收集数据库服务器性能参数。并且库里表的存储引擎均为 PERFORMANCE_SCHEMA,而用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表
Sys: Sys库所有的数据源来自: performance_schema。目标是把performance_schema的把复杂度降低,让DBA能更好的阅读这个库里的内容。让DBA更快的了解DB的运行情况
Sql语句分类:
• DDL:数据定义语言,用来建立数据库,数据对象和定义其列,如create、alter、drop
• DML:数据操纵语言,用来查询、插入、删除、修改数据库中的数据,如select、insert、update、delete
• DCL:数据控制语言,用来控制数据库组件的存取许可,存取权限等,如commit、rollback、grant、revok
什么是SQL?
• SQL(Structured Query Language):结构化查询语言
• Sql是执行在客户端(windows在命令行下执行,linux在终端执行)下或者通过java代码执行在JDBC
SQL语句规范
1、以;(分号)结尾
2、关键字之间有空格 通常一个空格 但是有多个也没问题
3、sql语句中可以添加换行
4、SQL 不区分大小写
表相关 SQL
• 表:是数据库中的数据组成的单位,类似于 Java 中的类,每个字段都有对应的数据类型
创建表的原理:
• 在客户端中写完创建表的 SQL 语句后客户端会把 SQL 语句交给 DBMS(MySQL)
• DBMS(MySQL) 解析后会在数据库中创建语句中的表和表中字段
表的引擎:
• InnoDB:支持数据库的高级处理包括事务外键等。(表默认的引擎就是 InnoDB)
• Myisam:只支持数据的基本存储
1、查看所有数据库的命令
例:mysql> show databases;2、创建数据库
格式: create database 数据库名称;
例:mysql> create database users;3、查看单个数据库的详情
格式:show create database 数据库名称;
例:mysql> show create database users;4、删除数据库
格式:drop database 数据库名称;
例:mysql> drop database users;5、使用数据库
格式:use 数据库名称;
例:mysql> use users;6、查看当前数据库下所有表
例:mysql> show tables;7、查看表中内容
格式:select * from 表名称;
select * from 数据库名称 表名称;
8、创建表
格式:create table 表名称 (字段1,字段2,字段3);
例:mysql> create table student (id int,name varchar(20));9、查看表属性
格式:show create table 表名称;
例:mysql> show create table student;10、创建表,指定引擎和编码
格式:create table 表名称 (字段) engine=引擎类型 charest=编码类型;
例:mysql> create table cat (id int,name varchar(20)) engine=innodb charset=utf8;11、修改表名称
格式: rename table 旧表名 to 新表名;
例:mysql> rename table cat to dog;12、删除表
格式:drop table dog;
例:mysql> drop table dog;13、给表添加新列
格式:alter table 表名称 add 列名 类型;
例:mysql> alter table student add age int;14、删除列
格式:alter table 表名称 drop 列名;
例:mysql> alter table student drop age;15、修改列的名称和类型
格式:alter table 表名称 change 旧列名 新列名 类型;
例:mysql> alter table student change id qq char;16、插入数据
格式:insert into 表名 values (字段1),(字段2)
例:mysql> insert into student values(1,'毛巾'),(2,'香皂');17、指定数据插入
格式:insert into 表名 (列名1,列名2)values('数据1','数据2');
例:mysql> insert into student(id,name) values(3,'zs');18、修改单条数据
格式:update 表名称 set 字段1='新数据1' where 字段1='数据1';
例:mysql> update student set id=4 where id=1;19、删除数据
格式:delete from 表名称 where 列名='数据';
例:mysql> delete from student where id='3';20、查询数据
格式:select 列名 from 表名 where 列名=‘数据’
例:mysql> select name from student where id=2;