• 1. MySQL数据库
  • 2. MySQL数据库数据库概述 数据库基础知识 SQL语言 MySQL数据库基础操作
  • 3. 第一部分:数据库概述 数据库基本概念 什么是MySQL数据库 MySQL基本操作
  • 4. 数据库基本概念数据(Data) 数据库(Database) 数据库管理系统(DBMS) 数据库系统(DBS)
  • 5. 数据数据(Data)的定义: 对客观事物的符号表示,如图形符号、数字、字母等,数据是数据库中存储的基本对象。 在日常生活中,人们直接用语言来描述事物;在计算机中,为了存储和处理这些事物,就要将事物的特征抽象出来组成一个记录来描述。。 数据的种类 文字、图形、图象、声音 数据的特点 数据与其语义是不可分的
  • 6. 数据库数据库(Database,简称DB)的定义: “按照数据结构来组织、存储和管理数据的仓库” J.Martin给数据库下了一个比较完整的定义:数据库是存储在一起的相关数据的集合,这些数据是结构化的,无有害的或不必要的冗余,并为多种应用服务
  • 7. 数据库的发展史人工管理阶段 人力手工整理存储数据 文件系统阶段 使用磁盘文件来存储数据 数据库系统阶段 关系型数据库 高级数据库阶段 “关系-对象”型数据库
  • 8. 数据库的类型纯文本数据库: 纯文本数据库是只用空格符、制表符和换行符来分割信息的文本文件。适用于小型应用,对于大中型应用来说它存在诸多限制: 只能顺序访问,不能进行随机访问。 查找数据和数据关系或多用户同时访问进行写操作时非常困难。 关系数据库: 由于纯文本数据库存在诸多局限,所以人们开始研究数据模型,设计各种类型的使用方便的数据库。在数据库的发展史上,最具影响的数据库模型有:层次模型、网状模型和关系模型。其中,关系模型是目前应用最广泛和最有发展前途的一种数据模型,其数据结构简单,当前主流的数据库系统几乎都采用关系模型。
  • 9. 数据库的优点数据按一定的数据模型组织、描述和储存 可以保存超过50,000,000条记录; 是目前市场上现有产品中运行速度最快的数据库系统易扩展,编写有关数据库应用程序 用户权限设置简单、有效。
  • 10. 数据库管理系统数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,是用于建立、使用和维护数据库,简称DBMS。 关系型数据库管理系统称为RDBMS,R指Relation DBMS的作用 它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
  • 11. 时下流行的DBMSOracle 应用广泛、功能强大,分布式数据库系统 “关系-对象”型数据库 MySQL 快捷、可靠 开源、免费、与PHP组成经典的LAMP组合 SQL Server 针对不同用户群体的五个特殊的版本 易用性好 DB2 应用于大型应用系统,具有较好的可伸缩性
  • 12. MySQL数据库什么是MySQL MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型 网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
  • 13. MySQl特征性能快捷、优化SQL语言 容易使用 多线程和可靠性 多用户支持 可移植性和开放源代码 遵循国际标准和国际化支持 为多种编程语言提供API
  • 14. MySQL5特性子查询 视图 存储过程 触发器 事务处理 热备份 二进制Bit类型 等等……
  • 15. MySQL不足不能直接处理XML数据 一些功能上支持的不够完善和成熟 不能提供任何OLAP(实时分析系统)功能 等等….
  • 16. 第二部分:数据库基础知识 数据库基础知识概述 SQL概述 SQL语言
  • 17. 数据库基础知识 数据库由一批数据构成的有序集合,这些数据被分门别类地存放在一些结构化的数据表(table)里,而数据表之间又往往存在交叉引用的关系,这种关系使数据库又被称为关系型数据库 档案柜=数据库 抽屉=表 文件=记录
  • 18. SQL概述什么是SQL? SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。
  • 19. SQL语法组成DML( Data Manipulation Language数据操作语言) ——查询、插入、删除和修改数据库中的数据; ——SELECT、INSERT、 UPDATE 、DELETE等; DCL( Data Control Language数据控制语言) ——用来控制存取许可、存取权限等; ——GRANT、REVOKE 等; DDL( Data Definition Language数据定义语言) ——用来建立数据库、数据库对象和定义其列 ——CREATE TABLE 、DROP TABLE、ALTER TABLE 等 功能函数 ——日期函数、数学函数、字符函数、系统函数等
  • 20. MySQL中使用SQL语言几点说明属于一个SQL语句,使用分号(;)结尾,否则mysql认为语句没有输入完。 箭头(->)代表SQL语句没有输入完 取消SQL语句使用(\c) SQL语句关键字和函数名不区分大小写(Linux区分,Windows不区分) 使用函数时,函数名和后面的括号之间不能有空格
  • 21. MySQL数据类型数据类型种类 数值列类型 字符串列类型 日期和时间列类型
  • 22. 常用数据类型分类备注和说明数据类型说明二进制数据类型存储非子符和文本的数据BLOB可用来存储图像文本数据类型字符数据包括任意字母、符号或数字字符的组合char固定长度的非 Unicode 字符数据varchar可变长度非 Unicode 数据text存储长文本信息日期和时间日期和时间在单引号内输入time时间date日期datetime 日期和时间数值型数据该数据仅包含数字,包括正数、负数以及浮点数int smallint整数float double浮点数货币数据类型用于财务数据decimal定点数Bit数据类型表示是/否的数据bit存储布尔数据类型
  • 23. 创建数据库建立数据库操作: 语法:create database 数据库名 叙述:创建一个具有指定名称的数据库。如果要创建的数据库已经存在,或者没有创建它的适当权限,则此语句失败。 例:建立一个student库。 mysql> create database student;
  • 24. 建立表操作: 语法:create table 表名( 列名1 列类型 [<列的完整性约束>], 列名2 列类型 [<列的完整性约束>], ... ... ); 叙 述:在当前数据库下新创建一个数据表。 列类型:表示该列的数据类型。 例: 建立一个表school,其由两列组成,第一列属性为非空,并做为主键,并自增 create table school( school_id int(10) not null auto_increment primary key, school_name varchar(20) );创建表
  • 25. 常见完整性约束: PRIMARY KEY 主码约束(主键) UNIQUE 唯一性约束 NOT NULL 非空值约束 AUTO_INCREMENT 用于整数列默认自增1 UNSIGNED 无符号整数 DEFAULT default_value 默认值约束 DEFAULT cur_timestamp 创建新记录时默认保存当前时间(仅适用timestamp数据列) ON UPDATE cur_timestamp 修改记录时默认保存当前时间(仅适用timestamp数据列) CHARACTER SET name 指定字符集(仅适用字符串)
  • 26. 主键与外键数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键(foreign key)建立起来的。 主键:帮助MySQL以最快的速度把一条特点的数据记录的位置确定下来。 主键必须是唯一的 主键应该是紧凑的,因此整数类型比较适合 外键:引用另外一个数据表的某条记录。 外键列类型尽可能与主键列类型保持一致 外键列应该加上NOT NULL
  • 27. 主表和从表1、当主表中没有对应的记录时,不能将记录添加到子表 ——成绩表中不能出现在学员信息表中不存在的学号; 2、不能更改主表中的值而导致子表中的记录孤立 ——把学员信息表中的学号改变了,学员成绩表中的学号也应当随之改变; 3、子表存在与主表对应的记录,不能从主表中删除该行 ——不能把有成绩的学员删除了 4、删除主表前,先删子表 ——先删学员成绩表、后删除学员信息表
  • 28. 选择主键的原则最少性 尽量选择单个键作为主键 稳定性 尽量选择数值更新少的列作为主键
  • 29. 显示表结构操作语法:describe 表名; desc 表名; 叙述:用于显示表的创建结构。
  • 30. 删除数据库或表操作删除表操作 语法:drop table [if exists] tab_name [,tab_name]... 叙述:从数据库中删除给定的表。如果给出if exists 子句,则删除不存在的表不会出错。 删除数据库操作 语法:drop database [if exists] db_name 叙述:删除给定的数据库。在删除一个数据库后,它就永远没有了,因此要特别小心。如果给出if exists 子句,则删除不存在的数据库不会出错。
  • 31. 更改表结构操作语法:alter table 表名 action; 说明:action 可以是如下语句: add 列名 建表语句 [first | after 列名] 可以为表添加一列,如果没指定first或者after,则在列尾添加一列,否则在指定列添加新列 add primary key (列名) 为表添加一个主键,如果主键已经存在,则出现错误 add foreign key(列名) references 表名(列名) 为表添加一个外键 alter 列名 set default 默认值 可以更改指定列默认值
  • 32. change 旧列名 新列名 <建表语句> [first | after 列名] 可以更改列类型和列名称,如果原列的名字和新列的名字相同 modify 列名 <建表语句> [first | after 列名] 和change的作用相同 drop 列名 //可以删除一列 drop primary key //可以删除主键 engine 类型名 //可以改变表类型 rename as 新表名 //可以将表名更改
  • 33. 举例1: 向people表中添加字段address2,类型为varchar,最大长度为100 alter table people add address2 varchar(100); 举例2: 将people表中的name列默认值改为100: alter table people alter name set default 100; 举例3: 向student表增加“入学时间”列,其数据类型为日期型。 alter table student add scome date; 注:无论基本表中原来是否已有数据,新增加的列一律为空值。 举例4: 将年龄的数据类型改为半字长整数。 alter table student modify sage smallint; 注:修改原有的列定义有可能会破坏已有数据
  • 34. MySQL运算符 算数运算符 比较运算符 逻辑运算符 位运算符
  • 35. 算数运算符
  • 36. 用字符串表示的数字在任何可能便于计算的地方都被自动地转换为数字。当执行转换时,MySQL遵循两个基本规则: 如果第一位是数字的字符串被用于一个算数运算中,那么它被转换为这个数字的值。 如果一个包含字符和数字混合的字符串不能被正确的转换为数字,那么它被转换成0。 字符串自动转换数字
  • 37. 比较运算符 比较运算符允许我们对表达式的左边和右边进行比较。一个比较运算符的结果总是1(真),0(假),或是为NULL(不能确定)。 比较运算符可以用于比较数字和字符串。数字作为浮点值比较,而字符串以不区分大小写的方式进行比较(除非使用特殊的BINARY二进制关键字)
  • 38. (本页无文本内容)
  • 39. 位运算符如下表所示: “~” 表示按位取反。 “^” 表示异或。
  • 40. 插入记录操作语法: 叙述: 如果表名后面没写字段名,则默认是向所有的字段添加值,另外字符串值应该用‘ ’或“ ”引号括起来 举例1:向people表中添加一条记录: insert into people(name,age) values(“zhangsan”,20);INSERT [INTO] <表名> [列名] VALUES <值列表>
  • 41. 插入多行数据INSERT STUDENTS (SName,SGrade,SSex) VALUES('测试女生1',75,0), ('测试女生2',77,0), ('测试女生3',83,0), (‘测试男生1',81,1), ('测试女生4',90,0), (‘测试男生2',94,1), ('测试女生5',51,0), (‘测试男生3',53,1);INSERT INTO <表名>(列名) VALUES(<列名值>), (<列名值>), (<列名值>) ……
  • 42. 更改记录操作语法: 叙述: where 子句是判断语句,用来设定条件,限制只更新匹配的行,如果不带where子句,则更新所有行数据。 举例: 将student表中的所有学生名称为"Alex"的改为"Tom": update student set sname="Tom" where sname="Alex";UPDATE <表名> SET <列名 = 更新值> [WHERE <更新条件>]
  • 43. 删除记录操作语法: 叙述:此语句删除表中的行,如果不带where子句,则删除整个表中的记录,但是表不被删除。 举例: 删除student表中的所有年龄小于18岁的记录: delete from student where sage<18;DELETE FROM <表名> [WHERE <删除条件>]
  • 44. 什么是查询?Application Logic客户程序查询请求查询结果集SQL SERVERA B C D E F GSELECT * FROM SALES查询产生一个虚拟表,看到的是表形式显示的结果,但结果并不真正存储,每次执行查询只是现从数据表中提取数据,并按照表的形式显示出来
  • 45. SQL语法SELECT [DISTINCT | DISTINCTROW | ALL] select_expression,... [FROM table_references [WHERE where_definition] [GROUP BY col_name,...] [HAVING where_definition] [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...] [LIMIT [offset,] rows] [PROCEDURE procedure_name] ]
  • 46. 查询记录操作from子句:指定查询数据的表 where子句:查询数据的过滤条件 group by子句:对匹配where子句的查询结果进行分组 having子句:对分组后的结果进行条件限制 order by子句:对查询结果结果进行排序,后面跟desc降序或asc升序(默认)。  limit子句:对查询的显示结果限制数目 procedure子句:查询存储过程返回的结果集数据
  • 47. 查询举例SELECT <列名> FROM <表名> [WHERE <查询条件表达式>] [ORDER BY <排序的列名>[ASC或DESC]] 列名称 SELECT SNo, SName, Sdept 表名 FROM Student过滤条件WHERE SSEX = 0排序条件ORDER BY SNo SELECT SNo,SName,Sdept FROM Students WHERE SSEX = 0 ORDER BY SNo
  • 48. 使用集函数SQL提供的统计函数称为集函数. 主要的集函数: 记数函数: count(列名) 计算元素的个数 求和函数: sum(列名) 对某一列的值求和,但属性必须是整型 计算平均值:avg(列名)对某一列的值计算平均值 求最大值: max(列名) 找出某一列的最大值 求最小值: min(列名) 找出某一列的最小值
  • 49. 在WHERE子句中使用谓词 : BETWEEN AND :在两数之间 NOT BETWEEN AND :不在两数之间 IN <值表> :是否在特定的集合里(枚举) NOT IN <值表> :与上面相反 LIKE :是否匹配于一个模式 IS NULL(为空的)或 IS NOT NULL(不为空的)REGEXP : 检查一个值是否匹配一个常规表达式。
  • 50. 多表查询—分类连接查询 同时涉及多个表的查询称为连接查询 用来连接两个表的条件称为连接条件 内连接(INNER JOIN) 外连接 ——左外联结 (LEFT JOIN) ——右外联结 (RIGHT JOIN) 外连接与普通连接的区别 普通连接操作只输出满足连接条件的元组 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出:
  • 51. 多表查询—内连接SELECT Students.SName, Sc.CourseID, Sc.Grade FROM Students,Sc WHERE Students.SNo = Sc.StudentID
  • 52. 多表查询—三表连接SELECT S.SName AS 姓名, CS.CName AS 课程, C.Grade AS 成绩 FROM Students AS S INNER JOIN Sc AS C ON (S.SCode = C.StudentID) INNER JOIN Course AS CS ON (CS.CourseID = C.CourseID)
  • 53. ScStudentsIDCourseIDGrade122300100100200297896776300381多表查询—左外连接StundentsSName梅超风陈玄风陆乘风曲灵风SNo1234查询结果SName梅超风陈玄风陈玄风陆乘风CourseIDGrade00100100200297896776陆乘风00381曲灵风NULLNULLSELECT S.SName,C.CourseID,C.Grade From Students AS S LEFT JOIN Sc AS C ON C.StudentID = S.SNo猜一猜:这样写,返回的查询结果是一样的吗? SELECT S.SName,C.CourseID,C.Grade From Sc AS C LEFT JOIN Students AS S ON C.StudentID = S.SNo
  • 54. 多表查询—右外连接SELECT Titles.Title_id, Titles.Title, Publishers.Pub_name FROM titles RIGHT OUTER JOIN Publishers ON Titles.Pub_id = Publishers.Pub_id
  • 55. 子查询: 将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为子查询。一个SELECT-FROM-WHERE语句称为一个查询块 例如: select sname from student where sno in (select studentid from sc where courseid=2);
  • 56. 复制表我们来创建一个副本:
  • 57. 复制表可以通过在SELECT查询中指定字段来限制出现在附表中的字段
  • 58. 复制表通过使用SELECT 语句创建已存在表的空副本,并且返回一个空结果集。