MySQL讲解基本知识.ppt
MySQL基础知识,目录,层次模型,面向对象模型,网状模型,关系模型,数据库管理 系统常用的 数学模型,设计数据库,数据库(Database或DB)是存储、管理数据的容器。数据永远是数据库的核心。,目前关系数据库管理系统已占据主导地位 。MySQL和Microsoft SQL Server2000也是基于关系模型的。它的主要特征是使用关系来表示实体以及实体之间的联系。,E-R图设计的质量直接决定了关系数据库设计的质量。,实体不是某一个具体事物,而是某一种类别所有事物的统称。 属性通常用于表示实体的某种特征,也可以使用属性表示实体间关系的特征,实体,属性,属性,实体和属性,E-R图中的关系用于表示实体间存在的联系,在E-R图中,实体间的关系通常使用一条线段表示。 E-R图中实体间的关系是双向的。,关系,关系,关系,1为E-R图中的每个实体建立一张表,实体命名应唯一,实体型和联系的属性命名都应唯一。 2为每张表定义一个主键(如果需要,可以向表添加一个没有实际意义的字 段作为该表的主键) 3增加外键表示一对多关系。 4建立新表表示多对多关系。 5为字段选择合适的数据类型。 6定义约束条件(如果需要)。 7评价关系的质量,并进行必要的改进。,关系数据库设计,开源,MySQL源代码免费下载,简单,MySQL体积小,便于安装,MySQL性能足够与商业数据库媲美,功能强大,MySQL提供的功能足够与商业数据库媲美,性能优越,MySQL数据库的优势,MySQL数据库的优势,性能高效,MySQL是一个单进程多线程、支持多用户、基于客户机/服务器(Client/Server简称C/S)的关系数据库管理系统,跨平台支持,支持多用户,开源,简单易用,MySQL 为关系型数据库(Relational Database Management System), 这种所谓的关系型可以理解为表格的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格:,MySQL的相关概念介绍,表头(header): 每一列的名称; 列(row): 具有相同数据类型的数据的集合; 行(col): 每一行用来描述某个人/物的具体信息; 值(value): 行的具体信息, 每个值必须与该列的数据类型相同; 键(key): 表中用来识别某个特定的人物的方法, 键的值在当前列中具有唯一性。,MySQL的相关概念介绍,MySQL数据库的安装,ThemeGallery is a Design Digital Content 2. 在安装文件夹下找到 my-small.ini 配置文件, 将其重命名为 my.ini , 打开进行编辑, 在 client 与 mysqld 下均添加一行:default-character-set = gbk 3. 打开 Windows 环境变量设置, 新建变量名 MYSQL_HOME , 变量值为 MySQL 安装目录路径, 这里为 C:Program Filesmysql-5.1.69-win32 4. 在 环境变量 的 Path 变量中添加;%MYSQL_HOME%bin; 5. 安装 MySQL 服务, 打开Windows命令提示符, 执行命令:mysqld -install MySQL -defaults-file=my.ini提示Service successfully installed.表示成功;,Windows下MySQL的配置,与常规的脚本语言类似, MySQL 也具有一套对字符、单词以及特殊符号的使用规定, MySQL 通过执行 SQL 脚本来完成对数据库的操作, 该脚本由一条或多条MySQL语句(SQL语句 + 扩展语句)组成, 保存时脚本文件后缀名一般为 .sql。在控制台下, MySQL 客户端也可以对语句进行单句的执行而不用保存为.sql文件。 1、标识符 标识符用来命名一些对象, 如数据库、表、列、变量等, 以便在脚本中的其他地方引用。MySQL标识符命名规则稍微有点繁琐, 这里我们使用万能命名规则: 标识符由字母、数字或下划线(_)组成, 且第一个字符必须是字母或下划线。 对于标识符是否区分大小写取决于当前的操作系统, Windows下是不敏感的, 但对于大多数 linuxunix 系统来说, 这些标识符大小写是敏感的。,MySQL脚本的基本组成,2、关键字: MySQL的关键字众多, 这里不一一列出, 这些关键字有自己特定的含义, 尽量避免作为标识符。 3、语句: MySQL语句是组成MySQL脚本的基本单位, 每条语句能完成特定的操作, 他是由 SQL 标准语句 + MySQL 扩展语句组成。 4、函数: MySQL函数用来实现数据库操作的一些高级功能, 这些函数大致分为以下几类: 字符串函数、数学函数、日期时间函数、搜索函数、加密函数、信息函数。,MySQL脚本的基本组成,MySQL有三大类数据类型, 分别为数字、日期时间、字符串, 这三大类中又更细致的划分了许多子类型: 数字类型 整数: tinyint、smallint、mediumint、int、bigint 浮点数: float、double、real、decimal 日期和时间: date、time、datetime、timestamp、year 字符串类型 字符串: char、varchar 文本: tinytext、text、mediumtext、longtext 二进制(可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob,MySQL中的数据类型,MySQL服务的启动、停止与卸载 在 Windows 命令提示符下运行: 启动:net start MySQL 停止:net stop MySQL 卸载:sc delete MySQL,使用MySQL数据库,登录到MySQL 当 MySQL 服务已经运行时, 我们可以通过MySQL自带的客户端工具登录到MySQL数据库中, 首先打开命令提示符, 输入以下格式的命名: mysql -h 主机名 -u 用户名 -p -h :该命令用于指定客户端所要登录的MySQL主机名, 登录当前机器该参数可以省略; -u :所要登录的用户名; -p :告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。,使用MySQL数据库,以登录刚刚安装在本机的MySQL数据库为例, 在命令行下输入 mysql -u root -p 按回车确认, 如果安装正确且MySQL正在运行, 会得到以下响应: Enter password: 若密码存在, 输入密码登录, 不存在则直接按回车登录, 按照本文中的安装方法, 默认 root 账号是无密码的。登录成功后你将会看到 Welecome to the MySQL monitor. 的提示语。 然后命令提示符会一直以 mysql 加一个闪烁的光标等待命令的输入, 输入 exit 或 quit 退出登录。 注意: MySQL语句以分号(;)作为语句的结束, 若在语句结尾不添加分号时, 命令提示符会以 - 提示你继续输入(有个别特例, 但加分号是一定不会错的);,结构化查询语言SQL,4,结构化查询语言(Structured Query Language或简称为SQL)是一种应用最为广泛的关系数据库语言。,使用MySQL命令show databases;即可查看MySQL服务实例上所有的数据库 。,删除student数据库,使用SQL语句 drop database student;,结构化查询语言SQL,4,表是数据库中最为重要的数据库对象。,使用SQL语句“create table表名”即可创建一个数据库表。例如: use HB_HNEMP2014; set default_storage_engine=InnoDB; create table my_table( today datetime, name char(20) );/其中HB_HNEMP2014为数据库名,使用SQL语句:drop table table_name;即可删除名为table_name的表。删除表后,MySQL服务实例会自动删除该表结构定义文件(例如second_table.frm文件),以及数据、索引信息。该命令慎用!,SQL语句现实增、删、改、查,使用insert语句插入新记录。语法格式如下: insert into 表名 (字段列表) values (值列表) 例如:在数据库中增加一行:,Insert into HB_HNEMP2015.SysUser( Personnel_ID ,Code ,Cname ,Password ,PasswordFormat ,PasswordSalt ,IsActive ,Description) values(SM201523380090,hello,李明明,000000,0,null,1,武汉理工大学学生),SQL语句现实增、删、改、查,在insert语句中使用select子句可以将源表的查询结果添加到目标表中,语法格式如下: insert into 目标表名(字段列表1) select (字段列表2) from 源表 where 条件表达式 注意:字段列表1与字段列表2的字段个数必须相同,且对应字段的数据类型尽量保持一致。 如果源表与目标表的表结构完全相同,“(字段列表1)”可以省略。,SQL语句现实增、删、改、查,使用delete删除表记录。语法格式如下: delete from 表名 where 条件表达式 说明:如果没有指定where子句,那么该表的所有记录都将被删除,但表结构依然存在。 例如:在数据库中删除一行信息:,delete from SysUser where Personnel_ID=SM201523380090,SQL语句现实增、删、改、查,使用update更改表记录。语法格式如下: update 表名 set 字段名1=值1,字段名2=值2,. ,字段名n=值n where 条件表达式 where子句指定了表中的哪些记录需要修改。若省略了where子句,则表示修改表中的所有记录。 set子句指定了要修改的字段以及该字段修改后的值。 例如:在数据库中修改信息:,Update SysUser set Cname=王明明 WHERE Personnel_ID=SM201523380090,使用select语句查询表记录,语法格式如下: select 字段列表 from 数据源 where条件表达式 group by 分组字段 having条件表达式 order by 排序字段 asc | desc WHERE语句在GROUP BY语句之前;SQL会在分组之前计算WHERE语句, HAVING语句在GROUP BY语句之后;SQL会在分组之后计算HAVING语句,1,2,3,使用谓词限制记录的行数,使用select子句指定字段列表,使用from子句指定数据源,4,多表连接,SQL语句现实增、删、改、查,select语句的查询结果集的排序由数据库系统动态确定,往往是无序的,order by子句用于对结果集排序。在select语句中添加order by子句,就可以使结果集中的记录按照一个或多个字段的值进行排序,排序的方向可以是升序(asc)或降序(desc)。order by子句的语法格式如下。 order by 字段名1 asc|desc ,字段名n asc|desc ,SQL语句现实增、删、改、查,SQL语句现实增、删、改、查实例,例1:在数据库中查询表中一行所有信息: 例2:在数据库中查询某些信息: 例3:查询一共有多少数据:,SELECT * FROM HB_HNEMP2015.SysUser WHERE Cname=王明明,SELECT Personnel_ID ,Code ,Cname ,Password FROM HB_HNEMP2015.SysUser limit 3,select COUNT(*)from SysUser,SQL语句现实增、删、改、查实例,例4:链接并查询两个表的列: 例5:按日期查询:,SELECT SysUser.Personnel_ID ,Code ,Cname ,Password FROM HB_HNEMP2015.SysUser,HB_HNEMP2015.SysUserRole where LENGTH(Code)=5 and SysUser.Personnel_ID=SysUserRole.Personnel_ID,select * from Incident where FindTime2015-04-22 00:00:00.000 and FindTime<2015-05-18 00:00:00.000,SQL语句现实增、删、改、查实例,例6:在数据库中查找表中密码为jt开头的用户信息: 例7:将表中信息降序排列:,select Personnel_ID ,Code ,Cname ,Password from SysUser where Password=123456 and Code like jt%,select*from SysUser order by Personnel_ID desc,group by子句将查询结果按照某个字段(或多个字段)进行分组(字段值相同的记录作为一个分组。 group by子句通常与聚合函数一起使用,语法格式如下: group by 字段列表 having条件表达式 with rollup group_concat()函数的功能是将集合中的字符串连接起来,此时group_concat()函数的功能与字符串连接函数concat()的功能相似。,1,2,3,group by子句与having子句,group by子句与聚合函数,group by子句与group_concat()函数,4,group by子句与with roll up选项,使用group by子句对记录分组统计,SQL语句现实增、删、改、查实例,例8:学会用GROUP BY 和having: char_length()可以计算中文长度,而length()计算的是普通字符的长度,select SysUser.Personnel_ID ,Code ,Cname from SysUser ,SysUserRole where Code like x% and Password=123456 and SysUser.Personnel_ID=SysUserRole.Personnel_ID Group by SysUser.Personnel_ID ,Code ,Cname Having CHAR_LENGTH(Cname)<3 order by SysUser.Personnel_ID desc,SQL语句现实增、删、改、查实例,例9:查询表中密码最长的用户:,select SysUser.Personnel_ID ,Code ,Cname ,MAX(length(Code) as length from SysUser ,SysUserRole where Code like x% and Password=123456 and SysUser.Personnel_ID=SysUserRole.Personnel_ID Group by SysUser.Personnel_ID ,Code ,Cname Having CHAR_LENGTH(Cname)<5 order by length DESC LIMIT 0, 1,SQL语句现实增、删、改、查实例,例10:SELECT的嵌套,选出表中密码长度大于牛娟的密码长度的用户: 例11:将table2表中的数据插入到table1表中,对于table1表中已经存在的table2表数据不再插入:,select Personnel_ID,Code,Cname from SysUser where length(Code)(Select length(Code)from SysUser where Cname=牛娟),insert into table1 select*from table2 where not exists (select table1.*from table1 where table1.ID=table2.ID) 前提是table1和table2中列数要一致,MySQL的应用,MySQL经常作为数据存储的容器与Java相联系,Java能提供TCP/IP、ODBC和JDBC等多种连接途径,能很便利的与数据库进行连接。 JDBC是一种Java API,用于执行SQL语句,它是由Java语言写的类、界面组成。,MySQL的应用,Dao层是JAVA中完成连接数据库修改删除添加等的实现细节的,例如sql语句是怎么写的,怎么把对象放入数据库的。 DAO层的职责是纯粹的数据操作,如果是hibernate,那就只需要类似getHibernateTemplate().save,update,delete,这类的方法。,MySQL的应用,Java中与MySQL连接使用的语句: Class.forName(com.mysql.jdbc.Driver); Connection conn = null; conn=DriverManager.getConnection(jdbc:mysql:/localhost:3306/myDB?useUnicode=true /myDB为数据库;root为用户设定的用户名;“ ”为用户设定的密码,