福州网站建设吧,筑久建筑工程有限公司,网页制作入门基础教程,依安县建设网站数据库概述
数据库#xff08;DATABASE#xff0c;简称DB#xff09;
定义:是按照数据结构来组织、存储和管理数据的仓库.保存有组织的数据的容器(通常是一个文件或一组文件)
数据库管理系统(Database Management System,简称DBMS)
专门用于管理数据库的计算机系统软件;…数据库概述
数据库DATABASE简称DB
定义:是按照数据结构来组织、存储和管理数据的仓库.保存有组织的数据的容器(通常是一个文件或一组文件)
数据库管理系统(Database Management System,简称DBMS)
专门用于管理数据库的计算机系统软件; 能够为数据库提供数据的定义、建立、维护、查询和统计等操作功能并对数据完整性、安全性进行控制;
数据库应用系统(Database Application System)
使用数据库技术的系统基本上所有的信息系统都是数据库应用系统,它通常由软件、数据库和数据管理员组成。我们开发一款软件然后这款软件能使用到数据库(和数据库有关系有通信)那么这一款软件我们就可以称之为数据库应用系统。
数据库由来和发展
1.人工管理阶段
数据根本就不保存也没有专用的软件来进行管理往往是把数据和程序一起输入计算机进行计算。
2.文件系统阶段
有了外存磁盘的基础数据可以保存起来了同时可以被重复的利用。
缺点数据冗余、一致性不强、数据联系弱。
3. 层次数据库和网状数据库技术阶段
使用指针来表示数据之间的联v
4. 关系数据库技术阶段
经典的里程碑阶段。代表DBMS:Oracle、DB2、MySQL、SQL Server、SyBase等。
5. 后关系数据库技术阶段
关系型数据库存在数据模型性能拓展伸缩性的缺点出现了
ORDBMS面向对象数据库技术。
NoSQL 结构化数据库技术。
随着大数据的不断发展非关系型的数据库现在成了一个极其热门的新领域非关系数据库产品的发展非常迅速出色的NoSQL数据库
MongoDB、 Oracle的NoSQL、Hadoop的HBase、Lucene/Solr等。
常见的关系型数据库服务器DBMS SQL概述
SQL结构化查询语言Structured Query Language是关系数据库的标准语言它的特点是简单、灵活、功能强大。它具体包含以下6个部分 数据查询语言DQL 其语句也称为数据检索语句用以从表中获得数据确定数据怎样在应用程序给出。保留字SELECT是DQL也是所有SQL用得最多的动词其他DQL常用的保留字有WHEREORDER BYGROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用 数据操作语言DML 其语句包括动词INSERTUPDATE和DELETE。它们分别用于添加修改和删除表中的行。也称为动作查询语言。 事务处理语言TPLjava概念 它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTIONCOMMIT和ROLLBACK。 数据控制语言DCL 它的语句通过GRANT或REVOKE获得许可确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。 数据定义语言DDL 其语句包括动词CREATE和DROP。在数据库中创建新表或删除表CREAT TABLE 或 DROP TABLE为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分 指针控制语言CCLSql编程 它的语句像DECLARE CURSORFETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
表的概念Table
MySQL是一种关系型数据库管理系统而关系数据库管理系统中表示非常重要的概念。那么什么是表呢见下图 表的特点和常用术语
表具有固定的列和任意的行在数学上称为关系;
二维表是同类实体的各种属性的集合每个实体对应于表中的一行在关系中称为元组相当于通常的一条记录表中的列表示属性称为Field相当于通常记录中的一个数据项也叫列、字段
MySQL安装
安装请读者自行参考详细安装文档这里只提一些过程中需要注意的地方 编码选择UTF8 存储引擎选择多功能的 启动与连接MySQL
启动MySQL服务
必须先在操作系统中开启MySQL的服务,才能够使用MySQL软件可以通过如下的一些方式来启动 cmd--dos运行中输入 services.msc 打开服务界面找到MySQL服务 控制面板-管理工具-服务 Window7 开始 搜索 服务 dos命令的方式 i. 启动MySQL服务 net start MySQL ii. 关闭MySQL服务 net stop MySQL
提示 如果启动出现下面的提示请使用管理员权限打开cmd在尝试 连接MySQL
C:\Program Files\MySQL\MySQL Server 5.7\bin 在运行dos窗口或者命令提示符窗口输入如下的命令 mysql -uroot -padmin -hlocalhost -P3306 或者mysql -uroot -padmin -h127.0.0.1 -P3306 或者mysql -uroot -padmin -h192.168.1.100 -P3306 localhost 和 127.0.0.1 都代表的本机 ii. 如果数据库在本机并且端口是默认端口3306可以这样简写 mysql -uroot -padmin iii. 如果觉得上面这种直接暴露密码不安全可以这样写 mysql -uroot -p 弹出界面再输入密码就是***** 直接在开始 程序 MySQL 中点开MySQL的命令提示符窗口 然后输入密码即可 简单命令
show databases;显示所有数据库
use mysql选则一个数据库
show tables;显示所有的表
select * from user查看表里面所有的数据 MySQL图形化管理软件-Navicat Navicat的软件安装会在后续博文当中进行分享此处就不再赘述
MySQL数据库相关操作
数据库操作与存储引擎
数据库和数据对象
数据库存储数据库对象的容器。
数据库对象存储管理和使用数据的不同结构形式如表、视图、存储过程、函数、触发器、事件等。
数据库分两种
1. 系统数据库系统自带的数据库不能修改
information_schema:存储数据库对象信息如用户表信息列信息权限字符分区等信息。
performance_schema:存储数据库服务器性能参数信息。
mysql:存储数据库用户权限信息。
test:任何用户都可以使用的测试数据库。
2. 用户数据库用户自定义的数据库一般的一个项目一个用户数据库。
数据库操作
查看使用数据库
show databases; //查看数据库
use 数据库名; //使用数据库
创建数据库
create database 数据库名;
删除数据库
drop database 数据库名;
请谨慎使用以上命令否则请节哀顺变
注意 每一句后面都是有分号; 结束的
数据库存储引擎 MySQL中的数据用各种不同的技术存储在文件或者内存中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供不同的功能和能力。通过选择不同的技术你能够获得额外的速度或者功能从而改善你的应用的整体功能。 MyISAM拥有较高的插入查询速度但不支持事务不支持外键。
InnoDB支持事务支持外键支持行级锁定性能较低。 它提供了具有提交、回滚和崩溃恢复能力的事务安全。但对比MyISAM处理效率差且会占用更多 的磁盘空间以保留数据和索引 MySQL常用列类型[Mysql数据类型----Java数据类型]
常用对照 JAVA Java备注 MYSQL MYSQL备注 Int 短整型 int 短整型 long 长整型 bigint 长整型 float 单精度 float 单精度 double 双精度 double 双精度 bigdecimal[类] 金融数据 decimal 金融数据 String 字符串 char 不可变字符串 varchar 可变字符串 Boolean 布尔值 Bit 取值0和1 MySql日期类型
1. DATETIME(年月日时分秒)
2. DATE(年月日)
3. TIMESTAMP时间戳--范围19700101080001 - 203801191111407 基本不会用它,了解对于到Java中也是 Date时间
4. TIME存时间不带日期
5. YEAR只存年份
注意:在MySQL中日期时间值使用单引号引起来。 相当于Java中Date(主要)Calender。
二进制类型
为什么存放二进制
项目中可能会保存图片保存电影--使用二进制因为数据库中没有图片类型和电影类型,存的时候使用流 存进来读取也通过流来
开发中我们一般存储二进制文件保存路径。
BIT我们一般存储0或1存储是Java中的boolean/Boolean类型的值。
在mysql中没有boolean类型 有Bit
BLOB保存的时候根据自己的大小选择使用的类型.一般使用BLOB就够用了.
建议今后的项目,不要把大的文件存放到数据库如果文件太大会影响查询和修改的速度还有备份数据库的时候也很慢.
如果还是有这样的需求还是要保存图片保存电影怎么办
通过IO流写到磁盘上然后再数据库上面保存路径;
BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
存放图形、声音和影像二进制对象0-4GB。
大量文本的存储还可以使用TEXT文本
表的操作
创建表
语法
1. 先进入某一个数据库: use database_name;
2. 输入建表的SQL命令:{dos 图形化界面写命令} [ 图形化界面创建 ] CREATE TABLE 表名( 列名1 列的类型 [约束], 列名2 列的类型 [约束], .... 列名N 列的类型 约束 ); 注意:最后一行没有逗号
注意:不能使用MySQL中的关键字作为标识符.
比如:订单表(order),但是ORDER是SQL中排序的关键字.
解决方案:
方式1:使用反引号,把关键字引起来:ORDER.
方式2:开发中,习惯t_表名;
----------------------------------------------------------------------------------------------
需求: 在jdbcdemo数据库中,创建表student,用来存储学生的编号,名字,年龄. USE jdbcdemo; CREATE TABLE student ( id bigint(20) PRIMARY KEY AUTO_INCREMENT, name varchar(20) NOT NULL, age int(11) ) ENGINEInnoDB DEFAULT CHARSETutf8; 问题1
为什么字符串要设定这个长度呢
因为数据库中针对可变数据的存储需要压缩而不可变数据的存储不需要压缩
查看表结构和删除表
SHOW TABLES; 查看数据库中存在哪些表:
DESC table_name; 查看表结构
SHOW CREATE TABLE table_name; 查看表的详细定义(定义表的SQL语句)
DROP TABLE table_name; 删除表
表的约束
表的约束(针对于某一列):
1.非空约束(NK)NOT NULL不允许某列的内容为空。
2.设置列的默认值DEFAULT。
3.唯一约束(UK)UNIQUE在该表中该列的内容必须唯一。
4.主键约束PRIMARY KEY 非空且唯一。
5.主键自增长AUTO_INCREMENT从1开始步长为1。
6.外键约束FOREIGN KEYA表中的外键列.A表中的外键列的值必须参照于B表中的某一列(B表主键)。
-------------------------------------------------------------------------------------
主键设计
学生表 姓名 年龄 身份证 电话
1单列主键单列作为主键建议使用。
复合主键使用多列充当主键不建议。
2主键分为两种:
① 自然主键:使用有业务含义的列作为主键(不推荐使用);
② 代理主键:使用没有业务含义的列作为主键(推荐使用);
单表查询相关简单操作
简单查询
简单数据查询
语法 SELECT {*, column [alias],...} FROM table_name; 说明 SELECT 选择查询列表 FROM 提供数据源(表、视图或其他的数据源) 如果为 * 和创建表时的顺序一致。匹配所有的字段 可以自己调整顺序在select后边加上要查询的列名。 需求: 查询所有货品信息 查询所有货品的id,productName,salePrice 消除重复数据
需求: 查询商品的分类编号。
语法 SELECT DISTINCT 列名..
实现数学运算
对NUMBER型数据可以使用算数操作符创建表达式 - * /
对DATE型数据可以使用部分算数操作符创建表达式 -
运算符优先级 1. 乘法和除法的优先级高于加法和减法 2. 同级运算的顺序是从左到右 3. 表达式中使用括号可强行改变优先级的运算顺序 需求: 查询所有货品的id名称和批发价(批发价卖价*折扣) 查询所有货品的id名称和各进50个的成本价(成本costPrice)
查询所有货品的id名称各进50个并且每个运费1元的成本
设置列名别名
1、改变列的标题头
2、用于表示计算结果的含义
3、作为列的别名
4、如果别名中使用特殊字符或者是强制大小写敏感或有空格时都需加单引号---英文单词
需求:查询所有货品的id名称各进50个并且每个运费1元的成本(使用别名)
设置显示格式
为方便用户浏览查询的结果数据有时需要设置显示格式可以使用CONCAT函数来连接字符串。
需求:查询商品的名字和零售价。
格式xxx商品的零售价为xxx
SELECT CONCAT(productName,商品的零售价为,salePrice) AS productSalePrice FROM product;
过滤查询
比较运算符 语法 SELECT selectList FROM table_name WHERE 条件1 AND/OR 条件2; 需求 查询货品零售价为119的所有货品信息. 查询货品名为罗技G9X的所有货品信息. 查询货品名 不为 罗技G9X的所有货品信息. 查询分类编号不等于2的货品信息 查询货品名称,零售价小于等于200的货品 查询id货品名称批发价大于350的货品 思考使用where后面使用别名不行,总结select和where的执行顺序
注意字符串和日期要用单引号扩起来. 要让MySQL查询区分大小写可以 SELECT * FROM table_name WHERE BINARY productNameg9x SELECT * FROM table_name WHERE BINARY productNameG9X 逻辑运算 需求: 选择id货品名称批发价在300-400之间的货品 选择id货品名称分类编号为2,4的所有货品 选择id货品名词分类编号不为2的所有商品
选择id货品名称分类编号的货品零售价大于等于250或者是成本大于等于200
优先级规则 范围查询BetweenAnd
使用BETWEEN运算符显示某一值域范围的记录这个操作符最常见的使用在数字类型数据的范围上但对于字符类型数据和日期类型数据同样可用。
语法 SELECT selectList FROM table_name WHERE 列名 BETWEEN minvalue AND maxvalue闭区间。 需求: 选择id货品名称批发价在300-400之间的货品 选择id货品名称批发价不在300-400之间的货品
集合查询
使用IN运算符判断列的值是否在指定的集合中。
语法 SELECT selectList FROM table_name WHERE 列名 IN (值1值2....); 需求: 选择id货品名称分类编号为2,4的所有货品 选择id货品名称分类编号不为2,4的所有货品
空值查询
IS NULL:判断列的值是否为空。
语法WHERE 列名 IS NULL;
需求: 查询商品名为NULL的所有商品信息。
注意 列的值是 null 和空字符串不一样如果是空字符串 应该
模糊查询
使用LIKE运算符执行通配查询查询条件可包含文字字符或数字
%:通配符可表示零或多个任意的字符。
_:通配符可表示任意的一个字符。
通配符用来实现匹配部分值得特殊字符。
-----------------------------------------------------
需求: 查询id货品名称货品名称匹配%罗技M9_ 查询id货品名称分类编号,零售价大于等于200并且货品名称匹配%罗技M1__
正则表达式 结果排序
使用ORDER BY子句将结果的记录排序 ASC : 升序缺省--不写默认。 DESC: 降序。 ORDER BY 语句出现在SELECT语句的最后。 语法 SELECT selectList FROM table_name WHERE 条件 ORDER BY 列名1 [ASC/DESC],列名2 [ASC/DESC]...; 需求: 选择id货品名称分类编号,零售价并且按零售价降序排序 选择id货品名称分类编号,零售价先按分类编号排序,再按零售价排序
查询M系列并按照批发价排序(加上别名)
查询分类为2并按照批发价排序(加上别名)
注意别名不能使用引号括起来,否则不能排序。
分页查询
分页设计:
假分页(逻辑分页): 把数据全部查询出来,存在于内存中,翻页的时候,直接从内存中去截取.
真分页(物理分页): 每次翻页都去数据库中去查询数据.
假分页: 翻页比较快,但是第一次查询很慢,若数据过大,可能导致内存溢出.
真分页: 翻页比较慢,若数据过大,不会导致内存溢出.
语法 SELECT * FROM table_name LIMIT ?,?; SELECT * FROM table_name LIMIT beginIndex,pageSize; beginIndex (currentPage-1) * pageSize; 第一个?: 表示本页,开始索引(从0开始). 第二个?: 每页显示的条数 规定:每页显示3条数据. pageSize 3
第一页: SELECT * FROM product LIMIT 0, 3
第二页: SELECT * FROM product LIMIT 3, 3
第三页: SELECT * FROM product LIMIT 6, 3
第 N页: SELECT * FROM product LIMIT (N-1)*3, 3
聚集函数
定义聚集函数作用于一组数据并对一组数据返回一个值。 COUNT统计结果记录数 如果列的值为null 不会计算在内的 MAX 统计计算最大值 MIN 统计计算最小值 SUM 统计计算求和 AVG 统计计算平均值 如果列的值为null 不会计算在内的 需求: 查询所有商品平均零售价 查询商品总记录数(注意在Java中必须使用long接收)
查询分类为2的商品总数
查询商品的最小零售价最高零售价以及所有商品零售价总和
分组查询GROUP BY
可以使用GROUP BY 子句将表中的数据分成若干组再对分组之后的数据做统计计算一般使用聚集函数才使用GROUP BY.
语法格式 SELECT 聚集函数或者分组的列 FROM table_name WHERE 条件 GROUP BY 列名 HAVING 分组之后的条件 注意GROUP BY 后面的列名的值要有重复性分组才有意义; 使用HAVING字句对分组之后的结果作筛选; 不能在 WHERE 子句中使用函数注意; 可以在 HAVING 子句中使用函数; 需求: 查询每个商品分类编号和每个商品分类各自的平均零售价 查询每个商品分类编号和每个商品分类各自的商品总数。
查询每个商品分类编号和每个商品分类中零售价大于100的商品总数
查询零售价总和大于1500的商品分类编号以及总零售价和 写在最后:数据库是开发过程中十分重要的的一个模块无论是后续的基于框架进行开发还是单纯的数据库维护人员都需要对数据库进行良好的掌握。根据笔者本人的面试经验来说数据库在面试过程中被提问的概率十分大主要是围绕数据的相关操作以及多表查询缓存机制等等方面。因为文章篇幅有限本文只分享单表查询的相关方法以及MySQL数据库的安装。后续还会继续分享数据库高阶的相关文章。笔者认为学习数据库没有技巧只能多写多练增加熟练度这样才能在面试以及工作过程中达到得心应手。希望大家能够引起重视前期都是简单的后续的多表查询分库分表难度会逐渐增加希望大家能够持之以恒的学习。博主小厂中厂大厂均有面试经历每日分享全栈开发知识与大家一起进步。