c数据库通用类
/* * project: * 通用模块 ( 用 c++ 处理 mysql 数据库类,像ADO ) * * description: * * 通过DataBase,RecordSet,Record,Field类,实现对mysql数据库的操作 * 包括连接、修改、添加、删除、查询等等,像ADO一样操作数据库,使 * 用方便 * * ( the end of this file have one sample, * welcom to use... ) * * * file:zlb_mysql.h * * author: @ zlb * * time:2005-12-12 * * * --*/ #ifndef ZLB_MYSQL_H #define ZLB_MYSQL_H #include "mysql.h" #include <iostream> #include <vector> #include <string> using namespace std; namespace zlb_mysql{ /* * 字段操作 */ class Field { public : /* 字段名称 */ vector<string> m_name; /* 字段类型 */ vector<enum_field_types> m_type; public : Field(); ~Field(); /* 是否是数字 */ bool IsNum(int num); /* 是否是数字 */ bool IsNum(string num); /* 是否是日期 */ bool IsDate(int num); /* 是否是日期 */ bool IsDate(string num); /* 是否是字符 */ bool IsChar(int num); /* 是否是字符 */ bool IsChar(string num); /* 是否为二进制数据 */ bool IsBlob(int num); /* 是否为二进制数据 */ bool IsBlob(string num); /* 得到指定字段的序号 */ int GetField_NO(string field_name); }; /* * 1 单条记录 * 2 [int ]操作 [""]操作 */ class Record { public: /* 结果集 */ vector<string> m_rs; /* 字段信息 占用4字节的内存 当记录数很大是回产生性能问题 */ Field *m_field; public : Record(){}; Record(Field* m_f); ~Record(); void SetData(string value); /* [""]操作 */ string operator[](string s); string operator[](int num); /* null值判断 */ bool IsNull(int num); bool IsNull(string s); /* 用 value tab value 的形式 返回结果 */ string GetTabText(); }; /* * 1 记录集合 * 2 [int ]操作 [""]操作 * 3 表结构操作 * 4 数据的插入修改 */ class RecordSet { private : /* 记录集 */ vector<Record> m_s; /* 游标位置*/ unsigned long pos; /* 记录数 */ int m_recordcount; /* 字段数 */ int m_field_num; /* 字段信息 */ Field m_field; MYSQL_RES * res ; MYSQL_FIELD * fd ; MYSQL_ROW row; MYSQL* m_Data ; public : RecordSet(); RecordSet(MYSQL *hSQL); ~RecordSet(); /* 处理返回多行的查询,返回影响的行数 */ int ExecuteSQL(const char *SQL); /* 得到记录数目 */ int GetRecordCount(); /* 得到字段数目 */ int GetFieldNum(); /* 向下移动游标 */ long MoveNext(); /* 移动游标 */ long Move(long length); /* 移动游标到开始位置 */ bool MoveFirst(); /* 移动游标到结束位置 */ bool MoveLast(); /* 获取当前游标位置 */ unsigned long GetCurrentPos()const; /* 获取当前游标的对应字段数据 */ bool GetCurrentFieldValue(const char * sFieldName,char *sValue); bool GetCurrentFieldValue(const int iFieldNum,char *sValue); /* 获取游标的对应字段数据 */ bool GetFieldValue(long index,const char * sFieldName,char *sValue); bool GetFieldValue(long index,int iFieldNum,char *sValue); /* 是否到达游标尾部 */ bool IsEof(); /* 返回字段 */ Field* GetField(); /* 返回字段名 */ const char * GetFieldName(int iNum); /* 返回字段类型 */ const int GetFieldType(char * sName); const int GetFieldType(int iNum); /* 返回指定序号的记录 */ Record operator[](int num); }; /* * 1 负责数据库的连接关闭 * 2 执行sql 语句(不返回结果) * 3 处理事务 */ class DataBase { public : DataBase(); ~DataBase(); private : /* msyql 连接句柄 */ MYSQL* m_Data; public : /* 返回句柄 */ MYSQL * GetMysql(); /* 连接数据库 */ int Connect(string host, string user, string passwd, string db, unsigned int port, unsigned long client_flag); /* 关闭数据库连接 */ void DisConnect(); /* 执行非返回结果查询 */ int ExecQuery(string sql); /* 测试mysql服务器是否存活 */ int Ping(); /* 关闭mysql 服务器 */ int ShutDown(); /* 主要功能:重新启动mysql 服务器 */ int ReBoot(); /* * 说明:事务支持InnoDB or BDB表类型 */ /* 主要功能:开始事务 */ int Start_Transaction(); /* 主要功能:提交事务 */ int Commit(); /* 主要功能:回滚事务 */ int Rollback(); /* 得到客户信息 */ const char * Get_client_info(); /* 主要功能:得到客户版本信息 */ const unsigned long Get_client_version(); /* 主要功能:得到主机信息 */ const char * Get_host_info(); /* 主要功能:得到服务器信息 */ const char * Get_server_info(); /*主要功能:得到服务器版本信息*/ const unsigned long Get_server_version(); /*主要功能:得到 当前连接的默认字符集*/ const char * Get_character_set_name(); /* 主要功能返回单值查询 */ char * ExecQueryGetSingValue(string sql); /* 得到系统时间 */ const char * GetSysTime(); /* 建立新数据库 */ int Create_db(string name); /* 删除制定的数据库*/ int Drop_db(string name); }; }; #endif //ZLB_MYSQL_H /* * project: * 通用模块 ( 用 c++ 处理 mysql 数据库类,像ADO ) * * description: * * 通过DataBase,RecordSet,Record,Field类,实现对mysql数据库的操作 * 包括连接、修改、添加、删除、查询等等,像ADO一样操作数据库,使 * 用方便 * * ( the end of this file have one sample, * welcom to use... ) * * * file:zlb_mysql.cpp * * author: @ zlb * * time:2005-12-12 * * * --*/ #include "stdafx.h" #include "zlb_mysql.h" namespace zlb_mysql{ /* +++++++++++++++++++++++++++++++++++++++++++++++++++ */ /* * 字段操作 */ Field::Field(){} Field::~Field(){} /* * 是否是数字 */ bool Field::IsNum(int num) { if(IS_NUM(m_type[num])) return true; else return false; } /* * 是否是数字 */ bool Field::IsNum(string num) { if(IS_NUM(m_type[GetField_NO(num)])) return true; else return false; } /* * 是否是日期 */ bool Field::IsDate(int num) { if( FIELD_TYPE_DATE == m_type[num] || FIELD_TYPE_DATETIME == m_type[num] ) return true; else return false; } /* 是否是日期 */ bool Field::IsDate(string num) { int temp; temp=GetField_NO(num); if(FIELD_TYPE_DATE == m_type[temp] || FIELD_TYPE_DATETIME == m_type[temp] ) return true; else return false; } /* * 是否是字符 */ bool Field::IsChar(int num) { if(m_type[num]==FIELD_TYPE_STRING || m_type[num]==FIELD_TYPE_VAR_STRING || m_type[num]==FIELD_TYPE_CHAR ) return true; else return false; } /* * 是否是字符 */ bool Field::IsChar(string num) { int temp; temp=this->GetField_NO (num); if(m_type[temp]==FIELD_TYPE_STRING || m_type[temp]==FIELD_TYPE_VAR_STRING || m_type[temp]==FIELD_TYPE_CHAR ) return true; else return false; } /* * 是否为二进制数据 */ bool Field::IsBlob(int num) { if(IS_BLOB(m_type[num])) return true; else return false; } /* * 是否为二进制数据 */ bool Field::IsBlob(string num) { if(IS_BLOB(m_type[GetField_NO(num)])) return true; else return false; } /* * 得到指定字段的序号 */ int Field::GetField_NO(string field_name) { for(unsigned int i=0;i<m_name.size ();i++) { if(!m_name[i].compare (field_name)) return i; } return -1; } /*-----------------------------------------------------*/ /* +++++++++++++++++++++++++++++++++++++++++++++++++++ */ /* * 1 单条记录 * 2 [int ]操作 [""]操作 */ Record::Record(Field * m_f) { m_field =m_f; } Record::~Record(){}; void Record::SetData(string value) { m_rs.push_back (value); } /* [""]操作 */ string Record::operator[](string s) { return m_rs[m_field->GetField_NO(s)]; } string Record::operator[](int num) { return m_rs[num]; } /* null值判断 */ bool Record::IsNull(int num) { if("" == m_rs[num].c_str ()) return true; else return false; } bool Record::IsNull(string s) { if("" == m_rs[m_field->GetField_NO(s)].c_str()) return true; else return false; } /* 主要-功能:用 value tab value 的形式 返回结果 */ string Record::GetTabText() { string temp; for(unsigned int i=0 ;i<m_rs.size();i++) { temp+=m_rs[i]; if(i<m_rs.size ()-1) temp+="\t"; } return temp; } /*-----------------------------------------------------*/ /* +++++++++++++++++++++++++++++++++++++++++++++++++++ */ /* * 1 记录集合 * 2 [int ]操作 [""]操作 * 3 表结构操作 * 4 数据的插入修改 */ RecordSet::RecordSet() { res = NULL; row = NULL; pos = 0; } RecordSet::RecordSet(MYSQL *hSQL) { res = NULL; row = NULL; m_Data = hSQL; pos = 0; } RecordSet::~RecordSet() { } /* * 处理返回多行的查询,返回影响的行数 * 成功返回行数,失败返回-1 */ int RecordSet::ExecuteSQL(const char *SQL) { if ( !mysql_real_query(m_Data,SQL,strlen(SQL))) { //保存查询结果 res = mysql_store_result(m_Data ); //得到记录数量 m_recordcount = (int)mysql_num_rows(res) ; //得到字段数量 m_field_num = mysql_num_fields(res) ; for (int x = 0 ; fd = mysql_fetch_field(res); x++) { m_field.m_name.push_back(fd->name); m_field.m_type.push_back(fd->type); } //保存所有数据 while (row = mysql_fetch_row(res)) { Record temp(&m_field); for (int k = 0 ; k < m_field_num ; k++ ) { if(row[k]==NULL||(!strlen(row[k]))) { temp.SetData (""); } else { temp.SetData(row[k]); } } //添加新记录 m_s.push_back (temp); } mysql_free_result(res ) ; return m_s.size(); } return -1; } /* * 向下移动游标 * 返回移动后的游标位置 */ long RecordSet::MoveNext() { return (++pos); } /* 移动游标 */ long RecordSet::Move(long length) { int l = pos + length; if(l<0) { pos = 0; return 0; }else { if(l >= m_s.size()) { pos = m_s.size()-1; return pos; }else { pos = l; return pos; } } } /* 移动游标到开始位置 */ bool RecordSet::MoveFirst() { pos = 0; return true; } /* 移动游标到结束位置 */ bool RecordSet::MoveLast() { pos = m_s.size()-1; return true; } /* 获取当前游标位置 */ unsigned long RecordSet::GetCurrentPos()const { return pos; } /* 获取当前游标的对应字段数据 */ bool RecordSet::GetCurrentFieldValue(const char * sFieldName, char *sValue) { strcpy(sValue,m_s[pos][sFieldName].c_str()); return true; } bool RecordSet::GetCurrentFieldValue(const int iFieldNum,char *sValue) { strcpy(sValue,m_s[pos][iFieldNum].c_str()); return true; } /* 获取游标的对应字段数据 */ bool RecordSet::GetFieldValue(long index,const char * sFieldName, char *sValue) { strcpy(sValue,m_s[index][sFieldName].c_str()); return true; } bool RecordSet::GetFieldValue(long index,int iFieldNum,char *sValue) { strcpy(sValue,m_s[index][iFieldNum].c_str()); return true; } /* 是否到达游标尾部 */ bool RecordSet::IsEof() { return (pos == m_s.size())?true:false; } /* * 得到记录数目 */ int RecordSet::GetRecordCount() { return m_recordcount; } /* * 得到字段数目 */ int RecordSet::GetFieldNum() { return m_field_num; } /* * 返回字段 */ Field * RecordSet::GetField() { return &m_field; } /* 返回字段名 */ const char * RecordSet::GetFieldName(int iNum) { return m_field.m_name.at(iNum).c_str(); } /* 返回字段类型 */ const int RecordSet::GetFieldType(char * sName) { int i = m_field.GetField_NO(sName); return m_field.m_type.at(i); } const int RecordSet::GetFieldType(int iNum) { return m_field.m_type.at(iNum); } /* * 返回指定序号的记录 */ Record RecordSet::operator[](int num) { return m_s[num]; } /* -------------------------------------------------- */ /* +++++++++++++++++++++++++++++++++++++++++++++++++++ */ /* * 1 负责数据库的连接关闭 * 2 执行sql 语句(不返回结果) * 3 处理事务 */ DataBase::DataBase() { m_Data = NULL; } DataBase::~DataBase() { if(NULL != m_Data) { DisConnect(); } } /* 返回句柄 */ MYSQL * DataBase::GetMysql() { return m_Data; } /* * 主要功能:连接数据库 * 参数说明: * 1 host 主机ip地址或者时主机名称 * 2 user 用户名 * 3 passwd 密码 * 4 db 欲连接的数据库名称 * 5 port 端口号 * 6 uinx 嵌套字 * 7 client_flag 客户连接参数 * 返回值: 0成功 -1 失败 */ int DataBase::Connect(string host, string user, string passwd, string db, unsigned int port, unsigned long client_flag) { if((m_Data = mysql_init(NULL)) && mysql_real_connect( m_Data, host.c_str(), user.c_str(), passwd.c_str(), db.c_str(),port , NULL, client_flag)) { //选择制定的数据库失败 if ( mysql_select_db( m_Data, db.c_str () ) < 0 ) { mysql_close( m_Data) ; return -1 ; } } else { //初始化mysql结构失败 mysql_close( m_Data ); return -1 ; } //成功 return 0; } /* * 关闭数据库连接 */ void DataBase::DisConnect( ) { mysql_close(m_Data) ; } /* * 主要功能: 执行非返回结果查询 * 参数:sql 待执行的查询语句 * 返回值; n为成功 表示受到影响的行数 -1 为执行失败 */ int DataBase::ExecQuery(string sql) { if(!mysql_real_query(m_Data,sql.c_str (),(unsigned long)sql.length()) ) { //得到受影响的行数 return (int)mysql_affected_rows(m_Data) ; } else { //执行查询失败 return -1; } } /* * 主要功能:测试mysql服务器是否存活 * 返回值:0 表示成功 -1 失败 */ int DataBase::Ping() { if(!mysql_ping(m_Data)) return 0; else return -1; } /* * 主要功能:关闭mysql 服务器 * 返回值;0成功 -1 失败 */ int DataBase::ShutDown() { if(!mysql_shutdown(m_Data,SHUTDOWN_DEFAULT)) return 0; else return -1; } /* * 主要功能:重新启动mysql 服务器 * 返回值;0表示成功 -1 表示失败 */ int DataBase::ReBoot() { if(!mysql_reload(m_Data)) return 0; else return -1; } /* * 说明:事务支持InnoDB or BDB表类型 */ /* * 主要功能:开始事务 */ int DataBase::Start_Transaction() { if(!mysql_real_query(m_Data, "START TRANSACTION" , (unsigned long)strlen("START TRANSACTION") )) { return 0; } else //执行查询失败 return -1; } /* * 主要功能:提交事务 * 返回值:0 表示成功 -1 表示失败 */ int DataBase::Commit() { if(!mysql_real_query( m_Data, "COMMIT", (unsigned long)strlen("COMMIT") ) ) { return 0; } else //执行查询失败 return -1; } /* * 主要功能:回滚事务 * 返回值:0 表示成功 -1 表示失败 */ int DataBase::Rollback() { if(!mysql_real_query(m_Data, "ROLLBACK", (unsigned long)strlen("ROLLBACK") ) ) return 0; else //执行查询失败 return -1; } /* 得到客户信息 */ const char * DataBase::Get_client_info() { return mysql_get_client_info(); } /*主要功能:得到客户版本信息*/ const unsigned long DataBase::Get_client_version() { return mysql_get_client_version(); } /* 主要功能:得到主机信息 */ const char * DataBase::Get_host_info() { return mysql_get_host_info(m_Data); } /* 主要功能:得到服务器信息 */ const char * DataBase::Get_server_info() { return mysql_get_server_info( m_Data ); } /* 主要功能:得到服务器版本信息 */ const unsigned long DataBase::Get_server_version() { return mysql_get_server_version(m_Data); } /*主要功能:得到 当前连接的默认字符集*/ const char * DataBase::Get_character_set_name() { return mysql_character_set_name(m_Data); } /* * 主要功能返回单值查询 */ char * DataBase::ExecQueryGetSingValue(string sql) { MYSQL_RES * res; MYSQL_ROW row ; char *p = NULL; if(!mysql_real_query( m_Data, sql.c_str(),(unsigned long)sql.length())) { //保存查询结果 res = mysql_store_result( m_Data ) ; row = mysql_fetch_row( res ) ; p = ((row[0]==NULL)||(!strlen(row[0])))?"-1":row[0]; mysql_free_result( res ) ; } else //执行查询失败 p = "-1"; return p; } /* * 得到系统时间 */ const char * DataBase::GetSysTime() { return ExecQueryGetSingValue("select now()"); } /* * 主要功能:建立新数据库 * 参数:name 为新数据库的名称 * 返回:0成功 -1 失败 */ int DataBase::Create_db(string name) { string temp ; temp="CREATE DATABASE "; temp+=name; if(!mysql_real_query( m_Data,temp.c_str () , (unsigned long)temp.length ()) ) return 0; else //执行查询失败 return -1; } /* * 主要功能:删除制定的数据库 * 参数:name 为欲删除数据库的名称 * 返回:0成功 -1 失败 */ int DataBase::Drop_db(string name) { string temp ; temp="DROP DATABASE "; temp+=name; if(!mysql_real_query( m_Data,temp.c_str () , (unsigned long)temp.length ()) ) return 0; else //执行查询失败 return -1; } /*-----------------------------------------------------*/ }; /* * 使用例子 */ #include "zlb_mysql.h" using namespace std; void main() { zlb_mysql::DataBase zlb; //连接数据库 if(-1 == zlb.Connect("localhost"/*本地数据库,可以是远程 ip*/, "root"/*用户名*/,"apple"/*密码*/, "test"/*数据库名*/, 0,0/*两个标志,mysql文档有说明,一般为0*/)) { std::cout<<"connect failed "<<std::endl; } else { std::cout<<"connect success"<<std::endl; } //通过返回的数据库句柄,建立记录急,你可以通过返回的这个句柄建立多个记录急 zlb_mysql::RecordSet rs(zlb.GetMysql()); rs.ExecuteSQL("select * from testtable");//这个语句大家都知道是什么意思了 cout<<rs.GetRecordCount()/*返回的总的记录数*/<<endl; cout<<rs.GetFieldNum()/*返回的总的字段数*/<<endl; cout<<rs[0].GetTabText()/*返回第一条记录,你也可以rs[1].GetTabText() 如果你有多条记录, */ <<endl; /*实现遍列,也可以使用后面的遍列方式*/ for(int i=0;i<rs.GetRecordCount();++i) { for(int j =0;j<rs.GetFieldNum();++j) cout<<rs[i][j]; cout<<endl; } zlb_mysql::Field *fd = rs.GetField();/*你可以通过这样的方式,获取字段的信息*/ cout<<fd->GetField_NO("Password")/*返回我表里的 Password 字段的位置,不 是记录的位置*/ <<endl; cout<<rs[0]["Password"]<<endl;/*输出第0行第Password列的值*/ cout<<rs[0][fd->GetField_NO("Password")]<<endl;/*你也可以这样*/ cout<<rs.GetFieldName(0)/*获取字段的名字*/<<endl; cout<<rs.GetFieldType("UserName")/*获取字段的类型,是mysql里定义的*/<<endl; cout<<rs.GetCurrentPos()/*获取当前记录的位置*/<<endl; char s[50]; rs.GetCurrentFieldValue(1,s);/*获取当前记录对应字段的值*/ cout<<s<<endl; cout<<rs.Move(1)<<endl;/*移动游标,正数往前 负数往后*/ cout<<rs.GetCurrentPos()<<endl; rs.GetCurrentFieldValue(1,s); cout<<s<<endl; rs.MoveFirst();/*移动游标到最前*/ while(!rs.IsEof()/*判断是否到达游标尾,实现遍列*/) { rs.GetCurrentFieldValue("UserName",s); cout<<s<<"\t"; rs.GetCurrentFieldValue("Password",s); cout<<s<<"\t
"; rs.MoveNext(); } rs.GetFieldValue(0,"UserName",s);/*获取指定行 的记录值*/ cout<<s<<"\t"; rs.GetFieldValue(0,"Password",s); cout<<s<<"\t
"; }
⑵ 数据库分为哪几类
数据库按照使用和归类不同,它的分类也是不同的,我基本归纳了如下几类:
一,按国际上通用的分类方法,数据库分为以下三大类:
1、参考数据库(Reference databases),是能指引用户到另一信息源获取原文或其他细节的数据库;
2、源数据库(Source databases),指能直接提供所需原始资料或具体数据的数据库。;
3、混合型数据库(Mixed databases),能同时存贮多种类型数据的数据库。
二,按数据结构来分类,有三种:
1、层次式数据库
2、网络式数据库
3、关系式数据库
三,常用数据库分类:
1,IBM 的DB2。
2,Oracle。
3,Informix。
4,Sybase。
5,SQL Server。
6,PostgreSQL。
7,mySQL。
⑶ 常用的数据库软件有哪些
SQL
Server
是
Microsoft(微软)
的数据产品,它的易用性强!
Oracle
是
Oracle(甲骨文)公司的数据产品!号称世界上最好的数据系统!
DB2
是IBM公司的产品,在全球500强的企业中有80%是用DB2作为数据库平台的
⑷ 数据库有哪些类型,EXCEL数据库属于哪种类型
数据库发展30年
一、网状数据库
最早出现的是网状DBMS。网状模型中以记录为数据的存储单位。记录包含若干数据项。网状数据库的数据项可以是多值的和复合的数据。每个记录有一个惟一地标识它的内部标识符,称为码(DatabaseKey,DBK),它在一个记录存入数据库时由DBMS自动赋予。DBK可以看作记录的逻辑地址,可作记录的替身,或用于寻找记录。网状数据库是导航式(Navigation)数据库,用户在操作数据库时不但说明要做什么,还要说明怎么做。例如在查找语句中不但要说明查找的对象,而且要规定存取路径。
世界上第一个网状数据库管理系统也是第一个DBMS是美国通用电气公司Bachman等人在1964年开发成功的IDS(IntegratedDataStore)。IDS奠定了网状数据库的基础,并在当时得到了广泛的发行和应用。1971年,美国CODASYL(,数据系统委员会)中的DBTG(DataBaseTaskGroup,数据库任务组)提出了一个着名的DBTG报告,对网状数据模型和语言进行了定义,并在1978年和1981年又做了修改和补充。因此网状数据模型又称为CODASYL模型或DBTG模型。1984年美国国家标准协会(ANSI)提出了一个网状定义语言(NetworkDefinitionLanguage,NDL)的推荐标准。在70年代,曾经出现过大量的网状数据库的DBMS产品。比较着名的有Cullinet软件公司的IDMS,Honeywell公司的IDSII,Univac公司(后来并入Unisys公司)的DMS1100,HP公司的IMAGE等。网状数据库模型对于层次和非层次结构的事物都能比较自然的模拟,在关系数据库出现之前网状DBMS要比层次DBMS用得普遍。在数据库发展史上,网状数据库占有重要地位。
二、层次数据库
层次型数据库管理系统是紧随网络型数据库而出现的。现实世界中很多事物是按层次组织起来的。层次数据模型的提出,首先是为了模拟这种按层次组织起来的事物。层次数据库也是按记录来存取数据的。层次数据模型中最基本的数据关系是基本层次关系,它代表两个记录型之间一对多的关系,也叫做双亲子女关系(PCR)。数据库中有且仅有一个记录型无双亲,称为根节点。其他记录型有且仅有一个双亲。在层次模型中从一个节点到其双亲的映射是惟一的,所以对每一个记录型(除根节点外)只需要指出它的双亲,就可以表示出层次模型的整体结构。层次模型是树状的。
最着名最典型的层次数据库系统是IBM公司的IMS(Information Management System),这是IBM公司研制的最早的大型数据库系统程序产品。从60年代末产生起,如今已经发展到IMSV6,提供群集、N路数据共享、消息队列共享等先进特性的支持。这个具有30年历史的数据库产品在如今的WWW应用连接、商务智能应用中扮演着新的角色。
三、关系数据库
关系模型的建立
网状数据库和层次数据库已经很好地解决了数据的集中和共享问题,但是在数据独立性和抽象级别上仍有很大欠缺。用户在对这两种数据库进行存取时,仍然需要明确数据的存储结构,指出存取路径。而后来出现的关系数据库较好地解决了这些问题。关系数据库理论出现于60年代末到70年代初。1970年,IBM的研究员E.F.Codd博士发表《大型共享数据银行的关系模型》一文提出了关系模型的概念。后来Codd又陆续发表多篇文章,奠定了关系数据库的基础。关系模型有严格的数学基础,抽象级别比较高,而且简单清晰,便于理解和使用。但是当时也有人认为关系模型是理想化的数据模型,用来实现DBMS是不现实的,尤其担心关系数据库的性能难以接受,更有人视其为当时正在进行中的网状数据库规范化工作的严重威胁。为了促进对问题的理解,1974年ACM牵头组织了一次研讨会,会上开展了一场分别以Codd和Bachman为首的支持和反对关系数据库两派之间的辩论。这次着名的辩论推动了关系数据库的发展,使其最终成为现代数据库产品的主流。
关系数据模型提供了关系操作的特点和功能要求,但不对DBMS的语言给出具体的语法要求。对关系数据库的操作是高度非过程化的,用户不需要指出特殊的存取路径,路径的选择由DBMS的优化机制来完成。Codd在70年代初期的论文论述了范式理论和衡量关系系统的12条标准,用数学理论奠定了关系数据库的基础。Codd博士也以其对关系数据库的卓越贡献获得了1983年ACM图灵奖。
关系数据模型是以集合论中的关系概念为基础发展起来的。关系模型中无论是实体还是实体间的联系均由单一的结构类型--关系来表示。在实际的关系数据库中的关系也称表。一个关系数据库就是由若干个表组成。
SQL语言的产生和发展
1974年,IBM的Ray Boyce和Don Chamberlin将Codd关系数据库的12条准则的数学定义以简单的关键字语法表现出来,里程碑式地提出了SQL(Structured Query Language)语言。SQL语言的功能包括查询、操纵、定义和控制,是一个综合的、通用的关系数据库语言,同时又是一种高度非过程化的语言,只要求用户指出做什么而不需要指出怎么做。SQL集成实现了数据库生命周期中的全部操作。自产生之日起,SQL语言便成了检验关系数据库的试金石,而SQL语言标准的每一次变更都指导着关系数据库产品的发展方向。
在SQL语言取得进展的同时,IBM研究中心于1973年开始着手SystemR项目。其目标是论证一个全功能关系DBMS的可行性。该项目结束于1979年,完成了第一个实现SQL的DBMS。1986年,ANSI把SQL作为关系数据库语言的美国标准,同年公布了标准SQL文本。目前SQL标准有3个版本。基本SQL定义是ANSIX3135-89,"Database Language - SQL with Integrity Enhancement"[ANS89],一般叫做SQL-89。SQL-89定义了模式定义、数据操作和事务处理。SQL-89和随后的ANSIX3168-1989,"DatabaseLanguage-EmbeddedSQL"构成了第一代SQL标准。ANSIX3135-1992[ANS92]描述了一种增强功能的SQL,现在叫做SQL-92标准。SQL-92包括模式操作,动态创建和SQL语句动态执行、网络环境支持等增强特性。在完成SQL-92标准后,ANSI和ISO即开始合作开发SQL3标准。SQL3的主要特点在于抽象数据类型的支持,为新一代对象关系数据库提供了标准。
第二部分 主流关系数据库软件介绍
Codd的关系数据库理论把关系系统分为表式系统、(最小)关系系统、关系上完备的系统、全关系系统4个级别。目前尚没有一个数据库系统是完全关系系统。真正称做关系系统的应该至少是关系上完备的系统。现代的主流关系数据库产品都是关系上完备的。
一、IBM的DB2 / DB2 universal database
作为关系数据库领域的开拓者和领航人,IBM于1980年开始提供集成的数据库服务器--System/38,随后是SQL/DSforVSE和VM,其初始版本与SystemR研究原型密切相关。DB2forMVSV1在1983年推出。该版本的目标是提供这一新方案所承诺的简单性,数据不相关性和用户生产率。DB2以后的版本的重点是改进其性能、可靠性和容量,以满足广泛的关键业务的行业需求。1988年DB2forMVS提供了强大的在线事务处理(OLTP)支持,1989年和1993年分别以远程工作单元和分布式工作单元实现了分布式数据库支持。最近推出的DB2UniversalDatabase6.1则是通用数据库的典范,是第一个具备网上功能的多媒体关系数据库管理系统,支持包括linux在内的一系列平台。其主要新功能包括:
1)提供了javaStoredProcereBuilder支持服务器端的存储过程快速开发。
2)支持与目录服务器通讯的标准LDAP。
3)增强的转换及迁移工具。
4)扩展的DB2通用数据库控制中心,可在更多的平台下采用相同的图形工具完成管理工作。
5)提高了电子商务性能,提供多种电子商务整合方案。
6)具有强大的XML支持能力。
二、Informix的历史 / InformixIDS2000
Informix在1980年成立,目的是为Unix等开放操作系统提供专业的关系型数据库产品。公司的名称Informix便是取自Information和Unix的结合。
Informix第一个真正支持SQL语言的关系数据库产品是InformixSE(StandardEngine)。InformixSE的特点是简单、轻便、适应性强。它的装机量非常之大,尤其是在当时的微机Unix环境下,成为主要的数据库产品。它也是第一个被移植到Linux上的商业数据库产品。
在90年代初,联机事务处理成为关系数据库越来越主要的应用,同时,Client/Server结构日渐兴起。为了满足基于Client/Server环境下联机事务处理的需要,Informix在其数据库产品中引入了Client/Server的概念,将应用对数据库的请求与数据库对请求的处理分割开来,推出了Informix-OnLine,OnLine的一个特点是数据的管理的重大改变,即数据表不再是单个的文件,而是数据库空间和逻辑设备。逻辑设备不仅可以建立在文件系统之上,还可以是硬盘的分区和裸设备。由此提高了数据的安全性。
1993年,为了克服多进程系统性能的局限性,Informix使用多线程机制重新改写数据库核心,次年初,Informix推出了采用被称为"动态可伸缩结构"(DSA)的InformixDynamicServer。除了应用线程机制以外,Informix在数据库核心中引入了虚处理器的概念,每个虚处理器就是一个Informix数据库服务器进程。在DynamicServer中,多条线程可以在虚处理器缓冲池中并行执行,而每个虚处理机又被实际的多处理机调度执行。更重要的是:为了执行高效性和多功能的调谐,Informix将虚处理器根据不同的处理任务进行了分类。每一类被优化以完成一种特定的功能。
到90年代后期,随着Internet的兴起,电子文档、图片、视频、空间信息、Internet/Web等应用潮水般涌入IT行业,而关系数据库所管理的数据类型仍停留在数字、字符串、日期等六七十年代的水平上,其处理能力便显得力不从心了。1992年,着名的数据库学者、Ingres的创始人加州大学伯克利分校的MichaelStonebraker教授提出对象关系数据库模型,从而找到了一条解决问题的有效途径。
1995年,Stonebraker及其研发组织的加入了Informix,使之在数据库发展方向上有了一个新的突破:1996年Informix推出了通用数据选件(Universal Data Option)。这是一个对象关系模型的数据库服务器;它与其他厂商中间件的解决方案不同,从关系数据库服务器内部的各个环节对数据库进行面向对象的扩充;将关系数据库的各种机制抽象化、通用化。UniversalDataOption采用了DynamicServer的所有底层技术,如DSA结构和并行处理,同时允许用户在数据库中建立复杂的数据类型及用户自定义的数据类型,同时可对这些数据类型定义各种操作和运算以实现对象的封装。在定义操作和运算时可以采用数据库过程语言、C语言,它们经注册后成为服务器的一部分。
1999年,Informix进一步将Universal Data Option进行了优化,为用户自定义数据类型和操作过程提供了完整的工具环境。同时在传统事务处理的性能超过了以往的Dynamic Server。新的数据库核心便被命名为IDS.2000。它的目标定位于下世纪基于Internet的复杂数据库应用。
事实上,Internet的普及从Web开始。Web应用以简便和图文并茂见长。但充斥整个系统的HTML文件又将我们不知不觉地带回了文件系统的时代。采用数据库管理Internet信息遇到的第一个挑战就是复杂信息的管理问题,Internet的出现将"数据"的概念在实际应用中扩大了。为此,自1995年起,Informix便着手进行新一代数据库系统的设计。作为专业的数据库厂商,Informix首先针对Internet应用中数据类型的多样化,采用对象技术对关系数据库体系进行了扩展。与众不同之处在于,Informix并非将新的数据类型写死在数据库核心中,而是将数据库系统中各个环节充分地抽象化,使用户有能力定义和描述自己需要管理的数据类型,将可管理的数据类型扩展到无限,同时适应了未来应用发展的需要。这就是Informix今年新推出的数据库服务器--InformixDynamicServer.2000(简称IDS.2000)。
在IDS.2000中,Informix的另一重大贡献在于抽象化数据库的访问方法(索引机制和查询优化)并将其中接口开放。这样,用户便可以自己定义对复杂对象的全新的索引机制,并融入整个数据库服务器。在IDS.2000中,所有用户自定义的数据类型、操作、索引机制都将被系统与其内置的类型、操作和索引机制同等对待。IDS.2000将所有数据库操作纳入标准数据库SQL的范畴,在形式上与传统关系数据库完全兼容,但适应了"数据"概念拓展的需求,成为真正的通用数据库。Informix在IDS.2000之上增加了一系列核心扩展模块,构成了面向Internet的多功能数据库服务器Informix Internet Foundation.2000。
INFORMIX主要产品分为三大部分:
数据库服务器(数据库核心)
应用开发工具
网络数据库互联产品
数据库服务器有两种,作用都是提供数据操作和管理:
SE:完全基于UNIX操作系统,主要针对非多媒体的较少用户数的应用
ONLINE:针对大量用户的联机事务处理和多媒体应用环境
应用开发工具是用以开发应用程序必要的环境和工具,主要也有两个系列:
4GL:INFORMIX传统的基于字符界面的开发工具,该系列的主要产品有五个,他们是I-SQL、4GL RDS、4GL C COMPILER、4GL ID和ESQL/C;
NewEra:INFORMIX最新提供的具有事件驱动能力、面向对象的基于各种图形界面的开发工具。
INFORMIX的网络数据库互联产品:提供给用户基于多种工业标准的应用程序接口,通过它可以和其它遵守这些工业标准的数据库联接。
三、Sybase的历史 / Sybase ASE
Sybase公司成立于1984年,公司名称"Sybase"取自"system"和"database"相结合的含义。Sybase公司的创始人之一Bob Epstein是Ingres大学版(与System/R同时期的关系数据库模型产品)的主要设计人员。公司的第一个关系数据库产品是1987年5月推出的SybaseSQLServer1.0。
Sybase首先提出了Client/Server数据库体系结构的思想,并率先在自己的SybaseSQLServer中实现。在此之前,计算机信息一般都存储在单一的主机计算机中,最终用户一般都通过字符终端管理和访问主机,绝大多数的处理都由主机完成,终端主要完成输入和简单的显示功能。这种主机/终端模式的软硬件费用相当高,中小型企业一般都无法实施。在70年代末和80年代初,IT业发生了两件产生深远影响的事件:PC机和局域网络的迅速普及。PC机比终端的功能要强得多,局域网的速度也比主机终端之间的连接速度快得多,而且与主机系统相比,它们的费用也低得多,与此同时,工作站和小型机也飞速发展,在许多方面可以取代主机的功能,这些为实施Client/Server体系结构提供了硬件的基础。
在Client/Server体系结构中,服务器提供数据的存储和管理等功能,客户端运行相应的应用,通过网络可获得服务器的服务,使用服务器上的数据库资源。客户机和服务器通过网络连结成为一个互相协作的系统。Client/Server体系结构将原来运行在主机系统上的大型数据库系统进行适当的划分,在客户机和服务器之间进行合理的分配,在Sybase SQL Server中,将数据库和应用划分为以下几个逻辑功能:用户接口(User Interface)、表示逻辑(Presentation Logic)、事务逻辑(Transaction Logic)、数据存取(Data Access)。Sybase的设计思想是将事务逻辑和数据存取放在服务器一侧处理,而把用户接口、表示逻辑放在客户机上处理。
Client/Server体系结构把硬件和软件合理的配置和设计,极大地推动了当时联机企业信息系统的实现。与主机/终端模式相比,Client/Server体系结构可以更好地实现数据服务和应用程序的共享,并且系统容易扩充,更加灵活,简化了企业信息系统的开发。当信息系统的规模扩大或需求改变时,不必重新设计而可以在原有的基础上进行扩充和调整,从而保护了企业在硬件和软件上的已有的投资。
“Client/Server体系结构"很快成为企业信息建设的主要模式,对数据库乃至IT业的发展产生了深远的影响。
1989年,Sybase发布了OpenClient/OpenServer,这一产品为不同的数据源和几百种工具和应用提供了一致的开放的接口,为实现异构环境下系统的可互操作提供了非常有效的手段。
1992年11月,Sybase发布了SQLServer10.0和一系列的新产品(在此之前,SQLServer相继推出了2.0、4.2、4.8、4.9等版本),将SQLServer从一个Client/Server系统推进到支持企业级的计算环境。Sybase将此产品系列叫做System10。它是根据能支持企业级数据库(运行Sybase和其他厂商的数据库系统)来设计的。
SybaseSQLServer10.0是System10的核心。与4.9版相比,增加了许多新的特点和功能:修改过的Transact-SQL完全符合ANSI-89SQL标准以及ANSI-92入口级SQL标准,此外还增强了对游标的控制,允许应用程序按行取数据,也允许整个数据双向滚动。此外,还引入了阀值管理器。1995年,Sybase推出了SybaseSQLServer11.0。除了继续对联机事务提供强有力的支持之外,Sybase在11.0中增加了不少新功能以支持联机分析处理和决策支持系统。
为了适应现在和未来不断变化的应用需求,Sybase在1997年4月发布了适应性体系结构(Adaptive Component Architecture , ACA)。ACA是一种3层结构:包括客户端、中间层和服务器。每一层都提供了组件的运行环境,ACA结构可以按照应用需求方便地对系统的每一层进行配置,适应未来的发展要求。与ACA体系结构相适应,Sybase将SQLServer重新命名为Adaptive Server Enterprise,版本号为11.5。在ACA结构中,提出了两种组件的概念:逻辑组件和数据组件。逻辑组件是实现应用逻辑的组件,可以用Java、C/C++、Power Builder等语言来开发,可遵循目前流行的组件标准,如Corba、ActiveX和JavaBean等。而数据组件可实现对不同类型数据的存储和访问。数据组件由Adaptive Server Enterprise11.5(简称ASE11.5)提供。这些数据组件不仅可以完成传统的关系型数据的存储,而且可以支持各种复杂数据类型,用户可以根据用户需要存储的数据类型安装相应的数据存储组件,例如地理空间、时间序列、多媒体/图像、文本数据等。它代表了Sybase在解决复杂数据类型、多维数据类型和对象数据类型等方面的技术策略。
ASE11.5显着增强了对数据仓库和OLAP的支持,引入了逻辑进程管理器允许用户选择对象的运行优先级。
Sybase在1998年推出了ASE11.9.2。这一版本最大的特点是引入了两种新型的锁机制来保证系统的并发性和性能:数据页锁和数据行锁,提供了更精细的粒度控制。另外在查询优化方面也得到了改进。
----进入1999年,随着Internet的广泛使用,为了帮助企业建立企业门户应用,Sybase提出了"OpenDoor"计划,其中一个重要的组成部分就是推出了最新的面向企业门户的ASE12.0。为了满足企业门户的要求,ASE12.0在生产率、可用性和集成性方面做了显着的增强。
ASE12提供了对Java和XML良好的支持,通过完全支持分布事务处理的业界标准X/Open的XA接口标准和微软的DTC标准保证分布事务的完整性,内置高效的事务管理器(TransactionManager)可以支持分布事务的高吞吐量。
ASE12采用了群集(cluster)技术减少意外停机时间。不但支持两个服务器之间的失败转移(failover),还可支持自动的客户端的失败转移。
----ASE12提供了对ACE和Kerberos安全模式的支持,用户可以通过ACE和Kerberos提供更加安全和加密的网络通信;ASE12还提供了联机索引重建功能,在索引重建时,表中的数据仍可被访问。
在查询优化方面,ASE12引入了一种新的称为"Merge Join"的算法,可以显着提高多表连接查询的速度;通过executeimmediate语句可以执行动态SQL语句;用户可以定义永久和完整的查询方案,从而可以进行更有效的性能优化。此外,ASE12与其他Sybase产品(例如Sybase Enterprise Application Server和Sybase Enterprise Event Broker)一起提供对一个完整的标准Internet接口的支持。
⑸ 常见的数据库管理系统有哪些
IBM 的DB2作为关系数据库领域的开拓者和领航人,IBM在1977年完成了System R系统的原型,1980年开始提供集成的数据库服务器—— System/38,随后是SQL/DSforVSE和VM,其初始版本与SystemR研究原型密切相关。DB2 forMVSV1 在1983年推出。该版本的目标是提供这一新方案所承诺的简单性,数据不相关性和用户生产率。1988年DB2 for MVS 提供了强大的在线事务处理(OLTP)支持,1989 年和1993 年分别以远程工作单元和分布式工作单元实现了分布式数据库支持。最近推出的DB2 Universal Database 6.1则是通用数据库的典范,是第一个具备网上功能的多媒体关系数据库管理系统,支持包括Linux在内的一系列平台。
2. OracleOracle 前身叫SDL,由Larry Ellison 和另两个编程人员在1977创办,他们开发了自己的拳头产品,在市场上大量销售,1979 年,Oracle公司引入了第一个商用SQL 关系数据库管理系统。Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率名列前茅。
3. InformixInformix在1980年成立,目的是为Unix等开放操作系统提供专业的关系型数据库产品。公司的名称Informix便是取自Information 和Unix的结合。Informix第一个真正支持SQL语言的关系数据库产品是Informix SE(StandardEngine)。InformixSE是在当时的微机Unix环境下主要的数据库产品。它也是第一个被移植到Linux上的商业数据库产品。
4. SybaseSybase公司的创始人之一Bob Epstein 是Ingres 大学版的主要设计人员。公司的第一个关系数据库产品是1987年5月推出的Sybase SQLServer1.0。Sybase首先提出Client/Server 数据库体系结构的思想,并率先在Sybase SQLServer 中实现。
5. SQL Server1987 年,微软和IBM合作开发完成OS/2,IBM 在其销售的OS/2 ExtendedEdition 系统中绑定了OS/2Database Manager,而微软产品线中尚缺少数据库产品。为此,微软将目光投向Sybase,同Sybase 签订了合作协议,使用Sybase的技术开发基于OS/2平台的关系型数据库。1989年,微软发布了SQL Server 1.0 版。
⑹ 数据库名称有哪些
问题一:常用数据库有哪些? 1. IBM 的DB2
作为关系数据库领域的开拓者和领航人,IBM在1997年完成了System R系统的原型,1980年开始提供集成的数据库服务器―― System/38,随后是SQL/DSforVSE和VM,其初始版本与SystemR研究原型密切相关。DB2 forMVSV1 在1983年推出。该版本的目标是提供这一新方案所承诺的简单性,数据不相关性和用户生产率。1988年DB2 for MVS 提供了强大的在线事务处理(OLTP)支持,1989 年和1993 年分别以远程工作单元和分布式工作单元实现了分布式数据库支持。最近推出的DB2 Universal Database 6.1则是通用数据库的典范,是第一个具备网上功能的多媒体关系数据库管理系统,支持包括Linux在内的一系列平台。
2. Oracle
Oracle 前身叫SDL,由Larry Ellison 和另两个编程人员在1977创办,他们开发了自己的拳头产品,在市场上大量销售,1979 年,Oracle公司引入了第一个商用SQL 关系数据库管理系统。Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率名列前茅。
3. Informix
Informix在1980年成立,目的是为Unix等开放操作系统提供专业的关系型数据库产品。公司的名称Informix便是取自Information 和Unix的结合。Informix第一个真正支持SQL语言的关系数据库产品是Informix SE(StandardEngine)。InformixSE是在当时的微机Unix环境下主要的数据库产品。它也是第一个被移植到Linux上的商业数据库产品。
4. Sybase
Sybase公司成立于1984年,公司名称“Sybase”取自“system”和 “database” 相结合的含义。Sybase公司的创始人之一Bob Epstein 是Ingres 大学版(与System/R同时期的关系数据库模型产品)的主要设计人员。公司的第一个关系数据库产品是1987年5月推出的Sybase SQLServer1.0。Sybase首先提出Client/Server 数据库体系结构的思想,并率先在Sybase SQLServer 中实现。
5. SQL Server
1987 年,微软和 IBM合作开发完成OS/2,IBM 在其销售的OS/2 ExtendedEdition 系统中绑定了OS/2Database Manager,而微软产品线中尚缺少数据库产品。为此,微软将目光投向Sybase,同Sybase 签订了合作协议,使用Sybase的技术开发基于OS/2平台的关系型数据库。1989年,微软发布了SQL Server 1.0 版。
6. PostgreSQL
PostgreSQL 是一种特性非常齐全的自由软件的对象――关系性数据库管理系统(ORDBMS),它的很多特性是当今许多商业数据库的前身。PostgreSQL最早开始于BSD的Ingres项目。PostgreSQL 的特性覆盖了SQL-2/SQL-92和SQL-3。首先,它包括了可以说是目前世界上最丰富的数据类型的支持;其次,目前PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统.
......>>
问题二:数据库名称和用户是什么 数据库名称是你建立的database 的名字! 用户,就是你登录数据库这一类软件用户名 比如SQL2000或者2005:一般用户名和密码都是sa,如果是mysql:一般用户名和密码都是root。
问题三:数据库名称和数据源名称有何区别 没有联系,数据源是一个变量,我们定义的一个数据源,可以随时修改指向不同的数据库,而处据库是个存在的实体。
问题四:什么是数据库名称?还有用户名和密码? 你说的要看空间服务商提供的是什么数据库类型
1、如果说数据库是Access,那么数据库名称就是你上传的文件名(即xxx.mdb文件,可修改),
用户名和密码即自己在文件里设置,无需询问空间服务商
2、如果说数据库是SQL-Server(即MsSQL),那么数据库服务器IP地址、数据库名称、登录用户名和密码空间服务商会告诉你的,他们告诉你什么你就填上去就可以了,一般来说网站和数据库会被安装到一台服务器上,那么服务器IP地址项就为(local)
数据库服务器IP地址:即你要恭录到那一台服务器上,互联网上服务器很多,你要登录哪一台?
数据库名称:一台数据库服务器空间服务商不可能只为你服务,他们还要为其他人服务,
所以他们为每一个人开通一个数据库名称,一般不允许你修改
用户名和密码:你登录服务器的验证方式,不是任何人都能登录使用的,只有知道的才能使用
3、如果说是MySQL那么原理和MsSQL原理一样,不过使用时要注意中文编码
问题五:数据库有多少种?一般公司,常用有哪些? 这为朋友您好,很高兴本团队能为您作答 中小型企业一般用SQL Server 大型企业,并且数据量庞大,用Oracle 越来越多的企业,出于更安全的考虑,用Linux系统加MySQL等linux平台的数据库,简洁方便,尤其是安全。 这些具体你可以网络随便查下都有,具体这些公司用的比较多, 希望能帮助到您
问题六:dede数据库名称是什么 DEDE数据库名称,需要你填写你服务器(或者空间)带的SQL数据库的那个名称
安装DEDE数据库这部分,有三个地方需要更改:
1、数据库主机(一般有的主机,只要写localhost就可以了,但有些空间的数据库有自己的地址,所以需要单独写);
搐2、数据库用户,这个一般是数据库的名字;
3、数据库名称,一般是空间商的数据库给定的名字(如果你想用自己起的名字,需要去数据库手动添加,才可以使用)
具体操作如下图:
问题七:数据库中的列名表及表名列表有什么区别 列名表即字段列表,表名列表即表名称的列表。
比如有表学生表,包括字段学号,姓名,性别等,学号,姓名,性别 即列名表,学生表 即为表名列表
问题八:什么是主站数据库名称? 40分 你可以这样来查看
1、从网站的数据库连接程序代码,即可知道数据库类型,比如
Provider=Microsoft.Jet.OLEDB.4.0;Data Source= & Server.MapPath(aa.mdb)
一看就知道是Access数据库
2、数据库名字,也是从上面的连接信息里看得出为aa.mdb,其它的也能看得出,比如
ConnStr = Provider = Sqloledb; User id = & SqlUsername & ; Password = & SqlPassword & ; initial Catalog = & SqlDatabaseName & ; Data Source = & SqlHostIP & ;
信息里面的initial Catalog等于的就是数据库名称信息,是mssql类型数据库
3、关于字段,由于字段是包含在表里面的,打开表就能看到字段及记录,当然也可以修改
一般右击数据表,都有字段设计功能
4、关于索引,加索引的目的一般是使数据库检索信息时能提高速度,大多在主键上建立
楼主可以网络一把看看,应该有不少关于数据库的信息
问题九:数据库的命令都有哪些? 1、显示当前存在的数据库 mysql> show databases;
2、选择数据库 mysql> USE mysql Database changed (USE 和 QUIT 命令不需要分号结束。),显示当前选择的数据库 mysql> select database();
3、显示当前数据库中存在的表 mysql> SHOW TABLES;
4、显示表(db)的内容 mysql>select * from db;
5、命令的取消 当命令输入错误而又无法改变(多行语句情形)时,只要在分号出现前就可以用 c来取消该条命令 mysql> select -> user() -> c
6、创建一个数据库abccs mysql> CREATE DATABASE abccs;
7、选择你所创建的数据库 mysql> USE abccs Database changed;
8、创建一个数据库表 首先看现在你的数据库中存在什么表: mysql> SHOW TABLES; Empty set (0.00 sec) 说明刚才建立的数据库中还没有数据库表。下面来创建一个数据库表mytable: 我们要建立一个你公司员工的生日表,表的内容包含员工姓名、性别、出生日期、出生城市。 mysql> CREATE TABLE mytable (name VARCHAR(20), sex CHAR(1), birth DATE, birthaddr VARCHAR(20));
9、显示表的结构: mysql> DESCRIBE mytable;
10、 往表中加入记录 我们先用SELECT命令来查看表中的数据: mysql> select * from mytable; Empty set (0.00 sec) 这说明刚才创建的表还没有记录。 加入一条新记录: mysql> insert into mytable values ('abccs','f','1977-07-07','china');
11、用文本方式将数据装入一个数据库表 如果一条一条地输入,很麻烦。我们可以用文本文件的方式将所有记录加入你的数据库表中。 创建一个文本文件“mysql.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以在 CREATE TABLE语句中列出的列次序给出,例如: abccs f 1977-07-07 china mary f 1978-12-12 usa tom m 1970-09-02 usa 使用下面命令将文本文件“mytable.txt”装载到mytable表中: mysql> LOAD DATA LOCAL INFILE mytable.txt INTO TABLE pet; 再使用如下命令看看是否已将数据输入到数据库表中: mysql> select * from mytable;
12、从数据库表中检索信息 select语句格式一般为: SELECT 检索关键词 FROM 被检索的表 WHERE 检索条件
13、查询所有数据: mysql> select * from mytable;
14、修正错误记录: 假如tom的出生日期有错误,应该是1973-09-02,则可以用update语句来修正: mysql> u......>>
问题十:数据库文件都有哪些后缀名呢? 数据库文件如果你不改的话都是固定的文件后缀名.mdf,但是你可以把他改成任何一个后缀名,然后用数据库相关程序打开
⑺ 用C++设计一个通用类型的数组类CArray,要求CArray可以进行如下操作:
见附件。
⑻ 哪位高手可以推荐几款通用的数据库管理工具
1、MySQL Workbench
MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具。它是着名的数据库设计工具DBDesigner4的继任者。你可以用MySQL Workbench设计和创建新的数据库图示,建立数据库文档,以及进行复杂的MySQL 迁移
MySQL Workbench是下一代的可视化数据库设计、管理的工具,它同时有开源和商业化的两个版本。该软件支持Windows和Linux系统,下面是一些该软件运行的界面截图:
2、数据库管理工具 Navicat Lite
NavicatTM是一套快速、可靠并价格相宜的资料库管理工具,大可使用来简化资料库的管理及降低系统管理成本。它的设计符合资料库管理员、开发人员及中小企业的需求。 Navicat是以直觉化的使用者图形接口所而建的,让你可以以安全且简单的方式建立、组织、存取并共用资讯。
界面如下图所示:
Navicat 提供商业版Navicat Premium 和免费的版本 Navicat Lite 。免费版本的功能已经足够强大了。
Navicat 支持的数据库包括MySQL、Oracle、SQLite、PostgreSQL和SQL Server 等。
3、开源ETL工具Kettle
Kettle是一款国外开源的etl工具,纯java编写,绿色无需安装,数据抽取高效稳定(数据迁移工具)。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。
·授权协议:LGPL
·开发语言: Java
·操作系统: 跨平台
4、Eclipse SQLExplorer
SQLExplorer是Eclipse集成开发环境的一种插件,它可以被用来从Eclipse连接到一个数据库。
SQLExplorer插件提供了一个使用SQL语句访问数据库的图形用户接口(GUI)。通过使用SQLExplorer,你能够显示表格、表格结构和表格中的数据,以及提取、添加、更新或删除表格数据。
SQLExplorer同样能够生成SQL脚本来创建和查询表格。所以,与命令行客户端相比,使用SQLExplorer可能是更优越的选择,下图是运行中的界面,很好很强大。
l授权协议: 未知
l开发语言: Java
l操作系统: 跨平台
5、MySQL管理工具phpMyAdmin
phpMyAdmin是一个非常受欢迎的基于web的MySQL数据库管理工具。它能够创建和删除数据库,创建/删除/修改表格,删除/编辑/新增字段,执行SQL脚本等。
l授权协议:GPL
l开发语言:PHP
l操作系统:跨平台
6、Mongodb 管理工具Mongodb Studio
Mongodb是一款性能优良,功能丰富的文档型非关系型数据库。由于该数据库是开源项目并且还在不断更新中,目前为止在任何平台上都不能找到功能相对完整的客户端数据库管理工具。而越来越多的项目中使用了Mongodb,使得管理起来十分麻烦.如果点点鼠标就搞定了.那该有多好。
基于如上背景,我们制作了此MongoDB管理工具,在DBA/开发/管理员三个维度提供一定层次的管理功能。
Mongodb Management Studio功能如下:
l服务器管理功能
添加服务器,删除服务器
l服务器,数据库,表,列,索引,树形显示和状态信息查看
l查询分析器功能.
支持select,insert,Delete,update
支持自定义分页函 数 $rowid(1,5)查询第一条到第五条,需放在select后面.
l索引管理功能
支持列名的显示,索引的创建,查看,删除.
l数据库Profile管理.
可以设置Profile开关,查看Profile信息.自定义分页大小.
lmaster/slave信息显示
7、MySQL监控小工具mycheckpoint
mycheckpoint是一个开源的 MySQL监控工具,主要用来监控数据。通过视图方式提供监控数据报表。mycheckpoint支持以独立的Web服务器来运行。
例如:SELECTinnodb_read_hit_percent, DML FROM sv_report_chart_sample;
查看详细报表示例。
安装手册:http://code.openark.org/forge/mycheckpoint/documentation/installation
8、SQL SERVER 数据库发布向导
Microsoft SQL Server DatabasePublishing Wizard (微软SQLServer数据库发布向导) 是微软发布的一个开源工具,使用该工具可以帮你将SQLSERVER 数据库导出成一个 SQL脚本,类似 MySQL 的 mysqlmp工具。
官方说明:SQLServer数据库发布向导提供了一种将数据库发布到 T-SQL 脚本或者直接发布到支持宿主服务提供程序的方法。
9、Eclipse 的Oracle插件jOra
jOra是一个为 Oracle开发者和管理员提供的 Eclipse 插件,可轻松的对Oracle进行开发和管理。
安装地址:http://jora.luenasoft.de/updatesite
插件截图
l授权协议:免费,非开源
l开发语言:Java
l操作系统:跨平台
10、免费PostgreSQL监控工具pgwatch
pgwatch 是一个简单易用的PostgreSQL的监控工具,支持PostgreSQL 9.0 以及更新的版本。
主要特性:
- 配置简单
- 大量的监控图表
- 快速系统检查面板
- 自动收集统计信息
- 交互式的 Flash 图表
- 集成 SQL worksheet
l授权协议: Artistic
l开发语言:PHP
l操作系统: Linux
11、MySQL Browser
MySQL的客户端工具MySQL Browser的优点是简单,及其的简单,安装之后能够立刻上手,马上就能使用的那种,布局也很简陋,功能也很简陋,简单使用没有问题,尤其是刚开始学习mysql的同学,可以尝试一下。
·授权协议:未知
·操作系统: Windows
12、MySQL客户端软件HeidiSQL
HeidiSQL是一个功能非常强大的 MySQL 客户端软件,采用Delphi 开发,支持 Windows 操作系统。
l授权协议:GPL
l开发语言:Delphi/Pascal
l操作系统: Windows
13、SQLite管理工具SQLiteStudio
SQLiteStudio 是一个跨平台的 SQLite数据库的管理工具,采用 Tcl语言开发。
l授权协议:未知
l操作系统:跨平台
14、SQL客户端工具SQLyog
SQLyog 是一个易于使用的、快速而简洁的图形化管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库。
功能:
l快速备份和恢复数据;
l以GRID/ TEXT格式显示结果;
l支持客户端挑选、过滤数据;
l批量执行很大的SQL脚本文件;
l快速执行多重查询并能够返回每页超过1000条的记录集,而这种操作是直接生成在内存中的;
l程序本身非常短小精悍!压缩后只有348 KB ;
l完全使用MySQLC APIs程序接口;
l以直观的表格界面建立或编辑数据表;
l以直观的表格界面编辑数据;
l进行索引管理;
l创建或删除数据库;
l操纵数据库的各种权限:库、表、字段;
l编辑BLOB类型的字段,支持Bitmap/GIF/JPEG格式;
l输出数据表结构/数据为SQL脚本;
l支持输入/输出数据为CSV文件;
l可以输出数据库清单为HTML文件;
l为所有操作建立日志;
l个人收藏管理操作语句;
l支持语法加亮显示;
l可以保存记录集为CSV、HTML、XML格式的文件;
l21、99% 的操作都可以通过快捷键完成;
l支持对数据表的各种高级属性修改;
l查看数据服务器的各种状态、参数等;
l支持更改数据表类型为ISAM, MYISAM, MERGE, HEAP, InnoDB, BDB;
l刷新数据服务器、日志、权限、表格等;
l诊断数据表:检查、压缩、修补、分析。
l授权协议:GPLv2
l开发语言:C/C++
l操作系统: Windows
15、数据挖掘工具RapidMiner
RapidMiner是世界领先的数据挖掘解决方案,在一个非常大的程度上有着先进技术。它数据挖掘任务涉及范围广泛,包括各种数据艺术,能简化数据挖掘过程的设计和评价。
功能和特点
l免费提供数据挖掘技术和库;
l100%用Java代码(可运行在操作系统);
l数据挖掘过程简单,强大和直观;
l内部XML保证了标准化的格式来表示交换数据挖掘过程;
l可以用简单脚本语言自动进行大规模进程;
l多层次的数据视图,确保有效和透明的数据;
l图形用户界面的互动原型;
l命令行(批处理模式)自动大规模应用;
lJava API(应用编程接口);
l简单的插件和推广机制;
l强大的可视化引擎,许多尖端的高维数据的可视化建模;
l400多个数据挖掘运营商支持;
l耶鲁大学已成功地应用在许多不同的应用领域,包括文本挖掘,多媒体挖掘,功能设计,数据流挖掘,集成开发的方法和分布式数据挖掘。
l授权协议:未知
l开发语言:Java
l操作系统:跨平台
16、Oracle 数据库开发工具Oracle SQL Developer
Oracle SQL Developer 是一个免费非开源的用以开发数据库应用程序的图形化工具,使用SQLDeveloper 可以浏览数据库对象、运行 SQL 语句和脚本、编辑和调试 PL/SQL语句。另外还可以创建执行和保存报表。该工具可以连接任何 Oracle 9.2.0.1 或者以上版本的 Oracle 数据库,支持Windows、Linux 和 Mac OS X 系统。
·授权协议:免费,非开源
·开发语言:Java
·操作系统:Windows Linux MacOS
17、EMS SQL Manager for MySQL
EMS SQL Manager for MySQL是一款高性能MySQL数据库服务器系统的管理和开发工具。它支持从MySQL 3.23到6.0的任一版本,并支持最新版本的MySQL的特点,包括:查看、存储规程和函数、InnoDB外部键字和其他特点。它提供了大量工具以满足富有经验的用户的所有要求。添加了精心设计的操作向导系统,以及SQL Manager for MySQL那富有艺术感的图形用户界面,即使新手也可以不会为如何使用而感到困扰。
l授权协议:商业软件
l开发语言:C/C++
l操作系统: Windows
18、数据库管理工具CoolSQL
CoolSQL是一个数据库客户端管理工具。
·支持大部分数据库包括:DB2、oracle、mysql、MS SQL Server、Derby、HSQL、Informix、Sybase、PostgresSQL等。
·为用户提供友好和漂亮UI,其整体框架由视图组成类似于Eclipse。支持直接修改SQL查询结果。
·支持将表格数据导出成文本文件,EXCEL和HTML。
·拥有一个支持SQL语法着色显示,智能提示,文本编辑和查找的SQL编辑器。
·能够展示数据库大部分元数据包括:版本,数据类型、函数,连接信息等。
·支持导出数据对象信息包括对象数据(INSERT SQL语句),生成创建/删除脚本(create script/drop script)。
·所有SQL脚本都可以以批量的模式执行。
·能够搜索所有数据包括数据库列,表/视图和其他表格型。
·支持i18n,当前提供两种语言(中文和英文)。
·提供收藏功能,管理由用户收集的文本信息。
·支持通过插件扩展其功能。
ll 授权协议:未知
l开发语言:Java
l操作系统:跨平台
19、SQLite Manager
这是一款方便firefox对任何SQLite数据库操作的扩展。使用这款扩展,可以在firefox下很容易的创建表格、建立索引、浏览搜索等操作。此外它还具有一个语法检查功能的下拉式菜单,从而保证用户的操作不会出错。
20、MySQL GUI Tools
这是MySQL官方专业的数据库管理工具,同时支持多种操作系统。该工具包括下面三个产品:
·MySQL Administrator 1.2
·MySQL Query Browser 1.2
·MySQL MigrationToolkit 1.1
21、SQL客户端管理工具SQuirreL SQL Client
SQuirreL SQL Client是一个SQL客户端管理工具。它允许你查看一个兼容JDBC的数据库的结构,浏览表格中的数据,运行SQL命令, 可连接的数据库有ORCAL,MS SQLSERVER, DB2 等, 它还允许用户安装和创建用于补充应用程序基本功能的插件。
功能和特点:
l柱状图显示对像;
l自动完成;
l语句提示;
l标记;
l自动纠正;
l编辑查询结果;
l关系图;
l分页打印。
l授权协议:未知
l语言:Java
l操作系统:跨平台
22、Tomcat管理工具EasyTomcat
EasyTomcat是一个用来帮助简化 Tomcat和 MySQL管理的系统,你可以启动、停止和配置Tomcat和MySQL服务器,同时也提供了监控的功能。
l授权协议:未知
l开发语言:Java
l操作系统:跨平台
23、SQL Server管理工具sqlBuddy
SqlBuddy是C#编写的一款用于Microsoft SQLServer和MSDE的开源工具,使用它可以很容易的编写SQL脚本。SqlBuddy提供的功能和查询分析器的目的有些微不同,它倾向于帮助使用者编写SQL。
l授权协议:未知
l开发语言:C#
l操作系统: Windows
24、数据库开发工具GSQL
GSQL 是 Gnome 下的一个集成数据库开发工具。数据库结构显示在下图左边的树状结构中,支持SQL的语法着色。
l授权协议:未知
l操作系统:Linux
25、SQLite数据库管理SQLiteSpy
sqlitespy是一个快速和紧凑的数据库SQLite的GUI管理软件 。它的图形用户界面使得它很容易探讨,分析和操纵sqlite3数据库。
l授权协议:未知
l开发语言:Delphi/Pascal
l操作系统:Windows
26、数据库开发工具Aqua Data Studio
Aqua DataStudio 是一个为数据库开发人员准备的集成开发环境,可以对数据库做查询、管理,提供大量的数据库工具,例如数据库比较、源码控制等,目前支持的数据库包括:Oracle, DB2iSeries, DB2 LUW, MS SQL Server, Sybase ASE, Sybase Anywhere, Sybase IQ, Informix,PostgreSQL, MySQL, Apache Derby, JDBC, and ODBC.
l授权协议:未知
l开发语言:C/C++
l操作系统:跨平台
27、MySQL 架构管理工具MySQL MMM
MySQL Master-Master 架构常被用在 SQLquery 相依性低的情况,像是 counter常使用的INSERT INTO ... ON DUPLICATEKEY UPDATE a = a + 1不会因为out-of-order而造成问题。而 MySQL MMM算是其中一套写得比较好的 MySQLMaster-Master架构管理工具。
l授权协议:未知
l开发语言:Python
l操作系统: Linux
28、MySQL Client
MySQL的客户端工具,主界面如下:
l授权协议:未知
l操作系统:Windows
⑼ C语言数据库是什么
数据库是用来存入数据的仓库。用户可以对文件中的数据进行新增、查询、更新、删除等操作。但是C语言和数据库是两个东西,他们之间的关系就是C语言可以用来开发数据库管理软件,也可以通过C语言借助于SQL语句来操作数据库。
C语言普适性最强的一种计算机程序编辑语言,它不仅可以发挥出高级编程语言的功用,还具有汇编语言的优点,因此相对于其它编程语言,它具有自己独特的特点。具体体现在以下三个方面:
其一,广泛性。C 语言的运算范围的大小直接决定了其优劣性。C 语言中包含了34种运算符,因此运算范围要超出许多其它语言,此外其运算结果的表达形式也十分丰富。此外,C 语言包含了字符型、指针型等多种数据结构形式,因此,更为庞大的数据结构运算它也可以应付。
其二,简洁性。9 类控制语句和32个KEYWORDS是C语言所具有的基础特性,使得其在计算机应用程序编写中具有广泛的适用性,不仅可以适用广大编程人员的操作,提高其工作效率,同 时还能够支持高级编程,避免了语言切换的繁琐。
(9)c数据库通用类扩展阅读
数据库架构
1、内层:最接近实际存储体,亦即有关数据的实际存储方式。
2、外层:最接近用户,即有关个别用户观看数据的方式。
3、概念层:介于两者之间的间接层。