mySql入门-(一)
学了很多乱七杂八的东西,但是依然停留在前端,在工作中一直和后端交流,但是不太了解数据库是怎么回事,为了加强学习,准备学习一些关于数据库相关的东西。
说起数据库可能会有很多很多,SQLServer
、Oracle
、Sybase
等等等,还有就是要学习MySql
,说了这么多数据库这些都是关系型数据库
。既然有关系型数据库
自然也就会有非关系型数据
,比如Neo4j
、MongodDB
、Cloudant
等等等这些也就都属于非关系型
数据库,非关系型数据库
又被称为nosql
。
非关系型数据库与关系型数据库对比
# 非关系型数据库
性能NOSQL
是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL
层的解析,所以性能非常高。可扩展性同样shouce也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。
优势
nosql
数据库简单易部署,基本都是开源软件,不需要像使用oracle
那样花费大量成本购买使用,相比关系型数据库价格便宜。nosql
数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql
数据库。nosql
的存储格式是key
,value
形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型
。- 关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。
劣势
- 维护的工具和资料有限,因为
nosql
是属于新的技术,不能和关系型数据库10几年的技术同日而语。 - 不提供对
sql
的支持,如果不支持sql
这样的工业标准,将产生一定用户的学习和使用成本。 - 不提供关系型数据库对事物的处理。
# 关系型数据库
关系型数据库对于复杂查询可以用SQL
语句方便的在一个表以及多个表之间做非常复杂的数据查询。事务支持使得对于安全性能很高的数据访问要求得以实现。
优势
- 保持数据的一致性(事务处理)
- 由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处)
- 可以进行Join等复杂查询
劣势
- 大量数据的写入处理
- 为有数据更新的表做索引或表结构(schema)变更
- 字段不固定时应用
- 对简单查询需要快速返回结果的处理
对于这两类数据库,对方的优势就是自己的弱势,反过来也是如此。
MySql安装
在Windows
上安装Mysql
还是比较简单的,去Mysql
官网去现在zip
包就好了。下载完包之后把包解压到想要存放的存储盘内。
Mysql
有提供安装版本,下载好之后安装就能使用了,如果下载zip
包解压后需要进行配置,比较麻烦,网上也有很多教程。
然后打开刚刚解压的文件夹,在文件夹下面有一个my.ini
配置文件。
MySql
的配置与我们平时学习的语言不太一样,MySql
在配置过程中有两点需要注意:
- 配置中的
-
与_
是等价的 - 分段配置[******]隔离段
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=C:\\web\\mysql-8.0.11
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=C:\\web\\sqldata
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
根据以上内容更改配置就好了,并添加环境变量。这里安装就不详细介绍了。
MySql服务管理
MySQL
在服务中提供了一些对MySQL
管理的一些命令工具。
设置管理员密码
./bin/mysqladmin -u root password "root123";
mysqladmin
是执行很多关于MySQL
的一些管理的工作,同样也是在命令行里面去执行的。执行上面的命令,就会为root
用户创建一个密码。
启动服务
./bin/mysqld_safe &
# ./bin/mysqld &
启动服务的时候是使用mysqld_safe
这个命令的,实际上mysqld_safe
是一个脚本,他会管理mysqld
进程进行管理,一旦mysqld
因为异常导致程序崩溃的话mysqld_safe
会重启一下MySQL
服务。
停止服务
./bin/mysqladmin shutdown
# kill -9 $mysqld_pid // 重启服务
# kill $mysqld_pid
使用kill $mysqld_pid
命名会停止mysql服务,包括mysqld_safe
也会停止。
还有很多关于MySql
服务管理的命令,这里就不一一赘述了,单独出一篇文章对其进一步介绍。
MySql可视化工具
安装完数据库之后需要安装可视化工具,方便查看数据库内容,以及方便创建数据库和删除数据数据库等操作。
想要可视化MySQL
需要借助Nacicat
,网上有很多破解版可以随便下载一个。Nacicat使用手册。
下载安装好之后可以与数据库做连接,使用方法也很简单。
MySql语法规范
MySql
数据库属于关联型数据库,需要使用Sql
语句对表数据进行查询。一个数据库通常包含一个或多个表。每个表由一个名字标识。表包含带有数据的记录(行)。Sql
语句对大小写不敏感,但是还是建议所有的Sql
语句使用大写,查询条件与表名用小写,这样方便区分哪些是Sql
语句哪些是查询条件。
在MySql
系统要求在每条 SQL 命令的末端使用分号。分号是在数据库系统中分隔每条Sql
语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的语句。
MySql数据类型
数值类型
整数型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 字节 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
浮点型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
FLOAT | 4 字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度,浮点数值 |
DOUBLE | 8 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度,浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
设一个字段定义为 float(5,3),如果插入一个数 123.45678,实际数据库里存的是 123.457,但总个数还以实际为准,即 6 位。
日期和时间类型
注:每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
类型 | 大小 | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 字节 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 字节 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 字节 | 1901/2155 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
DATETIME | 8 字节 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 字节 | 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。
字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
char和varchar:
- char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此。
- char(n) 固定长度,char(4) 不管是存入几个字符,都将占用 4 个字节,varchar 是存入的实际字符数 +1 个字节(n<=255)或2个字节(n>255),所以 varchar(4),存入 3 个字符将占用 4 个字节。
- char 类型的字符串检索速度要比 varchar 类型的快。
varchar 和 text:
- varchar 可指定 n,text 不能指定,内部存储 varchar 是存入的实际字符数 +1 个字节(n<=255)或 2 个字节(n>255),text 是实际字符数 +2 个字节。
- text 类型不能有默认值。
- varchar 可直接创建索引,text 创建索引要指定前多少个字符。varchar 查询速度快于 text, 在都创建索引的情况下,text 的索引似乎不起作用。
总结
MySql
数据关联型数据库,使用Sql
语句对数据库进行操作。Sql
语句不区分大小写,无论是关联型数据库还是非关联型数据库都各有优缺点。
在使用MySql
创建表时,需要多注意数据格式,会给数据库查询带来一些性能的提升。
注:数据库中如果使用大量索引,虽然查询很快,但是会造成写入过慢的情况,使用的时候要稍加慎重。
mySql入门-(一)的更多相关文章
- 21分钟 MySQL 入门教程(转载!!!)
21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数 ...
- MySQL入门02-MySQL二进制版本快速部署
在上篇文章 MySQL入门01-MySQL源码安装 中,我们介绍了MySQL源码安装的方法. 源码安装虽然有着更加灵活和更加优化等诸多优势.但源码编译安装部署的过程相对复杂,而且整个过程所花费的时间很 ...
- MYSQL入门全套(第三部)
MYSQL入门全套(第一部) MYSQL入门全套(第二部) 索引简介 索引是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构.如果想按特定职员的姓来查找 ...
- MySQL入门(三)
写了两篇<MySQL入门>以后我发现,写书的人还是都挺有本事的,起码人家知道怎么编排自己想讲的知识点,我实在是不知道该先说那里后说哪里,那我就想到什么讲什么吧. 一 写SQL 其实我是不想 ...
- MySQL入门笔记
MySQL入门笔记 版本选择: 5.x.20 以上版本比较稳定 一.MySQL的三种安装方式: 安装MySQL的方式常见的有三种: · rpm包形式 · 通用二进制 ...
- MySQL入门转载
21分钟 MySQL 入门教程 http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html 目录 一.MySQL的相关概念介绍 二.Wi ...
- mysql 入门 基本命令
MYSQL入门学习之一:基本操作 1.登录数据库 www.2cto.com 命令:mysql -u username –p (mysql -h主机地址 -u用户名 -p用户密码) ...
- MySQL入门笔记(一)
一.数据类型 1. 整型 2. 浮点型 3. 字符型 4. 日期时间型 二.数据库操作 1. 创建库 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_nam ...
- MySQL入门(上)
1 课程回顾 自定义标签&编码实战 1)自定义标签步骤: 1.1 编写标签处理器类,继承SimpleTagSupport类,覆盖doTag方法 1.2 在WEB-INF目录下建立tld文件,在 ...
- 第二章 MySQL入门篇
第一章 MySQL入门篇 一.MySql简介 简言: 和SQL Server数据库相同,MySQl也是一个关系型数据库管理系统.由瑞典的MySQL AB公司开发,2008年被SUN公司收购,2009年 ...
随机推荐
- Flex编码随笔
1.CSS定义最好放在application里面. 2.数据源是数组数据时,最好把数组转换为ArrayCollection. 3.List.CheckBox等控件的HttpService Params ...
- Windows 10创意者更新ISO发布!官方下载
http://news.mydrivers.com/1/526/526719.htm 去年7月份,微软面向Windows 10推出了“周年更新”,让系统变得更加稳定好用.今天,Windows 10迎来 ...
- Python HTTP库requests中文页面乱码解决方案!
http://www.cnblogs.com/bitpeng/p/4748872.html Python中文乱码,是一个很大的坑,自己不知道在这里遇到多少问题了.还好通过自己不断的总结,现在遇到乱码的 ...
- 比较Fink, macports 跟 homebrew
http://www.myexception.cn/brew/412107.html 比较Fink, macports 和 homebrew 如果你有Linux/Unix背景,那么在Mac上你一定想安 ...
- 再次实践 MySQL chart - 每天5分钟玩转 Docker 容器技术(166)
学习了 chart 结构和模板的知识后,现在重新实践一次 MySQL chart,相信会有更多收获. chart 安装前的准备 作为准备工作,安装之前需要先清楚 chart 的使用方法.这些信息通常记 ...
- jsp 增删改查
使用Idea创建项目 1.新建web application项目 Idea 选择 Java Enterprise -> web application 2.新版本没有web-inf文件夹 解决方 ...
- Python中’__main__’模块的作用
Python不同于C/C++,程序执行并不需要主程序,如main(),而是文件自上而下的执行.但很多Python程序中都有 if __name__ == '__main__': statements ...
- 能否使用require('.json')的方式加载大量JSON文件?
Node.js中推崇非阻塞I/O,但是require一个模块时却是同步调用的,这会带来性能上的开销,但并不是每次require都很耗时,因为在require成功之后会缓存起来,在此加载时直接从缓存读取 ...
- eclipse中javadoc给项目生成api文档
步骤 1.打开java代码,编写JavaDoc 注释,只有按照java的规范编写注释,才能很好的生成API文档,javadoc注释与普通注释的区别为多一个*(星号).普通代码注释为/*XXX*/,而j ...
- idea 和 eclipse 常用快捷键汇总
序号 所属类别 快捷键名称 快键键方式 备注 所属平台 1 查询类 search everywhere double shift idea 2 全文搜索 ctrl + H 通用 3 打开资源 ...