初识MySQL
数据库
数据库(Database,简称DB),是存放数据的仓库。
概念:
长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据“仓库”
作用:
保存、管理数据
可以对文件中的数据进行新增、截取、更新、删除等操作
存储大量数据,存储结构便于管理和访问
可以有效保障数据一致性、完整性、降低数据冗余
可以满足应用的共享和安全方面的要求
故障恢复,防止数据被破坏
数据库总览
关系型数据库(SQL):关系数据库,是建立在关系模型基础上的数据库 ,关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。 如:
MySQL、Oracle、SQL Server、SQLite、DB2
非关系型数据库(NOSQL):
Redis、MongoDB
数据库管理系统(Database Management System)
数据管理软件,科学组织和存储数据、高效地获取和维护数据
MySQL简介
概念:是现流行的开源、免费的关系型数据库。
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。
特点:
1.免费、开源数据库
2.小巧、功能齐全
3.使用便捷
4.可运行于Windows或Linux操作系统
5.可适用于中小型甚至大型网站应用
MySQL运行机制
支持接口:不同的编程语言与SQL的交互
连接池:管理缓冲用户连接,线程处理等需要缓存的需求
SQL接口:接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL接口
解析器:SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。
主要功能:
a . 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的;例如将 select * from tablename where 1=1;分解为select、*、from、tablename、where 、1=1,并去解析。
如果在分解构成中遇到错误,那么就说明这个SQL语句是不合理的。
查询优化器:SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的是“选取-投影-联接”策略进行查询。
例: select uid,name from user where gender = 1;
a.先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤
b.先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤
将这两个查询条件联接起来生成最终查询结果。
缓存:
如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。
这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等
存储引擎:
存储引擎是MySql中具体的与文件打交道的子系统。也是Mysql最具有特色的一个地方。
Mysql的存储引擎是插件式的。它根据MySql AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫存储引擎)。
现在有很多种存储引擎,各个存储引擎的优势各不一样,最常用的MyISAM,InnoDB,BDB。
默认下MySql是使用MyISAM引擎,它查询速度快,有较好的索引优化和数据压缩技术。但是它不支持事务。
InnoDB支持事务,并且提供行级的锁定,应用也相当广泛。 Mysql也支持自己定制存储引擎,甚至一个库中不同的表使用不同的存储引擎,这些都是允许的
SQLyog管理工具
可手动操作、管理MySQL数据库的软件工具
特点易用、简洁、图形化
例:创建课程数据表(subject)并添加数据
分析:
(1)使用SQLyog连接数据库
文件–>使用当前设置的新连接
输入主机地址、密码、端口
//Linux环境中配置
mysql -hlocalhost -uroot -p//本机数据库
mysql -h192.168.29.30 -uroot -p//远程数据库
(2)创建MySchool数据库
root@–>创建数据库
(3)新建数据表( subject )
表–>创建表
(4)添加数据
myschool–>subject–>相应的列中输入数据
结构化查询语句SQL
结构化查询语句分类
命令行操作数据库
建表
显示表结构
desc 表名;
显示表创建语句
show create table 表名;
CREATE TABLE IF NOT EXISTS `grade`(
GradeID INT(4) PRIMARY KEY,
GradeName VARCHAR(10)
);
列类型
规定数据库中该列存放的数据类型
数值类型
字符串类型
日期和时间型数值类型
NULL值
理解为“没有值”或“未知值”
不要用NULL进行算术运算,结果仍为NULL
数据字段属性
UNSIGNED
无符号的
声明该数据列不允许负数
ZEROFILL
0填充的
不足位数的用0来填充,如 int(3),5则为 005
注意
使用zerofill会默认加unsigned
`id` tinyint(4) zerofill
id
将不能存负数,最大存储255
AUTO_INCREMENT
自动增长的,每添加一条数据,自动在上一个记录数上加1
通常用于设置主键,且为整数类型
可定义起始值和步长
注意
CREATE TABLE 表名 ( ... ) AUTO_INCREMENT = 100;
alter table 表名 auto_increment = x ;
如果x小于现在的值则修改无效
truncate 表名 ;
直接清空所有数据,下次插入数据时auto_increment字段会自动从0开始。 和delete from tbname不同的是delete只删除数据而不重置auto_incremnet.
#修改自动增长的步长(全局修改)
SET @@auto_increment_increment = 10;
NULL 和 NOT NULL
默认为NULL,即没有插入该列的数值
如果设置为NOT NULL,则该列必须有值
DEFAULT
默认的
用于设置默认值。例如,性别字段,默认为“男”,否则为“女”;若无指定该列的值,则默认为“男”的值
数据字段注释
CREATE TABLE [ IF NOT EXISTS ] `test` (
`id` int (11) UNSIGNED COMMENT '编码号'
)COMMENT='测试表';
例:使用语句新建student表
DROP TABLE IF EXISTS student;
CREATE TABLE IF NOT EXISTS `student`(
`StudentNo` INT(4) NOT NULL COMMENT'学号',
`LoginPwd` VARCHAR(20),
`Student` VARCHAR(20) COMMENT'学生姓名',
`Sex` TINYINT(1) COMMENT '性别,取值为0或1',
`GradeId`INT(11) COMMENT '年级编号',
`Phone`VARCHAR(50) NOT NULL DEFAULT'' COMMENT'联系电话,允许为空,即可选输入',
`Address`VARCHAR(255) NOT NULL DEFAULT'' COMMENT'地址,允许为空,即可选输入',
`BornDate`DATETIME COMMENT '出生时间',
`Email`VARCHAR(50) NOT NULL DEFAULT'' COMMENT'邮箱账号,允许为空,即可选输入',
`IdentityCard`VARCHAR(18) COMMENT'身份证号'
);
数据表的类型
表列类型设置
CREATE TABLE [ IF NOT EXISTS ] `表名` (
`字段名1` 列类型 [ 属性 ] [ 索引 ] [注释] ,
`字段名2` 列类型 [ 属性 ] [ 索引 ] [注释] ,
… …
`字段名n` 列类型 [ 属性 ] [ 索引 ] [注释]
) [ 表类型 ] [ 表字符集 ] [注释] ;
设置数据表的类型
CREATE TABLE 表名(
#省略一些代码
) ENGINE = MyISAM
CREATE TABLE 表名(
#省略一些代码
) ENGINE = InnoDB
注意
MySQL注释:
1、#…… 单行注释
2、/……/ 多行注释
MySQL的数据表的类型
MyISAM、InnoDB 、HEAP、BOB、CSV等
设置数据表字符集
表列类型设置
可为数据库、数据表、数据列设定不同的字符集
创建时通过命令来设置,如
CREATE TABLE 表名(
#省略一些代码
)CHARSET = utf8;
如无设定,则根据MySQL数据库配置文件my.ini
(Windows系统)中的参数设定
如:
character-set-sever = utf8
数据表的存储位置
MySQL数据表以文件方式存放在磁盘中
包括表文件、数据文件以及数据库的选项文件
位置:MySQL安装目录\data下存放数据表。目录名对应数据库名,该目录下文件名对应数据表
InnoDB类型数据表只有一个*.frm文件,数据文件为上一级目录的 ibdata1 文件
MyISAM类型数据表对应三个文件:
*.frm – 表结构定义文件
*.MYD – 数据文件
*.MYI – 索引文件
修改数据表
删除数据表
DROP TABLE [ IF EXISTS ] 表名;