数据库概述数据存储阶段 【1】人工管理阶段 缺点:数据无法共享,不能单独保存,数据存储量有限 【2】文件管理阶段(。txt。doc。xls) 优点:数据可以长期保存,可以存储大量的数据,使用简单 缺点:数据一致性差,数据查找修改不方便,数据冗余度可能比较大 【3】数据库管理阶段 优点:数据组织结构化降低了冗余度,提高了增删改查的效率,容易扩展,方便程序调用,做自动化处理 缺点:需要使用sql或者其他特定的语句,相对比较复杂数据库应用 融机构、游戏网站、购物网站、论坛网站。。。。。。 基础概念 数据:能够输入到计算机中并被识别处理的信息集合 数据结构:研究一个数据集合中数据之间关系的 数据库:按照数据结构,存储管理数据的仓库。数据库是在数据库管理系统管理和控制下,在一定介质上的数据集合。 数据库管理系统:管理数据库的软件,用于建立和维护数据库 数据库系统:由数据库和数据库管理系统,开发工具等组成的集合数据库分类和常见数据库关系型数据库和非关系型数据库 关系型:采用关系模型(二维表)来组织数据结构的数据库 非关系型:不采用关系模型组织数据结构的数据库开源数据库和非开源数据库 开源:MySQL、SQLite、MongoDB 非开源:Oracle、DB2、SQLServer常见的关系型数据库 MySQL、Oracle、SQLServer、DB2SQLite认识关系型数据库和MySQL 1。数据库结构(图库结构) 数据元素记录数据表数据库 2。数据库概念解析 数据表:存放数据的表格 字段:每个列,用来表示该列数据的含义 记录:每个行,表示一组完整的数据 3。MySQL特点 是开源数据库,使用C和C编写 能够工作在众多不同的平台上 提供了用于C、C、Python、Java、Perl、PHP、Ruby众多语言的API 存储结构优良,运行速度快 功能全面丰富 4。MySQL安装 Ubuntu安装MySQL服务 安装服务端:sudoaptgetinstallmysqlserver 安装客户端:sudoaptgetinstallmysqlclient 配置文件:etcmysql 命令集:usrbin 数据库存储目录:varlibmysql Windows安装MySQL 下载MySQL安装包(windows)https:dev。mysql。comdownloadsmysql mysqlinstaller5。7。。msi 安装教程去安装 5。启动和连接MySQL服务 服务端启动 查看MySQL状态:sudoetcinit。dmysqlstatus 启动服务:sudoetcinit。dmysqlstartstoprestart 客户端连接 命令格式 mysqlh主机地址u用户名p密码 mysqlhlocalhosturootp123456 本地连接可省略h选项:mysqlurootp123456 关闭连接 ctrlD exitSQL语句 什么是SQL 结构化查询语言(StructuredQueryLanguage),一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 SQL语句使用特点 SQL语言基本上独立于数据库本身各种不同的数据库对SQL语言的支持与标准存在着细微的不同每条命令必须以;结尾SQL命令关键字不区分字母大小写MySQL数据库操作数据库操作 1。查看已有库 showdatabases; 2。创建库(指定字符集) createdatabase库名〔charactersetutf8〕;e。g。创建stu数据库,编码为utf8createdatabasestucharactersetutf8;createdatabasestucharsetutf8; 3。查看创建库的语句(字符集) showcreatedatabase库名;e。g。查看stu创建方法showcreatedatabasestu; 4。查看当前所在库 selectdatabase(); 5。切换库 use库名;e。g。使用stu数据库usestu; 6。删除库 dropdatabase库名;e。g。删除test数据库dropdatabasetest; 7。库名的命名规则 数字、字母、下划线,但不能使用纯数字库名区分字母大小写不能使用特殊字符和mysql关键字数据表的管理表结构设计初步 【1】分析存储内容 【2】确定字段构成 【3】设计字段类型数据类型支持 数字类型: 整数类型(精确值)INTEGER,INT,SMALLINT,TINYINT,MEDIUMINT,BIGINT 定点类型(精确值)DECIMAL 浮点类型(近似值)FLOAT,DOUBLE 比特值类型BIT 对于精度比较高的东西,比如money,用decimal类型提高精度减少误差。列的声明语法是DECIMAL(M,D)。 M是数字的最大位数(精度)。其范围为1~65,M的默认值是10。 D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M。 比如DECIMAL(6,2)最多存6位数字,小数点后占2位,取值范围9999。99到9999。99。 比特值类型指0,1值表达2种情况,如真,假 字符串类型: CHAR和VARCHAR类型 BINARY和VARBINARY类型 BLOB和TEXT类型 ENUM类型和SET类型 char和varchar char:定长,效率高,一般用于固定长度的表单提交数据存储,默认1字符 varchar:不定长,效率偏低text和blob text用来存储非二进制文本 blob用来存储二进制字节串enum和set enum用来存储给出的一个值 set用来存储给出的值中一个或多个值表的基本操作 创建表(指定字符集) createtable表名( 字段名数据类型, 字段名数据类型, 。。。 字段名数据类型 ); 如果你想设置数字为无符号则加上unsigned如果你不想字段为NULL可以设置字段的属性为NOTNULL,在操作数据库时如果输入该字段的数据为NULL,就会报错。DEFAULT表示设置一个字段的默认值AUTOINCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。PRIMARYKEY关键字用于定义列为主键。主键的值不能重复。e。g。创建班级表createtableclass1(idintprimarykeyautoincrement,namevarchar(32)notnull,ageintnotnull,sexenum(w,m),scorefloatdefault0。0);e。g。创建兴趣班表createtableinterest(idintprimarykeyautoincrement,namevarchar(32)notnull,hobbyset(sing,dance,draw),coursecharnotnull,pricedecimal(6,2),commenttext); 查看数据表 showtables; 查看已有表的字符集 showcreatetable表名; 查看表结构 desc表名; 删除表 droptable表名;数据基本操作插入(insert)insertinto表名values(值1),(值2),。。。;insertinto表名(字段1,。。。)values(值1),。。。;e。g。insertintoclass1values(2,Baron,10,m,91),(3,Jame,9,m,90);查询(select)selectfrom表名〔where条件〕;select字段1,字段名2from表名〔where条件〕;e。g。selectfromclass1;selectname,agefromclass1;where子句 where子句在sql语句中扮演了重要角色,主要通过一定的运算条件进行数据的筛选 MySQL主要有以下几种运算符: 算术运算符 比较运算符 逻辑运算符 位运算符算数运算符 e。g。selectfromclass1whereage20;比较运算符 e。g。selectfromclass1whereage8;selectfromclass1wherebetween8and10;selectfromclass1whereagein(8,9);逻辑运算符 e。g。selectfromclass1wheresexmandage9;位运算符 更新表记录(update)update表名set字段1值1,字段2值2,。。。where条件;e。g。updateclass1setage11wherenameAbby;删除表记录(delete)deletefrom表名where条件;注意:delete语句后如果不加where条件,所有记录全部清空e。g。deletefromclass1wherenameAbby;表字段的操作(alter)语法:altertable表名执行动作;添加字段(add)altertable表名add字段名数据类型;altertable表名add字段名数据类型first;altertable表名add字段名数据类型after字段名;删除字段(drop)altertable表名drop字段名;修改数据类型(modify)altertable表名modify字段名新数据类型;修改字段名(change)altertable表名change旧字段名新字段名新数据类型;表重命名(rename)altertable表名rename新表名;e。g。altertableinterestadddateDateaftercourse;时间类型数据 时间和日期类型: DATE,DATETIME和TIMESTAMP类型 TIME类型 年份类型YEAR 时间格式 date:YYYYMMDD time:HH:MM:SS datetime:YYYYMMDDHH:MM:SS timestamp:YYYYMMDDHH:MM:SS 注意 1、datetime:不给值默认返回NULL值 2、timestamp:不给值默认返回系统当前时间日期时间函数now()返回服务器当前时间curdate()返回当前日期curtime()返回当前时间date(date)返回指定时间的日期time(date)返回指定时间的时间时间操作查找操作selectfromtimelogwhereDate20180702;selectfromtimelogwhereDate20180701andDate20180731;日期时间运算语法格式selectfrom表名where字段名运算符(时间interval时间间隔单位);时间间隔单位:1day2hour1minute2year3monthselectfromtimelogwhereshijian(now()interval1day);高级查询语句模糊查询和正则查询 LIKE用于在where子句中进行模糊查询,SQLLIKE子句中使用百分号字符来表示任意字符。 使用LIKE子句从数据表中读取数据的通用语法:SELECTfield1,field2,。。。fieldNFROMtablenameWHEREfield1LIKEcondition1e。g。mysqlselectfromclass1wherenamelikeA; mysql中对正则表达式的支持有限,只支持部分正则元字符SELECTfield1,field2,。。。fieldNFROMtablenameWHEREfield1REGEXPcondition1e。g。selectfromclass1wherenameregexpB。;排序 ORDERBY子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。 使用ORDERBY子句将查询数据排序后再返回数据:SELECTfield1,field2,。。。fieldNfromtablename1wherefield1ORDERBYfield1〔ASC〔DESC〕〕 默认情况ASC表示升序,DESC表示降序selectfromclass1wheresexmorderbyage;分页 LIMIT子句用于限制由SELECT语句返回的数据数量或者UPDATE,DELETE语句的操作数量 带有LIMIT子句的SELECT语句的基本语法如下:SELECTcolumn1,column2,columnNFROMtablenameWHEREfieldLIMIT〔num〕联合查询 UNION操作符用于连接两个以上的SELECT语句的结果组合到一个结果集合中。多个SELECT语句会删除重复的数据。 UNION操作符语法格式:SELECTexpression1,expression2,。。。expressionnFROMtables〔WHEREconditions〕UNION〔ALLDISTINCT〕SELECTexpression1,expression2,。。。expressionnFROMtables〔WHEREconditions〕; expression1,expression2,。。。expressionn:要检索的列。 tables:要检索的数据表。 WHEREconditions:可选,检索条件。 DISTINCT:可选,删除结果集中重复的数据。默认情况下UNION操作符已经删除了重复数据,所以DISTINCT修饰符对结果没啥影响。 ALL:可选,返回所有结果集,包含重复数据。 要求查询的字段必须相同selectfromclass1wheresexmUNIONALLselectfromclass1whereage9;多表查询 多个表数据可以联合查询,语法格式如下select字段1,字段2。。。from表1,表2。。。〔where条件〕e。g。selectclass1。name,class1。age,class1。sex,interest。hobbyfromclass1,interestwhereclass1。nameinterest。name;数据备份备份命令格式 mysqldumpu用户名p源库名。sql alldatabases备份所有库 库名备份单个库 B库1库2库3备份多个库 库名表1表2表3备份指定库的多张表恢复命令格式 mysqlurootp目标库名。sql 从所有库备份中恢复某一个库(onedatabase) mysqlurootponedatabase目标库名all。sql