java自学之路-day18
数据库
数据库
概念
l 对于一串数据修改其中的一条数据
l 如果用io流就需要全盘读写 然后找到其中的一行 进行修改
l 或者使用数组进行修改
l 这样太复杂 效率慢 所以需要引用数据库
l 数据库本质是一个文件系统 可以看做是一个具有很好的处理数据能力的容器 和集合 数组 都一样
l 里面有严格的数据存储格式
l 数据库管理系统是用一个软件管理数据库
l 常见的数据库管理系统
- MYSQL 开源免费 瑞典的公司开发 sun公司收购 Oracle收购了sun MYSQL6.x之后收费 中小企业使用
- Oracle 收费的数据库 Oracle的公司的产品 大型公司使用
- DB2 IBM 收费 常用在银行系统中
- SQLServer Microsoft公司 收费 c# .net语言使用
- Sybase 已经淡出历史舞台 提供了一个专业数据建模工具PowerDesigner
- SQLite 嵌入式数据库 用在手机端
- Java常用 MYSQL 和Oracle,其他也可以用
数据库和管理系统
l MYSQL中可以有多个数据库 数据库是真正存储数据的地方
l 两者的关系
- 客户端面对数据库管理系统
- 数据库管理系统 操作数据库
- 数据库操作表
l MySQL数据库是一个服务器 存储数据库的仓库
l MySQL数据库中有很多数据库 MySql数据库是一个总称
l 要使用数据库就需要创建自己的数据库
l 而存储数据需要在数据库中建立各种数据表 数据是存储在表中的
数据库表
l 数据库中以表为单位存储数据
l 表似于java类
l 表中字段类似于类中属性
l 表中每一条数据类似于对象
l 图
表数据
l 用户表
l 每一个表表示每一个事物也就是一个类
l 每一列表示类中每一个属性
l 每一行也就是一条数据表示类中每一个对象
MySql数据库
安装MySql
- MYSQL6.x之后收费
- 双击5.5安装包 next
- 选择自定义安装
- 手动选择安装位置
- 两个安装路径
a) MySql Server
b) Server data files
- 点击next就可以安装了
- 安装完后 再次点击next
- 然后打上勾 Lanch。。。 运行配置向导
- 点击finish就可以了
- 开始配置向导
- 选择第一个 精细配置
- 选择第一个 开发者电脑
- 选择第一个 多功能功能数据库
- MySql引擎存储位置不要更改
- 选择第三个 自定义连接数上限
- 启用 tcp/ip网络协议 默认端口号
- 选择第三个默认字符集 更改为utf-8
- 安装windows服务叫MySql
导入环境变量
- 设置密码
- 点击Execute
- 安装完成
- 在windows服务中有 MySql服务 可以停止或开启服务 以及自动开启或手动开启
- 360网络连接中或出现MySql服务程序
- 命令行开启服务
MySql在系统服务中
MySql登录
l 命令行 敲入mysql –uroot –p123
l 账号和密码
l 也可以分开写账户和密码
l 登录成功
l 密码错误
l 账户错误
SQLYog
l 图形化开发工具
l 免安装
Sql语言
概述
l 数据库不能用java语言
l 与数据库交互 需要使用数据库的SQL语句
l 是数据库中的代码
l 是一种数据库查询和程序设计语言
l 用于存取数据查询,更新和管理关系数据库系统
l 创建数据库 创建数据表 向数据库添加数据信息都需要使用SQL语句
l 适用于所有数据库
SQL语句
l 数据定义语言 DDL
定义数据库对象 数据库 表,列
关键字 creat alter drop 创建 修改 删除
l 数据操作语言 DML
对数据库数据更新操作
关键字 insert delete update
l 数据控制语言DCL
用于分配访问权限和安全级别 还能创建用户
l 数据查询语言DQL
用来查询数据库中标的记录
关键字 select from where
SQL通用语法
l SQL语句可以单行或多行书写 以分号结尾
l 可使用空格或缩进来增强语句的可读性
l 不区分大小写
l 可以使用/**/来注释
l 数据类型
- int
- double
- varchar 可变字符
- date 日期类型 只有年月日没有时分秒
- 其他还有很多
数据库操作
l 创建数据库
create dataabase 数据库名;
create database 数据库名 character set字符集;
由于安装时以改为默认字符集 所以不用指定字符集了
l 显示数据库
show databases;
l 删除数据库
drop database 数据库名;
l 操作没有确认项
创建表操作
l 格式
l 约束
限制列名写什么数据
- 主键约束
- 非空约束
- 唯一约束
- 外键约束
SQL代码的保存
l 可以正常保存 Ctrl+s
l 文件后缀 .sql
l 文本文件
l 导入
Ctrl+o
创建表示例
l 图
主键约束
l 唯一 非空
l 不具备任何含义 只用来标识 生活中没有的 只有系统中有
l private key 列的后面加入这个关键字
l 在表的最后指定主键 primary key(id)
l AUTO_INCREMENT可以让主键自动增长 来确保唯一性和非空性
l 查看表
Show table 表名 查看所有表
Desc 表名 查看表结构
l 删除表
Drop表名
修改表结构
l 添加列
- Alter table 表名 add 列名 数据类型 约束
l 修改列
- 类型修改要注意
- Alter table 表名 modify 列名 数据类型 约束
l 修改列名
- Alter table 表名 change 旧列名 新列名 数据类型 约束
l 删除列
- Alter table 表名 drop 列名
l 修改表名
- Rename table 表名 to 新名
l 修改表字符集
Alter table 表名 character set 字符集
数据表添加数据
l Insert into 表名(列名1,列名2,列名3) values(值1,值2,值3)
- 注意列名表名问题 不要写错
- 对应问题 列和值个数要对应
- 没有字符串概念 字符都用单引号‘’
- 数字可以不加单引号
l Insert into 表名 (列名)values(值)
- 没有主键
- 列名不写主键 值也不用写主键
l Insert into 表名 values(值)
- 所有值都给出
- 不用写列名
- 但是值必须写够
l 批量写入
l Insert into 表名(列名1,列名2,列名3) values(值1,值2,值3),(值1,值2,值3),(值1,值2,值3),
- 批量写入数据
- 值写多个
l 如果在软件中把自动递增的id删除一个,再添加一个,id还是在删除的那个id基础上自动递增
更新数据
l Update 表名 set 列1=值1,列2=值2 where 条件
- 条件 id
- 条件的写法
等于= 小于 < 大于 > 小于等于<=
与或非 and or not
Id In(1,3,4,5) 包含
Id not in(1) 不包含
删除数据
l Delete from 表名 where 条件
- 不清空一条一条的删除 不清空AUTO_INCREMENT记录数 下一次增加还会在原来基础上继续递增
l Truncate table 表名 摧毁表
- 直接将表删除
- 重新建表
- AUTO_INCREMENT将置为0 从新开始
l 查询表中内容
l MySql编码方式是UTF-8 windows是GBk 所以会出现中文乱码
l 改变指定列的编码方式
l 其他
数据查询
数据表和测试数据准备
基本查询
l 查询定列的数据
Select 列名1,列名2 from 表名
l 查询所有列
Select * from表名
l 去掉重复记录
Select Disctinct 列名 from 表名
l 查询并临时重新命名列的名字
Select 列名 as ‘要修改的名字’ from 表名
后面加 as 修改后的名字
或者直接加修改后的名字
l 查询中直接运算
- Select 列名 运算符 数字 as‘’ from表名
- 加as 是因为运算后列名就改变了
条件查询
l 满足条件查询 不满足不操作
l 比较运算符
l 逻辑运算符
l 查询某一个名字的数据
l 大于
l And
l Between and
l Or
l In
l Like 模糊查询
- 开头有小米
- 开头结尾都有小米
- 查询几个字符 几个下划线就表示几个字符
l 查询不为空
排序查询
l 升序
Select * from 表名Order by 列名 asc
Asc可以不写
l 降序
Select * from 表名Order by 列名 desc
l 查询指定列 在进行降序排列
不能对中文进行排序 结果不可预知
聚合函数查询(纵向查询)
概念
l 之前都是横向查询
l 有时需要计算 需要纵向查询
l 这时需要使用聚合函数 将每一列进行计算然后返回一个单一的值
示例
l Count
l Sum
l Avg
l Max min
l 混合计算
l 分组查询
- 把重复内容进行分组 单独进行聚合计算
- 过滤pname
- 过滤pname
- 过滤sum
Having用于分组后过滤
分组后不能用Where
命令行乱码问题