51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 9832|回复: 10
打印 上一主题 下一主题

数据库学习路线

[复制链接]
  • TA的每日心情
    开心
    2015-10-25 22:01
  • 签到天数: 18 天

    连续签到: 1 天

    [LV.4]测试营长

    跳转到指定楼层
    1#
    发表于 2015-10-9 19:45:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    数据库原理--》数据库sql--》数据库应用---》数据库设计---》数据库服务器搭建与维护
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏2
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2015-11-8 22:02
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    4#
    发表于 2015-10-10 19:13:05 | 只看该作者
    这几本书不错,你可以看看,参考来源:酷瓜书单

    1.         《深入解析Oracle》        豆瓣评分:8.7
    只看头两章就已经超出预期,的确物有所值。

    2.         《Oracle DBA手记》        豆瓣评分:8
    盖国强、杨廷琨、熊军等几位牛人一起写的,不解释了。

    3.         《Oracle数据库性能优化》        豆瓣评分:7
    实战性很强。

    4.         《Oracle性能诊断艺术》        豆瓣评分:9
    书翻译的不错,是国内为数不多的针对sql性能诊断方面比较深入全面的书籍。

    5.         《构建Oracle高可用环境》        豆瓣评分:8
    淘宝首席DBA、Oracle ACE、ITpub版主陈吉平力作
    提问者评价
    谢谢!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-11-8 22:02
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    5#
    发表于 2015-10-10 19:27:30 | 只看该作者
    MySQL开发者SQL权威指南
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-11-8 22:02
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    6#
    发表于 2015-10-13 22:31:25 | 只看该作者
    JAVA JDBC 连接Mysql 代码。
    • package com.birds.chart.demo;  
    •   
    • import java.sql.DriverManager;  
    • import java.sql.ResultSet;  
    • import java.sql.SQLException;  
    • import java.util.LinkedList;  
    •   
    • public class DBTools {  
    •   
    •     private java.sql.Connection connection;  
    •     private java.sql.PreparedStatement preparedStatement;  
    •   
    •     public DBTools() {  
    •         try {  
    •             connection = DriverManager.getConnection(  
    •                     "jdbc:mysql://localhost:3306/goldtest", "root", "admin123");  
    •         } catch (SQLException e) {  
    •             e.printStackTrace();  
    •         }  
    •     }  
    •   
    •     static {  
    •         try {  
    •             Class.forName("com.mysql.jdbc.Driver");  
    •         } catch (Exception e) {  
    •             e.printStackTrace();  
    •         }  
    •     }  
    •   
    •     public void close() {  
    •         if (connection != null) {  
    •             try {  
    •                 connection.close();  
    •             } catch (SQLException e) {  
    •                 e.printStackTrace();  
    •             }  
    •         }  
    •     }  
    •   
    •     public ResultSet executeQuery(String sql, LinkedList<Object> params) {  
    •         try {  
    •             preparedStatement = connection.prepareStatement(sql);  
    •             if (params != null) {  
    •                 int i = 1;  
    •                 for (Object p : params) {  
    •                     preparedStatement.setObject(i++, p);  
    •                 }  
    •             }  
    •             return preparedStatement.executeQuery();  
    •         } catch (SQLException e) {  
    •             e.printStackTrace();  
    •         }  
    •         return null;  
    •     }  
    •   
    •     public static void main(String[] args) {  
    •         LinkedList<Object> params = new LinkedList<Object>();  
    •         params.add("HOME");  
    •         DBTools tool = new DBTools();  
    •         ResultSet rs = tool.executeQuery("SELECT * FROM users where Type= ? order by UpdateTime limit 100", params);  
    •         try {  
    •             System.err.println(rs.next());  
    •         } catch (SQLException e) {  
    •             e.printStackTrace();  
    •         }  
    •         tool.close();  
    •     }  
    • }  

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-11-8 22:02
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    7#
    发表于 2015-10-14 22:46:28 | 只看该作者
        mysql和oracle的区别

    一、并发性

    并发性是oltp数据库最重要的特性,但并发涉及到资源的获取、共享与锁定。

    mysql:
    mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。
    虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。

    oracle:
    oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与索引。所以oracle对并发性的支持要好很多。

    二、一致性
    oracle:
    oracle支持serializable的隔离级别,可以实现最高级别的读一致性。每个session提交后其他session才能看到提交的更改。oracle通过在undo表空间中构造多版本数据块来实现读一致性,
    每个session查询时,如果对应的数据块发生变化,oracle会在undo表空间中为这个session构造它查询时的旧的数据块。

    mysql:
    mysql没有类似oracle的构造多版本数据块的机制,只支持read commited的隔离级别。一个session读取数据时,其他session不能更改数据,但可以在表最后插入数据。
    session更新数据时,要加上排它锁,其他session无法访问数据。

    三、事务
    oracle很早就完全支持事务。

    mysql在innodb存储引擎的行级锁的情况下才支持事务。

    四、数据持久性
    oracle
    保证提交的数据均可恢复,因为oracle把提交的sql操作线写入了在线联机日志文件中,保持到了磁盘上,
    如果出现数据库或主机异常重启,重启后oracle可以考联机在线日志恢复客户提交的数据。
    mysql:
    默认提交sql语句,但如果更新过程中出现db或主机重启的问题,也许会丢失数据。

    五、提交方式
    oracle默认不自动提交,需要用户手动提交。
    mysql默认是自动提交。

    六、逻辑备份

    oracle逻辑备份时不锁定数据,且备份的数据是一致的。

    mysql逻辑备份时要锁定数据,才能保证备份的数据是一致的,影响业务正常的dml使用。

    七、热备份
    oracle有成熟的热备工具rman,热备时,不影响用户使用数据库。即使备份的数据库不一致,也可以在恢复时通过归档日志和联机重做日志进行一致的回复。
    mysql:
    myisam的引擎,用mysql自带的mysqlhostcopy热备时,需要给表加读锁,影响dml操作。
    innodb的引擎,它会备份innodb的表和索引,但是不会备份.frm文件。用ibbackup备份时,会有一个日志文件记录备份期间的数据变化,因此可以不用锁表,不影响其他用户使用数据库。但此工具是收费的。
    innobackup是结合ibbackup使用的一个脚本,他会协助对.frm文件的备份。

    八、sql语句的扩展和灵活性
    mysql对sql语句有很多非常实用而方便的扩展,比如limit功能,insert可以一次插入多行数据,select某些管理数据可以不加from。
    oracle在这方面感觉更加稳重传统一些。

    九、复制
    oracle:既有推或拉式的传统数据复制,也有dataguard的双机或多机容灾机制,主库出现问题是,可以自动切换备库到主库,但配置管理较复杂。
    mysql:复制服务器配置简单,但主库出问题时,丛库有可能丢失一定的数据。且需要手工切换丛库到主库。

    十、性能诊断
    oracle有各种成熟的性能诊断调优工具,能实现很多自动分析、诊断功能。比如awr、addm、sqltrace、tkproof等
    mysql的诊断调优方法较少,主要有慢查询日志。

    十一、权限与安全

    mysql的用户与主机有关,感觉没有什么意义,另外更容易被仿冒主机及ip有可乘之机。
    oracle的权限与安全概念比较传统,中规中矩。

    十二、分区表和分区索引
    oracle的分区表和分区索引功能很成熟,可以提高用户访问db的体验。
    mysql的分区表还不太成熟稳定。

    十三、管理工具
    oracle有多种成熟的命令行、图形界面、web管理工具,还有很多第三方的管理工具,管理极其方便高效。
    mysql管理工具较少,在linux下的管理工具的安装有时要安装额外的包(phpmyadmin, etc),有一定复杂性。




    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-10-25 22:01
  • 签到天数: 18 天

    连续签到: 1 天

    [LV.4]测试营长

    8#
     楼主| 发表于 2015-10-25 22:14:00 | 只看该作者
    学习文件001

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2015-10-26 09:11
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]测试排长

    9#
    发表于 2015-10-26 09:55:28 | 只看该作者
    我百度云盘有大把的资料 ,想要私聊我啊
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-11-8 22:02
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    10#
    发表于 2015-11-8 22:01:43 | 只看该作者
    好好学习,天天上上

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-11-8 22:02
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]测试连长

    11#
    发表于 2015-11-25 21:44:50 | 只看该作者
    #-----------2015年11月25日:关于id自动增长的代码:
    1:为了让这个表的id实现自动增长;需要建一个表, 添加序列,并实现触发器。
         1:建一个表:
              create table test
              (
                   id varchar2(6) primary key not null ,
                   name  varchar2(10)
              );
         2: 查看一下表中的数据
              select  *  from test;
         3: 创建序列:
             create sequence test_seq increment by 1 start with 1000 minvalue 1000 maxvalue 999999 nocache order;
         create sequence test_seq increment by 1 start with 1000 minvalue 1000 maxvalue 999999 cache 20 order;
                -- 注释:// cache n 断电会导致id不连续,  但是速度快,百度有对比
         4: 触发器实现:
              create or replace trigger test_trigger before insert on test for each row begin select
              test_seq.Nextval into: new.id from dual ;  end;
         5:  插入数据 :
              insert into test (name ) values ('Lily');
              insert into test (name ) values ('Lucy');
              insert into test (name ) values ('Tom');
         6: 删除表中一个数据:
              delete from test where name  = 'Tom';
              //删除所有的数据
              delete from test;
         7:删除这张表:
              drop table test;
         8: 删除表之后,还应该删除掉序列
              drop  sequence test_seq;

        9:       以下为查阅的内容:
    Oracle数据库创建表ID字段的自动递增

    将表t_uaer的字段ID设置为自增用序列sequence的方法来实现)
    ----创建表
    Create table t_user(
    Id number(6),userid varchar2(20),loginpassword varchar2(20),isdisable number(6)
    );
    ----创建序列
    create sequence user_seq

    increment by 1
    start with 1
    nomaxvalue
    nominvalue
    nocache
    ----创建触发器
    create or replace trigger tr_user
    before insert on t_user
    for each row
    begin
    select user_seq.nextval into :new.id from dual;
    end;
    ----测试
    insert into t_user(userid,loginpassword, isdisable)
    values('ffll','liudddyujj', 0);
    insert into t_user(userid,loginpassword, isdisable)
    values('dddd','zhang', 0)
    select * from t_user;
    就可以看出结果。
    对sequence说明:
    increment by :用于指定序列增量(默认值:1),如果指定的是正整数,则序列号自动递增,如果指定的是负数,则自动递减。
    start with :用于指定序列生成器生成的第一个序列号,当序列号顺序递增时默认值为序列号的最小值 当序列号顺序递减时默认值为序列号的最大值。
    Maxvalue:用于指定序列生成器可以生成的最大序列号(必须大于或等于start with,并且必须大于minvalue),默认为nomaxvalue。
    Minvalue:用于指定序列生成器可以生成的最小序列号(必须小于或等于starr with,并且必须小于maxvalue),默认值为nominvalue。
    Cycle:用于指定在达到序列的最大值或最小值之后是否继续生成序列号,默认为nocycle。
    Cache:用于指定在内存中可以预分配的序列号个数(默认值:20)。
    在sequence中应注意:
    1、 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。
    2、 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdownabort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。





         9.1:
              ( oracle 中不能设置自动增加,这个和其他数据库不一样,但是有 序列,这个是Oracle自己特有的东西,
    首先创建序列:

    create sequence seq;

    这就创建好了,然后 seq.nextval 就会返回一个值,不会重复的值,

    insert into tablename values(seq.nextval,'001','javabook');
    insert into tablename values(seq.nextval,'001','javabook');
    insert into tablename values(seq.nextval,'001','javabook');)      
    10  :
       
    1、关于主键:在建表时指定primary key字句即可:
    create table test(
      id  number(6) primary key,
      name varchar2(30)
    );
    如果是对于已经建好的表,想增加主键约束,则类似语法:
    alter table test add constraint pk_id primary key(id);
    其中add constraint 和 primary key是关键字,pk_id是主键名称,自定义的额,只要不重复即可。
                      
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-25 08:45 , Processed in 0.069506 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表