精华内容
下载资源
问答
  • Java数据库开发之JDBC

    千人学习 2019-12-20 10:19:32
    本课程是Java数据库开发JDBC,课程内容包括:MySQL、JDBC 连接、处理语句、预处理语句、结果集和DAO设计模式。
  • 如何理解多用户的数据库开发

    万次阅读 2021-03-27 11:57:30
    今天周末,接到朋友电话,咨询一下:“多用户的数据库开发具体是指哪些?” 我听了,有些楞住,没有梳理过什么叫多用户的数据库开发,还是据实而言,工作生活没有接触过这个词语:“多用户的数据库开发”,根据我...

     

    今天周末,接到朋友电话,咨询一下:“多用户的数据库开发具体是指哪些?”

     

    我听了,有些楞住,没有梳理过什么叫多用户的数据库开发,还是据实而言,工作生活没有接触过这个词语:“多用户的数据库开发”,根据我的经验,之前有接触过商用数据库软件比如orace 12c里面有多租户体系,不过没有仔细研究过,查了一些资料:oracle 12c 多租户体系简介

     

    我简单和朋友介绍了下,数据库开发的一些基本信息:

     

    数据库开发一般分几个方向:1、工具类开发;2、存储产品开发;3、业务类sql开发

     

    以市场占有率排名第一的阿里云举例子,有以下几个方向:
    1,工具类的开发,比如阿里云的对数据库的自动化操作系统(做ddl,dml,恢复误删数据等),一键部署数据库实例等。

    2、存储产品的开发,比如阿里云的rds数据库,oc分布式数据库还有引进合作的tidb库。

    3、还有介入传统公司业务的写存储过程的存储函数的,也勉强算数据开发的范畴,像德哥一直在宣传普及的pgsql里面,就有大量这种工作。

    文章作者是csdnhsh,首发来自csdn博客。

     

    自己的思考:

    1、关于多用户,orace也好、sqlserver也好、mysql也好,不管是面对b端企业级用户还是面对c端个人用户来说,都是支持多个数据库用户的,每个用户的权限控制好了,就彼此数据隔离了。但是底层资源是共享的吧,比如cpu资源、磁盘io资源、网络带宽资源等等。

    2、从性能上来讲,用户资源隔离来说,从数据库层面来讲,一个实例是很难做到资源隔离的,像阿里云腾讯云的实例资源隔离,那都是实例之间的资源隔离,而不是实例内部之间用户隔离。

     

    一点点思考,一点点经验,没有能解决朋友的疑问,很惭愧,越是经历越多,越能感觉到自己的渺小,想起了一句话:【人的渺小,就像一粒尘埃,虚无缥缈。就像一滴水滴入大海,看不到荡漾。】,怎么办?只有谨慎谦虚思考,活到老学到老,保持好奇心和进取心。

    展开全文
  • Unity3D游戏开发之SQLite让数据库开发更简单

    万次阅读 多人点赞 2015-07-09 09:54:49
    在经历了一段时间的忙碌后,博主终于有时间来研究新的东西啦,今天博客向和大家一起交流的内容是在Unity3D游戏开发中使用SQLite进行数据库开发,坦白来讲,在我的技术体系中Web和数据库是相对薄弱的两个部分,因此...

    各位朋友大家好,欢迎大家关注我的博客,我是秦元培,我是博客地址是http://blog.csdn.net/qinyuanpei。在经历了一段时间的忙碌后,博主终于有时间来研究新的东西啦,今天博客向和大家一起交流的内容是在Unity3D游戏开发中使用SQLite进行数据库开发,坦白来讲,在我的技术体系中Web和数据库是相对薄弱的两个部分,因此正好这段时间项目需要和服务器、数据库进行交互,因此在接下来的文章中博主可能会更加倾向于讲解这方面的内容,希望大家能够喜欢啊!

    一、什么是SQLite?

    SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中,以嵌入式作为它的设计目标,它占用资源非常的低,因此适合在嵌入式设备如Android、Ruby on Rails等中使用。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟和C、C++、Ruby、Python、C#、PHP、Java等编程语言相结合。SQLite是一个以文件形式存在的关系型数据库,尽管无法实现分布式和横向扩展,可是作为一个轻量级的嵌入式数据库,它不需要系统提供服务支持,通过SDK直接操作文件避免了对数据库维护的相关事务,从这个角度来讲它是一个出色的数据库。

    二、为什么要选择SQLite

    好了,在了解了SQLite后,我们来了解下SQLite有哪些让我们心动的特性,或者说我们为什么要选择SQLite,因为在这个世界上我们有太多的数据库可以选择,诸如Oracle、MySQL、SQLServer、DB2、NoSQL、MongoDB等等:

    • ACID事务
    • 零配置 – 无需安装和管理配置
    • 储存在单一磁盘文件中的一个完整的数据库
    • 数据库文件可以在不同字节顺序的机器间自由的共享
    • 支持数据库大小至2TB
    • 足够小, 大致13万行C代码, 4.43M
    • 比一些流行的数据库在大部分普通数据库操作要快—SQLite读写效率如此之高,会使用其他数据库的理由是?
    • 简单, 轻松的API
    • 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定
    • 良好注释的源代码, 并且有着90%以上的测试覆盖率
    • 独立: 没有额外依赖
    • 源码完全的开源, 你可以用于任何用途, 包括出售它
    • 支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等

    三、Unity3D中的SQLite

    在Unity3D中使用SQLite,我们首先要明白这样一件事情,即我们这里的使用的SQLite并非是通常意义上的SQLite.NET,而是经过移植后的Mono.Data.Sqlite。因为Unity3D基于Mono,因此使用移植后的Mono.Data.Sqlite能够减少我们的项目在不同平台上出现各种各样的问题。在Unity3D中使用的SQLite以Mono.Data.Sqlite.dll即动态链接库的形式给出,因此我们需要将这个文件放置在项目目录下的Plugins文件夹中,此外我们需要System.Data.dll或者Mono.Data.dll这两个文件添加到Plugins目录中,因为我们需要的部分数据相关的API或者类都定义在这两个文件当中,这些文件可以从这里直接下载。

    PS:博主注意到在网上有使用Mono.Data.SQLiteClient.dll这个库实现在Unity3D操作SQLite数据库的相关文章,博主大概看了下,感觉和使用Mono.Data.Sqlite.dll这个库大同小异,大家喜欢哪个就用哪个吧!哈哈!博主在开源社区找到一个版本库,据说可以同时支持.NET和Mono,如果大家感兴趣欢迎大家去测试啊,哈哈!

    在正式开始写代码前,我们首先来回顾下通常情况下数据库读写的基本流程吧!

    • 定义数据库连接字符串(ConnectionString)完成数据库连接的构造,建立或者打开一个数据库。
    • 定义相关的SQL命令(Command)通过这些命令实现对数据库的增加、删除、更新、读取四种基本功能。
    • 在完成各种数据库操作后及时关闭数据库连接,解除对数据库的连接和引用。

    SQLite作为一款优秀的数据库,在为其编写数据库相关代码时同样遵循这样的流程,考虑到对数据库的增加、删除、更新、读取四种操作具有类似性和统一性,因此在动手写Unity3D脚本前,首先让我们来编写一个SQLite的辅助类SQLiteHelper.cs。该类代码定义如下:

    using UnityEngine;
    using System.Collections;
    using Mono.Data.Sqlite;
    using System;
    
    public class SQLiteHelper
    {
        /// <summary>
        /// 数据库连接定义
        /// </summary>
        private SqliteConnection dbConnection;
    
        /// <summary>
        /// SQL命令定义
        /// </summary>
        private SqliteCommand dbCommand;
    
        /// <summary>
        /// 数据读取定义
        /// </summary>
        private SqliteDataReader dataReader;
    
        /// <summary>
        /// 构造函数    
        /// </summary>
        /// <param name="connectionString">数据库连接字符串</param>
        public SQLiteHelper(string connectionString)
        {
            try{
                //构造数据库连接
                dbConnection=new SqliteConnection(connectionString);
                //打开数据库
                dbConnection.Open();
            }catch(Exception e)
            {
                Debug.Log(e.Message);
            }
        }
    
        /// <summary>
        /// 执行SQL命令
        /// </summary>
        /// <returns>The query.</returns>
        /// <param name="queryString">SQL命令字符串</param>
        public SqliteDataReader ExecuteQuery(string queryString)
        {
            dbCommand = dbConnection.CreateCommand();
            dbCommand.CommandText = queryString;
            dataReader = dbCommand.ExecuteReader();
            return dataReader;
        }
    
        /// <summary>
        /// 关闭数据库连接
        /// </summary>
        public void CloseConnection()
        {
            //销毁Command
            if(dbCommand != null){
                dbCommand.Cancel();
            }
            dbCommand = null;
    
            //销毁Reader
            if(dataReader != null){
                dataReader.Close();
            }
            dataReader = null;
    
            //销毁Connection
            if(dbConnection != null){
                dbConnection.Close();
            }
            dbConnection = null;
        }
    
        /// <summary>
        /// 读取整张数据表
        /// </summary>
        /// <returns>The full table.</returns>
        /// <param name="tableName">数据表名称</param>
        public SqliteDataReader ReadFullTable(string tableName)
        {
            string queryString = "SELECT * FROM " + tableName;
            return ExecuteQuery (queryString);
        }
    
        /// <summary>
        /// 向指定数据表中插入数据
        /// </summary>
        /// <returns>The values.</returns>
        /// <param name="tableName">数据表名称</param>
        /// <param name="values">插入的数值</param>
        public SqliteDataReader InsertValues(string tableName,string[] values)
        {
            //获取数据表中字段数目
            int fieldCount=ReadFullTable(tableName).FieldCount;
            //当插入的数据长度不等于字段数目时引发异常
            if(values.Length!=fieldCount){
                throw new SqliteException("values.Length!=fieldCount");
            }
    
            string queryString = "INSERT INTO " + tableName + " VALUES (" + values[0];
            for(int i=1; i<values.Length; i++)
            {
                queryString+=", " + values[i];
            }
            queryString += " )";
            return ExecuteQuery(queryString);
        }
    
        /// <summary>
        /// 更新指定数据表内的数据
        /// </summary>
        /// <returns>The values.</returns>
        /// <param name="tableName">数据表名称</param>
        /// <param name="colNames">字段名</param>
        /// <param name="colValues">字段名对应的数据</param>
        /// <param name="key">关键字</param>
        /// <param name="value">关键字对应的值</param>
        public SqliteDataReader UpdateValues(string tableName,string[] colNames,string[] colValues,string key,string operation,string value)
        {
            //当字段名称和字段数值不对应时引发异常
            if(colNames.Length!=colValues.Length) {
                throw new SqliteException("colNames.Length!=colValues.Length");
            }
    
            string queryString = "UPDATE " + tableName + " SET " + colNames[0] + "=" + colValues[0];
            for(int i=1; i<colValues.Length; i++) 
            {
                queryString+=", " + colNames[i] + "=" + colValues[i];
            }
            queryString += " WHERE " + key + operation + value;
            return ExecuteQuery(queryString);
        }
    
        /// <summary>
        /// 删除指定数据表内的数据
        /// </summary>
        /// <returns>The values.</returns>
        /// <param name="tableName">数据表名称</param>
        /// <param name="colNames">字段名</param>
        /// <param name="colValues">字段名对应的数据</param>
        public SqliteDataReader DeleteValuesOR(string tableName,string[] colNames,string[] operations,string[] colValues)
        {
            //当字段名称和字段数值不对应时引发异常
            if(colNames.Length!=colValues.Length || operations.Length!=colNames.Length || operations.Length!=colValues.Length) {
                throw new SqliteException("colNames.Length!=colValues.Length || operations.Length!=colNames.Length || operations.Length!=colValues.Length");
            }
    
            string queryString = "DELETE FROM " + tableName + " WHERE " + colNames[0] + operations[0] + colValues[0];
            for(int i=1; i<colValues.Length; i++) 
            {
                queryString+="OR " + colNames[i] + operations[0] + colValues[i];
            }
            return ExecuteQuery(queryString);
        }
    
        /// <summary>
        /// 删除指定数据表内的数据
        /// </summary>
        /// <returns>The values.</returns>
        /// <param name="tableName">数据表名称</param>
        /// <param name="colNames">字段名</param>
        /// <param name="colValues">字段名对应的数据</param>
        public SqliteDataReader DeleteValuesAND(string tableName,string[] colNames,string[] operations,string[] colValues)
        {
            //当字段名称和字段数值不对应时引发异常
            if(colNames.Length!=colValues.Length || operations.Length!=colNames.Length || operations.Length!=colValues.Length) {
                throw new SqliteException("colNames.Length!=colValues.Length || operations.Length!=colNames.Length || operations.Length!=colValues.Length");
            }
    
            string queryString = "DELETE FROM " + tableName + " WHERE " + colNames[0] + operations[0] + colValues[0];
            for(int i=1; i<colValues.Length; i++) 
            {
                queryString+=" AND " + colNames[i] + operations[i] + colValues[i];
            }
            return ExecuteQuery(queryString);
        }
    
        /// <summary>
        /// 创建数据表
        /// </summary> +
        /// <returns>The table.</returns>
        /// <param name="tableName">数据表名</param>
        /// <param name="colNames">字段名</param>
        /// <param name="colTypes">字段名类型</param>
        public SqliteDataReader CreateTable(string tableName,string[] colNames,string[] colTypes)
        {
            string queryString = "CREATE TABLE " + tableName + "( " + colNames [0] + " " + colTypes [0];
            for (int i=1; i<colNames.Length; i++) 
            {
                queryString+=", " + colNames[i] + " " + colTypes[i];
            }
            queryString+= "  ) ";
            return ExecuteQuery(queryString);
        }
    
        /// <summary>
        /// Reads the table.
        /// </summary>
        /// <returns>The table.</returns>
        /// <param name="tableName">Table name.</param>
        /// <param name="items">Items.</param>
        /// <param name="colNames">Col names.</param>
        /// <param name="operations">Operations.</param>
        /// <param name="colValues">Col values.</param>
        public SqliteDataReader ReadTable(string tableName,string[] items,string[] colNames,string[] operations, string[] colValues)
        {
            string queryString = "SELECT " + items [0];
            for (int i=1; i<items.Length; i++) 
            {
                queryString+=", " + items[i];
            }
            queryString += " FROM " + tableName + " WHERE " + colNames[0] + " " +  operations[0] + " " + colValues[0];
            for (int i=0; i<colNames.Length; i++) 
            {
                queryString+=" AND " + colNames[i] + " " + operations[i] + " " + colValues[0] + " ";
            }
            return ExecuteQuery(queryString);
        }
    }

    SQLiteHelper类主要实现了数据库、数据表的创建以及数据表中记录的增加、删除、更新、读取四种基本功能。该类最初由国外的Unity3D开发者发布在Unity3D官方论坛,后来经宣雨松使用C#进行重写,我在此基础上进行了完善,再此对两位大神的无私付出表示感谢。这里要说明的有三点:

    • 一、在Unity3D编辑器下生成数据库文件(.db)默认位于和Assets目录同级的位置,即项目的工程文件夹中。我们可以通过修改路径在改变数据库文件的存储位置,具体来讲:
      Windows平台:data source=Application.dataPath/数据库名称.db
      IOS平台:data source=Application.persistentDataPath/数据库名称.db
      Android平台:URL=file:Application.persistentDataPath/数据库名称.db(我想说Android平台就是个奇葩,搞什么特殊化嘛)

    • 二、确保Unity3D编辑器中的.NET版本和MonoDevelop中的.NET版本都为2.0版本,在Unity3D中打包导出的程序可能不会保留数据库文件,因此需要手动将数据库文件拷贝到相应的位置,当然更加合理的方案是将数据库文件存放到StreamingAssets文件夹下,然后在第一次加载游戏的时候将数据库文件复制到对应平台上的存放位置。

    • 三、在使用InsertValues方法时请参考SQLite中字段类型与C#中数据类型的对应关系,博主目前测试了int类型和string类型都没有什么问题,更多类型的数据请大家自行测试然后告诉博主测试的结果,如果大家有兴趣扩展这个辅助类的话可以自行去扩展哦,嘿嘿!

    好了,千呼万唤始出来的时候到了,下面我们以一个实例来完成今天的项目讲解,因为我们已经定义好了SQLite的辅助类,因此我们可以快速地编写出下面的脚本代码:

    using UnityEngine;
    using System.Collections;
    using System.IO;
    using Mono.Data.Sqlite;
    
    public class SQLiteDemo : MonoBehaviour 
    {
        /// <summary>
        /// SQLite数据库辅助类
        /// </summary>
        private SQLiteHelper sql;
    
        void Start () 
        {
            //创建名为sqlite4unity的数据库
            sql = new SQLiteHelper("data source=sqlite4unity.db");
    
            //创建名为table1的数据表
            sql.CreateTable("table1",new string[]{"ID","Name","Age","Email"},new string[]{"INTEGER","TEXT","INTEGER","TEXT"});
    
            //插入两条数据
            sql.InsertValues("table1",new string[]{"'1'","'张三'","'22'","'Zhang3@163.com'"});
            sql.InsertValues("table1",new string[]{"'2'","'李四'","'25'","'Li4@163.com'"});
    
            //更新数据,将Name="张三"的记录中的Name改为"Zhang3"
            sql.UpdateValues("table1", new string[]{"Name"}, new string[]{"'Zhang3'"}, "Name", "=", "'张三'");
    
            //插入3条数据
            sql.InsertValues("table1",new string[]{"3","'王五'","25","'Wang5@163.com'"});
            sql.InsertValues("table1",new string[]{"4","'王五'","26","'Wang5@163.com'"});
            sql.InsertValues("table1",new string[]{"5","'王五'","27","'Wang5@163.com'"});
    
            //删除Name="王五"且Age=26的记录,DeleteValuesOR方法类似
            sql.DeleteValuesAND("table1", new string[]{"Name","Age"}, new string[]{"=","="}, new string[]{"'王五'","'26'"});
    
            //读取整张表
            SqliteDataReader reader = sql.ReadFullTable ("table1");
            while(reader.Read()) 
            {
                //读取ID
                Debug.Log(reader.GetInt32(reader.GetOrdinal("ID")));
                //读取Name
                Debug.Log(reader.GetString(reader.GetOrdinal("Name")));
                //读取Age
                Debug.Log(reader.GetInt32(reader.GetOrdinal("Age")));
                //读取Email
                Debug.Log(reader.GetString(reader.GetOrdinal("Email")));
            }
    
            //读取数据表中Age>=25的所有记录的ID和Name
            reader = sql.ReadTable ("table1", new string[]{"ID","Name"}, new string[]{"Age"}, new string[]{">="}, new string[]{"'25'"});
            while(reader.Read()) 
            {
                //读取ID
                Debug.Log(reader.GetInt32(reader.GetOrdinal("ID")));
                //读取Name
                Debug.Log(reader.GetString(reader.GetOrdinal("Name")));
            }
    
            //自定义SQL,删除数据表中所有Name="王五"的记录
            sql.ExecuteQuery("DELETE FROM table1 WHERE NAME='王五'");
    
            //关闭数据库连接
            sql.CloseConnection();
        }
    }
    

    在上面的代码中我们是在Start方法中创建了数据库和数据表,然而在实际使用中我们需要判断数据库和数据表是否存在,因此如果你使用这段脚本提示错误信息,请确保数据库和数据表是否已经存在。好了,下面的截图展示了程序运行的结果:

    数据库效果演示

    Unity3D效果展示

    作为一个强大的数据库怎么能没有图形化的数据库管理工具呢?所以这里博主向大家推荐一个免安装的小工具SqliteStudio,使用这个工具可以帮助我们方便地管理Sqlite数据库里的数据,这样是不是比较方便呢?哈哈!这个工具可以从这里下载哦!

    SQLiteStudio界面演示

    好了,今天的内容就是这样了,为了写这篇文章花了三个晚上准备,希望大家喜欢啊!如果大家觉得这篇文章有用,请继续关注我的博客,我是秦元培,我的博客地址是http://blog.csdn.net/qinyuanpei

    2015年11月3日更新内容:在不同的平台上数据库的存储位置是不同的,在这里给出一个参考的路径,希望大家在处理移动端的时候注意这些问题啊!

            //各平台下数据库存储的绝对路径(通用)
            //PC:sql = new SQLiteHelper("data source=" + Application.dataPath + "/sqlite4unity.db");
            //Mac:sql = new SQLiteHelper("data source=" + Application.dataPath + "/sqlite4unity.db");
            //Android:sql = new SQLiteHelper("URI=file:" + Application.persistentDataPath + "/sqlite4unity.db");
            //iOS:sql = new SQLiteHelper("data source=" + Application.persistentDataPath + "/sqlite4unity.db");
    
            //PC平台下的相对路径
            //sql = new SQLiteHelper("data source="sqlite4unity.db");
            //编辑器:Assets/sqlite4unity.db
            //编译后:和AppName.exe同级的目录下,这里比较奇葩
            //当然可以用更随意的方式sql = new SQLiteHelper("data source="D://SQLite//sqlite4unity.db");
            //确保路径存在即可否则会发生错误
    
            //如果是事先创建了一份数据库
            //可以将这个数据库放置在StreamingAssets目录下然后再拷贝到
            //Application.persistentDataPath + "/sqlite4unity.db"路径即可
    
    展开全文
  • 数据库开发 维护 性能调优 备份还原 各种复杂问题的解决方案 这时对CSDN上出现的很多问题的解决方案的总结 免费分享 大家多多下载哦
  • 数据库开发工具——安装教程

    千次阅读 2020-08-06 14:26:37
    Navicat Premium 15是一套数据库开发工具,可以同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 数据库。它与 广大云数据库兼容,让你可以快速轻松地创建、管理和维护数据库。 二、...

    一、软件简介

    Navicat Premium 15是一套数据库开发工具,可以同时连接 MySQL、MariaDB、MongoDB、SQL Server、Oracle、PostgreSQL 和 SQLite 数据库。它与 广大云数据库兼容,让你可以快速轻松地创建、管理和维护数据库。

    二、下载

    百度网盘下载链接:
    链接:https://pan.baidu.com/s/11M9KcCoNb6wfh3Kto-Vl5A
    提取码:6666

    三、安装

    1.双击 navicat150_premium_cs_x64.exe 文件
    在这里插入图片描述
    2.点击下一步
    在这里插入图片描述
    3.同意条款,点击下一步
    在这里插入图片描述
    4.选择安装路径
    在这里插入图片描述
    5.快捷方式的创建位置,默认即可
    在这里插入图片描述
    6.点击下一步
    在这里插入图片描述
    7.开始安装
    在这里插入图片描述
    8.切记安装完成不要立马运行软件
    在这里插入图片描述

    四、配置

    详情见百度网盘里的word文档

    展开全文
  • 数据库开发工程师 主要职责 深入研究数据库内核相关技术,设计并实现数据库管理系统 深入了解数据库应用的业务需求,主导设计不同数据库架构的应用软件,并持续优化 根据业务需求设计数据库逻辑和物理模型, 开发...

    数据库开发工程师

    主要职责

    • 深入研究数据库内核相关技术,设计并实现数据库管理系统
    • 深入了解数据库应用的业务需求,主导设计不同数据库架构的应用软件,并持续优化
    • 根据业务需求设计数据库逻辑和物理模型, 开发数据库生产环境所需要的存储过程、函数、脚本等
    • 参与数据库生产环境的问题优化和解决
    • 探索、研究新的数据库架构发展方向

    工作内容

    数据库开发工程师的日常工作是设计、开发数据库系统和数据库应用软件,因此与软件研发的过程一样,会覆盖需求、设计、编程和测试四个阶段:

    • 需求:深入调研用户市场需求,认清项目的应用场景,解决的问题,性能指标等,需要与数据库系统使用方反复沟通,确定具体的需求。
    • 设计:根据收集整理的需求文档设计数据库系统软件的模型和架构,划分模块分别进行概要和详细设计。
    • 编程:按照模块分工和设计文档,进行编码和调试。
    • 测试:将开发完成的数据库系统交给测试人员进行测试,主要使用的测试方法有黑盒测试、白盒测试、压力测试、性能测试等,测试全部通过后即可等待发布。

    当数据库系统软件完成发布后,数据库开发工程师还需要跟进具体的生产环境使用情况,参与具体问题的改进和优化,提供解决方案。

    技能要求

    1. 通用基础技能要求

    1)精通一种常用编程语言(C/C++、JAVA、PHP等),了解主流的框架、库使用和原理
    2)深入了解计算机数据结构和算法设计,具备Linux操作系统基础知识
    3)掌握基本的网络编程知识,熟悉多线程编程及其技巧
    4)熟练掌握Linux、web server、数据库、缓存相关技术的使用,了解内部实现机制为最优
    5)掌握数据库基本原理和知识,熟悉SQL语法规则和特点
    6)有开源数据库(MySQL、PostgreSQL等)研究和开发经验

    2. 高阶要求

    1)熟练掌握分布式系统理论并有着大量实践
    2)开源社区成员,为开源软件提交过patch
    3)精通Linux系统IO、锁等调优技术

    3. 软素质要求

    1)有良好的英语阅读能力,能够阅读英文资料
    2)自我驱动,主动的学习能力和较强的动手能力
    3)工作认真细致,有责任心,勤奋踏实,善于思考问题
    4)有时间观念,独立性强,沟通能力好,具有团队合作精神

    职业发展

    人才来源

    数据库开发工程师的人才来源可以分为2个方面:应届毕业生和社招。

    • 1)应届毕业生:对于应届毕业生来说,要想成长为数据库开发工程师需要具备一些软件研发方面的技能,同时对数据库理论基础有一定了解,对于数据库管理系统有一些实践经验,再加上较好的主动性、工作认真细致、具有团队合作精神即可;
    • 2)社招:社会招聘主要可以从软件研发和DBA两个方面来筛选人才。对于之前从事大型分布式软件系统研发的工程师,比较容易转型为数据库开发工程师,只需要熟悉一些数据库架构和理论基础即可。而对于DBA来说,已经拥有大量的数据库运维经验,对于数据库研发工作非常有帮助,此时再需要掌握一定的代码编写能力和分布式计算的基础,即可转型成为数据库开发工程师。
    展开全文
  • 1、 数据库开发规范

    千次阅读 2018-06-03 18:07:03
    第1章 数据库开发规范的制定
  • Oracle数据库开发人员技能

    千次阅读 2015-06-10 22:22:02
    各阶段的数据库开发人员要求是不一样的。个人认为:初级阶段主要是语法,基本工具使用,中级熟悉某一门数据库开发、体系结构、基本的操作系统命令,高级对数据库的底层实现有一定的要求,同时还要熟悉数据库外的一些...
  • oracle数据库开发工具简介

    千次阅读 2017-07-10 11:18:21
    oracle数据库开发工具简介。
  • 达梦数据库 开发版试用时间限制

    千次阅读 2019-09-05 16:07:27
    达梦数据库开发版,是指用于业务场景开发时所用的数据库。它和企业版在功能、性能上没有任何区别,仅有的区别是开发版只能试用1年,1年后如何想继续用该库,就需要增加dm.key。 开发版,查询试用时间: SELECT SVR...
  • C++进行sql server数据库开发

    千次阅读 2018-12-20 23:29:38
    下面使用ADO进行c++数据库开发 下面的每个小标题中代码都是不完整的,可能无法编译通过,只是分析,完整的代码会放在最后。 如果有什么地方有错误,请尽管指出来,十分感谢。 1.首先先创建一个C++的项目,Win32...
  • 数据库开发中的版本控制

    千次阅读 2014-04-29 11:40:24
    数据库开发中如果涉及到多人的团队开发时,就遇到了多人执行同一个存储过程或者函数导致的冲突或者冲掉其他人没有执行的代码,怎么能把数据库也能想应用代码一样版本控制起来呢。很多团队对这个事情很烦恼,一些团队...
  • Greenplum分布式数据库开发入门到精通(架构、部署、管理、开发和调优) 课程分类:Hadoop 适合人群:初级 课时数量:41课时 用到技术:GP、MapReduce编程、装载和卸载数据 涉及项目:角色权限及客户端认证管理 ...
  • SQL Server 2017 数据库开发工具介绍

    千次阅读 2017-11-08 15:33:23
    自从安装了SQL Server 2017 试用以来, 测试了几个感兴趣的点. 在使用过程中, 发现在原有SSMS的基础上, 还有几个微软的工具可以进行数据库开发. 工具 使用平台 SSMS Wi
  • 数据库开发工程师(高级) 工作职责描述: 1、负责数据仓库建模、调度系统的设计和开发 2、负责数据仓库流程的优化及解决相关技术问题 3、规划业务相关的数据主题建设,制定数据治理方案 职位技能要求: 1、计算机...
  • VB.NET 数据库开发专业教程 第一辑

    千次阅读 2016-10-19 10:23:18
    学VB.net ,一直困惑于数据开发那些章节,近日,在超星官网读《VB.NET数据库开发专业教程》一书感觉,对初学者很实用,很具体,本人认为是一本不错的入门教程。 当今世界对数据的需求越来越迫切,数据库技术的...
  • 数据库开发规范

    千次阅读 2006-07-02 10:21:00
    数据库开发规范一.数据表和字段的设计 表设计原则 1、标准化和规范化 数据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式,我们在这里采用Third Normal Form(3NF),因为3NF在性能、扩展性和数据...
  • Visual Studio 2010数据库开发指导教程

    千次阅读 2012-11-06 00:05:52
    Visual Studio 2010数据库开发指导教程  Visual Studio对数据库开发有着越来越紧密的联系。在Visual Studio 2005之前版本中没有专门的Visual Studio数据库开发环境。像大多数喜爱TSQL数据库开发的人员可能...
  • DB2数据库开发工具:DBVisualizer

    万次阅读 2013-09-26 11:09:29
    DB2数据库开发工具:DBVisualizer 介绍一款操作DB2数据库的工具,它虽不及PL/SQL Developer那样强大,但用于开发要比QuestCentralForDB2好,使用过PLSQL Developer的朋友也会喜欢上它的。这款软件以JDBC的...
  • 数据库开发经典五例总结

    千次阅读 2012-10-07 12:46:02
    总体来说,《数据库开发经典实例精解》(俗称《红皮书》)一书告诉了我们两点:一、如何创建数据库。二、如何实现与数据库的连接。 其实,单单创建一个数据库其实很简单了,在visual basic 中选择"外接程序"/"可视...
  • 一、Android客户端、服务端、数据库开发所需要环境 1.JDK8+ 2.Android studio 3.eclipse 4.mysql 5.tomcat 二、Android客户端、服务端、数据库开发完整流程 1.用AS开发客户端,并定义链接,目前流行传输格式为JSon 2...
  • 一、数据库 1、数据库,通常是一个戒一组文件,保存了一些符合特定规格的数据,数据库对应的英询单词是DataBase,简称DB;数据库软件称为数据库管理系统...2、无论你开发的是一款PC端的Web应用,还是一款移动端的ap...
  • 004_《Delphi6数据库开发典型实例》

    千次阅读 2010-11-18 13:22:00
    全书共分为8章,主要讲解了Delphi 6中数据库开发工具、通用查询的设计、数据交换技术、文件处理操作的技巧、报表与图表的设计,以及多个典型的数据库开发实例等。 本书资料丰富、内容翔实,融合了利用Delphi 6开发...
  • Qt数据库开发实例(sqlite数据库)

    千次阅读 热门讨论 2017-05-15 22:35:27
    创建数据库文件 实现数据的添加功能 实现数据删除功能 实现数据的刷新功能 实现数据的编辑功能 在tabwidget控件的角落添加控件 使用样式表美化界面 程序运行主界面如下: 视频讲解教程的地址: 优酷:...
  • mono:数据库开发

    千次阅读 2004-08-02 08:51:00
    mono:数据库开发 这个例子采用mysql测试数据库操作。你需要到http://sourceforge.net/projects/mysqlnet下载mysql的.net数据库驱动。这个驱动需要SharpZipLib,你可以到...
  • 实时数据库开发注意事项

    千次阅读 2012-08-15 21:44:34
    实时数据库是以实时数据为存储对象的数据库平台软件,与关系数据库有许多不同的特性,在实时数据库开发中必须注意 实时数据库的特点: 1.实时数据库是特定类型的数据库,在某些实时数据库中可能会有表的概念,...
  • 数据库开发面试问题汇总

    千次阅读 2019-06-12 02:57:41
    确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性,乐观锁和悲观锁是并发控制主要采用的技术手段。 悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作 ...
  • 本文将介绍Android中数据库的使用,及示例展示数据库的增删改查等操作方法。
  • 原文:https://www.luochenzhimu.com/archives/3303.htmlNavicat Premium 是一套数据库开发工具,让你从单一应用程序中同时连接 MySQL、MariaDB、SQL Server、Oracle、PostgreSQL 和 SQLite 数据库。它与 Amazon ...
  • 数据库设计中,树通常三种模型: 邻接模型:id, parent_id。parent_id指向父节点的id。 物化路径模型:记录完整的路径,与文件路径相似,需要id字段。 嵌套集合模型:从根开始给每个节点编号,对每条记录需要left_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,707,626
精华内容 683,050
关键字:

数据库开发