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、概念層:介於兩者之間的間接層。