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