编码

gb2312/gbk 国标
Unicode 国际编码集 utf-8 utf-16(子集)
latin1(ISO-8859-1)欧洲编码

设置(端口号,编码,优化)

修改安装目录的my.ini文件
保存后,重启mysql服务

数据库机制

数据持久化的一种方式:数据存储结构,快速支持增删改查
类型:

  • 单文件数据表 dbf csv文件
  • 单文件数据库 access sqlite
  • 网络型数据库 地址+端口 sqlserver oracle mysql
  • 文件型数据库(以json作为存储格式) mangodb
  • 内存数据库 redis

库表创建

数据库创建:设置编码 utf-8,utf-8mb4
(不为空):

  • id列 自动编号(自动加行标识,不需关注连续型),主键(行标识,不能重复,修改删除找行记录,主键索引),类型(int,必须数字)
  • 字符串 varchar 定长类型 ,text 变长类型
  • sex int类型 状态列
  • classid int 外键列 记录另一个表的主键值
    类型
  • int 数字 11位
  • varchar 字符串 指定长度
  • double 小数 11位+2位
  • date 日期 不推荐使用
  • blob 字节流
  • text 大文本 变长

数据库内容

1、库
2、表

  • 索引
    1.聚簇:用于int类型列处理,至少相当该表120%的附加空间
    2.非聚簇:不能“直.达”,可能链式地访问多级页表后,才能定位到数据页
  • 引擎
    1.InnoDB:数据库事务
    2.MyISAM:数据表
  • 外键(不推荐,强制关联外键)两个表列关系关联,保障数据完整,性能较差
  • 触发器:增删改时要自动处理的代码

3、函数:数据字段类型处理功能,转换和整理
4、过程:sql语句的合集
5、用户

  • 用户管理+权限
  • 用户的主机名加%才可以网络访问

6、视图:逻辑视图,查询结果集(使用时查询)

命令行处理

登录:

  • 查找mysql路径:path C:…\bin
  • mysql -uroot -p1234
  • 进入命令行模式 mysql>

查看:

  • 查询数据库:show databases;
  • 选择数据库:use 库名;
  • 查询数据表:show tables;

退出:exit;
数据库备份/还原

  • 备份:mysqldump -uroot -p1234 --databases 库名 > 文件路径
  • 还原:
    1.mysql -uroot -p1234 mydb <c:\a.sql
  • mysql>source c:\a.sql //先选择库

表操作(SQL)(小心数据库关键字,可以用``包起来,tab上面那个键)

  • DQL 数据查询语言 select
    查询项

     select * from 表名 //查询全部列select distinct 列名 from 表名 //查询指定列,重复项不显示,用于获取下拉列表select id,name from 表名 //查询指定列select name myname from 表名 //指定结果列别名select 表名.列名,...from 表名 //指定列所属表,多表查询时使用select sum(case name when 'asss' then 1 else 0 end) from class//判断name列是否为asss值,是=1,否=0,通过sum()获取统计结果//获取单列不同状态的统计
    

    查询条件

     条件:select * from 表名 where id=100 //基本条件查询select * from 表名 别名 where name='aa' and sex=1 //复合查询,表别名运算符:and,or,支持()包含优先处理,可以直接写入true= > < >= <=  通用判断like 模糊查询 select * from 表名 where 列 like '%aa_'//% 代表0个至多个未知字符 _ 代表1个未知字符in|not in 包含select * from 表名 where id in(1,3,5)between 范围查询select * from 表名 where id between 1 and 10is|is not     null判断是否为空select * from 表名 where name is not nullEXISTS 子查询是否有记录判断(返回boolean值)select * from 表名 where id=1 and EXISTS(select id from aaa)any任意查找年龄比15、16、 22、 21、17、 18、19中任意一个小的学生记录select * from student where age <any(15,16,22,21,17,18,19)all全部查找年龄比15、16、 22、 21、 17、 18、 19每个都大的学生记录select * from student where age >all(15, 16,22,21,17,18,19)别名(可加as):列别名:多表当中有同名的列,使结果集列名称改变,方便后期通过列名获取收据表别名:后期sql语句复杂导致表名大量出现,简化sql长度
    

    group by分组(一般与聚合函数组合使用)

     select * from 表名 group by name //获取多列的不重复项select sum(列名) from 表名 group by 列名
    

    having 判断统计项(一般和group by组合使用)

     获取组里一条记录的行select * from 表名 group by name having count(1)=1
    

    order by排序(asc顺序 desc逆序)

     先按name排序,name一样的再按id排序select * from 表名 order by name,id desc
    

    limit 查询部分行,换页

     select * from 表名 limit 2 只显示前两条记录select * from 表名 limit 1,3 从第2条开始显示3条记录(1:起始行 3:最大行数)//通过组合换页,只需要更改起始行
    

    多表关联

     表关系一对一(列额外扩展):主键关联(必然关联,不自动编号)--学生,学生保险 外键关联(非必然,自动编号)一对多(多方加外键,一件事务):业务单据--大润发收据(单据总表,明细表)多对一(多方加外键):一方对多方的数据补充(学生,班级)多对多(再创建关联表):商品,仓库(库存表)表结构:商品id,仓库id,库存数外联(表关系写在where里,不推荐使用)select u.*,c.name classname from user u,class c where u.classid=c.id内联inner join select * from user inner join class on user.classid=class.idselect * from user inner join class on user.classid=class.id inner join room on user.roomid=room.idselect * from user inner join class inner join room on user.classid=class.id and user.roomid=room.idleft join  right join(决定左右哪个表作为主表,主表不满足关联条件也显示)内联时小心2个以上表关系连用问题select * from user right join class on user.classid=class.idfull join(mysql不支持)union 行拼接,列类型数量必须一致select id,name from user union select id,name from class
    

    子查询:将另一个查询的结果作为当前查询的条件

     select * from class where id in(select id from user)子查询的结果列数量和类型必须符合sql语法delete from user where classid = (SELECT id from class GROUP BY name HAVING count(1)>1 LIMIT 1)     delete, update根据其它表的条件删除行
    

    逻辑视图:将子查询结果直接作为数据源,指定表名

     SELECT id from class GROUP BY name HAVING count(1)>1 LIMIT 1) a where a.id=1
    

    总语法:

     select [distinct] 列信息 from 表信息(+关联) where 条件 group by 列 having 聚合条件 order by 列名 limit 行号
    
  • DML 数据操作语言 insert,delete,update

     insert into 表名(列名,...)values (值...) //省略列:自动编号,可为空,有默认值insert into 表名 values(值...) //必须全部列,列顺序不能改变insert into 表名 select * from 另一个表 //要求列数量和列类型一致(表名后可加列)  delete from 表名 [where 简单条件] //删除update 表名 set 列名=值,...[where 简单条件]//不需要全部列,按需求指定列,必须加入where
    
  • DDL 数据声明语言 create,drop,alter

     CREATE TABLE `da` (`id` int(11) NOT NULL AUTO_INCREMENT,PRIMARY KEY (`id`)) ;DROP TABLE IF EXISTS 'class';//删除表,表结构破坏TRUNCATE TABLE 表名 //删减 删除全部表中数据alter table 表名 add(字段名 类型); alter table 表名 modify(字段名 类型); //修改属性alter table 表名 drop column(字段名 类型); CREATE INDEX 索引名称 ON 表名(列,...);
    
  • DCL 数据控制语言,设置或更改数据库用户或角色权限

  • TCL 事务控制语言 commit,rollback

     set @@autocommit=1;   默认=0,自动事务提交commit;rollback;set @@autocommit=0;
    
  • 聚合函数(多行记录处理)一般和group by组合使用,如果不使用,所有行是一组,只有一行记录

    —sum(列) 合计
    —count(1) 计数
    —min(列) 最小
    —max(列) 最大
    —AVG(列) 平均

  • 处理函数

     select CONCAT(id,name all from classselect * from class where LENGTH(CONCAT(id,name))> 3
    

    1.字符处理
    2.日期时间处理
    3.数字格式
    4.功能 rand() 随机数

视图

将sql查询语句的结果作为逻辑表处理(不能增删改)

create view 视图名称 as sql语句
drop view 视图名称

(表) 触发器

当自身表的行发生增删改时,将对其他表同步更新
时机

  • 之前
  • 之后

类型

  • 增 new
  • 删 old
  • 改 new old

实例
注意:1:new,old不是始终有的
2:不要2个表互相引用,死循环
3:触发器与增删改语句为同一事务,可能导致失败

在class表加入新增之后的触发器,class新增导致class1表同步新增
begin
insert into class1(name) values(new.name);
end

用途:1、数据备份 2、统计项预处理 3、销售进货时库存对应修改(状态对应改变)

存储过程/函数

概念:数据库内部执行的sql语句集合(减少网络通讯,加快统计速度,语句加入数据库权限控制)
语法

begin...end  开始结束
代码段没有() {}内容部分不能为空
if @count=100 or(||) @count=200 thenset @count=11;
else
else if @count=150 then
end if;case @count
when 1 then
set @count=11;
when 2 then
set @count=11;
else //必须加入
set @count=11;
end case;while count>0 do
set count=count-1;
end while;repeat 相当于do while循环
set count=count-1;
until count<0 符合条件则退出
end repeat;loop_name:loop   循环开始
leave loop_name;  判断条件成立则结束循环,好比java中的break
end loop;   循环结束
aa:loop    循环开始
set count=count+1;
if count=3 theniterate aa;     相当continue
end if;
set js = js+1;
if count=10 then
leave aa;    相当break
end if;
end loop;   循环结束

变量类型:变量名称要加前缀

  • 参数变量:

     [关键字]   名称   类型count  int 默认in,只能变量进入in age int out c varchar(32),只能变量输出inout tt int(11),变量进出
    
  • 过程变量

     declare a,b=200,c int; 定义declare a,b,c int default 0; 定义默认值0set a=100; 赋值
    
  • 会话变量

     set @bb=0; 定义和赋值有效范围:全部会话内有效
    
  • 全局变量

     不能定义,只能使用,就是系统变量set @@autocommit=1;
    

返回值:使用select输出 结果集,使用out型参数,在外部获取值
变量赋值

set @@autocommit=1;   set赋值
sql赋值,值只能有一个记录
select sum(goods_number) into count from goods where goods_id=1;
select sum(goods.goods_number),shop_price into count,price from goods
where goods_id=1;

游标:读取多行记录,分别处理(定义,打开,读取,关闭)

declare cur1 cursor for select goods_id from goods;  //sql
declare mark int default 0;   //定义状态变量
declare continue handler for not found set mark=1;   //处理性事件
open cur1;    //打开游标,数据查询
repeat set g_id=0;fetch cur1 into g_id;   //读取每记录,和定义的数量类型对应if g_id>0 thenset g_sum=g_num+g_id;end if;
until mark=1;    //如果没行则退出循环
end repeat;
close cur1;     //关闭游标

动态sql语句处理

1.游标的sql,改为查询临时视图(暂时不存在)
declare cur1 cursor for select goods_id from goods_view;   //视图
2.生成sql语句字符串
set @allsql=concat("create view goods_view as","select * from goods",sqlwhere);  //allsql必须为会话变量,sqlwhere是方法参数
3.执行sql字符串
drop view if exists goods_view;
prepare stmt from @allsql;
execute stmt;
deallocate prepare stmt;

子过程

call sub(); //子过程名称,可加参数
3
main过程
begin
declare count int;
set count=100;
set @aa=200;
call sub(count);
endsub过程 参数(count int)
begin
select @aa,count;
end

函数

参数:str1 varchar(32),str2 varchar(32),str3 varchar(32)
返回值:varchar(64)
begin
declare aa int;
select good_id into aa from goods where goods_id=100;
return concat(str1,str2,str3);
end

JDBC JAVA database connector

java.sql数据库处理包,索引从1开始
1、驱动处理,导入驱动jar包,注册

注册到java数据库驱动管理器,再加载过程
Class.forName("com.mysql.jdbc.Driver");

2、获取数据库连接

String connstr="jdbc:mysql://127.0.0.1:3306/mydb";
DriverManager.getConnection("", "root", "1234");
String connstr="jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf-8";  //解决数据库连接乱码

3、创建命令对象

执行sql语句的对象
Statement st = coon.createStatement();
预处理命令(先设置sql,再设置参数,再执行)
好处:避免sql字符串拼接,批量设置(?)值,将特殊类型(如blob)进行赋值
PreparedStatement st = coon.prepareStatement("insert into type(name) values(?)");st.setString(1, "我的值");st.executeUpdate();
数据库命令(处理过程),能赋值参数,能获取out类型参数
CallableStatement st = coon.prepareCall("call aa(?,?)");
//"select sumMoney(?)"    //执行函数
//aa(myid int,out myname varchar(64))  过程参数
st.setInt(1,3);   //设置参数
ResultSet rs = st.executeQuery();  //返回结果集,通过select
System.out.println(st.getString(2));  //获取参数  返回值 通过out指定-必须赋值

4、执行查询

ResultSet rs = st.executeQuery(sql) ;  //查询,得到结果集对象
int mark = st.executeUpdate(sql);    //增删改,得到修改变化的行数

5、处理结果

ResultSet rs = st.executeQuery("select id,name myname from type") ;while(rs.next()) {System.out.print(rs.getInt(1)+"    ");System.out.println(rs.getString("myname"));}rs.absoslute(1);  //移动游标到指定行rs.close();

6、meta结构

数据库结构
DatabaseMetaData meta = coon.getMetaData();
结果集结构(列名,表名,列数量,列类型...)
ResultSetMetaData meta = rs.getMetaData();for(int i=1;i<=meta.getColumnCount();i++) {System.out.println(mata.getColumnName(i));}

系统变量

  • @@autocommit 设置数据库自动事务(set @@autocommit = 1)

  • @@identity 最后一次新增的自动编号(select @@identity)

数据库事务
可优化增删改性能(减少提交次数 )

coon.setAutoCommit(false);   //更改提交方式try {...sql  //多条增删改语句,可能有部分语句错误coon.commit();  //无异常提交}catch (Exception e) {  coon.rollback();    //出现异常回滚}coon.setAutoCommit(true);  //还原设置

sql批量执行 Batch

 st = conn.createStatement();st.addBatch(sql1);st.addBatch(sql2);int [] re = st.executeBatch();

数据库管理三层

优点:

  • 1.开发难度降低,不需要全能人才
  • 2.开发速度快,并行开发
  • 3.维护方便,功能区分

UI 表现层 不直接与dao层处理
BLL 逻辑层,处理业务(调用关系,默认值,数据格式),进行抽象
DAO 数据层 只做sql、数据连接处理,pojo对象做参数
model 数据模板 POJO对象,三层之间通讯的格式

dbhelper数据库管理类

配置文件路径

  • 绝对路径 “c:/aa.properties”
  • 项目路径,相对路径 “aa.properties”
  • 包路径,静态不变数据,类路径 Type.class.getResource(“文件名”); //url路径

连接池,Properties,PreparedStatement,可变参数,查询结果反射对象,连接关闭问题,静态块

连接池

  • DBCP 不自动收回连接
    1.三个jar包 pool2,dbcp2,logging导入
    2.定义 BasicDataSource 类实例,设置属性
    3.获取连接

     BasicDataSource ds = new BasicDataSource();ds.setDriverClassName(driver);ds.setUsername(username);ds.setPassword(userpass);ds.setUrl(constr);ds.getConnection();Connection conn = ds.getConnection();conn.close(); //不是真正关闭连接,重写了
    
  • C3P0 自动收回

  • Druid 自动收回

优化查询

  • 查询列的数量要少
  • 设置列索引加速查询,hash,tree(100%非聚簇)
  • 数据表列的数量影响查询速度
  • 增删改时:数据库事务影响速度

分表:

  • 横向分表 分行 (历史数据存到另一个表)
  • 纵向分表 分列 功能加深列太多

分库:放不同位置(分布式存储雏形),数据并发太多,备份,马上淘汰
多服务器:分布式处理,MQ消息队列,路由,

0806 07 08 09 12上午数据库相关推荐

  1. 【iVX 初级工程师培训教程 10篇文拿证】07 08 新闻页制作

    目录 [iVX 初级工程师培训教程 10篇文拿证]01 了解 iVX 完成新年贺卡 [iVX 初级工程师培训教程 10篇文拿证]02 数值绑定及自适应网站制作 [iVX 初级工程师培训教程 10篇文拿 ...

  2. 机器之心 Synced 08月12日 20:59

     机器之心 Synced 08月12日 20:59 机器学习 人工智能 谷歌大脑 分类 :互联网 阅读:333 抢沙发 分享到: 0 分享到微信朋友圈 打开微信.点击 " 发现 &quo ...

  3. 12.2 数据库控制文件复制到ASM磁盘组

    1 描述 当前数据库t12csia1 参数文件与控制文件皆在文件系统上. 本文档目的是将数据库参数文件与数据库控制文件都放入asm中去. ASM实例有两个磁盘组DATA  和 RECOED02, 将文 ...

  4. Interview:算法岗位面试—10.12上午—上海某科技公司图像算法岗位(偏图像算法,互联网AI行业)技术面试考点之LoR逻辑回归的底层代码实现、特征图计算公式

    ML岗位面试:10.12上午-上海某科技公司图像算法岗位(偏图像算法,互联网AI行业)技术面试考点之LoR逻辑回归的底层代码实现.特征图计算公式 Interview:算法岗位面试-10.12上午-上海 ...

  5. HighNewTech:2019.08.09程序猿界大事件之【你好,我是鸿蒙OS】~【来了,老弟】—技术才是硬道理,开源方能建立新生态!

    High&NewTech:2019.08.09程序猿界大事件之[你好,我是鸿蒙OS]~[来了,老弟]-技术才是硬道理,开源方能建立新生态! 导读       2019华为开发者大会在今日举行, ...

  6. 三级数据库还是linux好,08年计算机三级数据库辅导:如何修改Linux下MySQL5.0的默认连接数...

    08年计算机三级数据库辅导:如何修改Linux下MySQL5.0的默认连接数 分类:计算机等级| 更新时间:2008-08-25| 来源:教育联展网 这段时间服务器崩溃2次,一直没有找到原因,今天看到 ...

  7. 2019年12月数据库流行度排行:前三甲高位收官 数据库重获增长趋势

    导读:2019年最终,DB-Engines 12月数据库流行度排行榜已经出炉,这是 2019 全年的收官积分,可以一览 2019 的数据库流行度变化格局了. 在12月的积分榜上,前10中有7个产品获得 ...

  8. 声音以模拟信号的形式存储在计算机中,08计算机1-2班《计算机基础》自学资料(5)...

    08计算机1-2班<计算机基础>自学资料(5) (13页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 UNIT 5一.多媒体 ...

  9. 信奥中的数学 相关资料汇总(2022.07.08)

    信奥中的数学 数论篇 相关资料汇总(2022.07.07) 信奥中的数学 数论篇 相关资料汇总(2022.07.07)_dllglvzhenfeng的博客-CSDN博客 信奥中的数学 组合篇 相关资料 ...

  10. 2021.08.09【普及组】模拟赛C组比赛总结

    文章目录 2021.08.09[普及组]模拟赛C组比赛总结 写在前面: T1 :[普及模拟]生产武器 题目大意: 正解: T2 :[普及模拟]城市连接 题目大意: 正解: T3 :[普及模拟]抢救文件 ...

最新文章

  1. R语言构建xgboost模型:使用xgboost构建泊松回归(poisson regression)模型
  2. dlopen failed: library “libopencv_java4.so“ not found 解决
  3. 如何在 ASP.NET Core 中使用 HttpClientFactory ?
  4. pythongui显示图片_opencv2.4.13+python2.7学习笔记--opencv中的Gui特性--图片:读图像,显示图像,保存图像...
  5. 计算机校本培训心得,个人校本培训心得体会3篇
  6. 用CSS美化你的滚动条
  7. Python爬虫高阶:微店混淆逆向解密
  8. NLPCC 2021会议的“面向智能辩论的论辩文本理解”评测比赛综述报告
  9. COMPATIBILITY参数需要是8.1.0.0.0或更大?
  10. 天勤数据结构代码——排序
  11. 鼠标点计算机再点网络也是选定,鼠标左键单击变双击,点一下变两下是什么原因?...
  12. java教务排课系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  13. Java -- JSP面试题及答案
  14. 微信公众平台、微信开放平台、微信商户平台的区别
  15. [Python从零到壹] 十七.可视化分析之Matplotlib、Pandas、Echarts入门万字详解
  16. 测试未来宝宝照片软件,未来宝宝照片合成器
  17. 丁磊向左,刘强东向右
  18. 交叉报表制作--Smartbi报表工具一步完成
  19. If only和Only if区别
  20. 螃蟹RTS5733DL固态硬盘,曲线救盘案例……

热门文章

  1. phpspider PHP 爬虫
  2. JAVA 事务不生效的常见场景和修改方案
  3. idea启动vue项目
  4. 小米手机qq不读取相册照片_小米手机qq保存的图片找不到
  5. CDA level 1 业务分析师 之 业务分析部分PART 5 多维数据透视分析(10%)
  6. vSphere ESXI 详细安装教程
  7. 嵌入式linux运行mbedtls,mbedTLS(PolarSSL)简单思路和函数笔记(Client端)
  8. 卡尔曼滤波(Kalman Filtering)——(7)扩展卡尔曼滤波(EKF)一阶滤波
  9. 杂项 Chrome浏览器截取长图
  10. 粒子群算法(6)-----几个适应度评价函数