AZE演算法
Ⅰ Mysql 的歷史
MySQL的海豚標志的名字叫「sakila」,它是由MySQL AB的創始人從用戶在「海豚命名」的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲史瓦濟蘭的開源軟體開發者Ambrose Twebaze提供。根據Ambrose所說,Sakila來自一種叫SiSwati的史瓦濟蘭方言,也是在Ambrose的家鄉烏干達附近的坦尚尼亞的Arusha的一個小鎮的名字。
二.MySQL 發展
MySQL的歷史最早可以追溯到1979年,有一個人叫Monty Widenius, 為一個叫TcX的小公司打工,並用BASIC設計了一個報表工具,可以在4M主頻和16KB內在的計算機上運行。過了不久,又將此工具,使用C語言重寫,移植到Unix平台,當時,它只是一個很底層的面向報表的存儲引擎。這個工具叫做Unireg。
1985 年,瑞典的幾位志同道合小夥子(以David Axmark 為首) 成立了一家公司,這就是MySQL AB 的前身。這個公司最初並不是為了開發資料庫產品,而是在實現他們想法的過程中,需要一個資料庫。他們希望能夠使用開源的產品。但在當時並沒有一個合適的選擇,沒辦法,那就自己開發吧。
在最初,他們只是自己設計了一個利用索引順序存取數據的方法,也就是I S A M(Indexed Sequential Access Method)存儲引擎核心演算法的前身,利用ISAM 結合mSQL 來實現他們的應用需求。在早期,他們主要是為瑞典的一些大型零售商提供數據倉庫服務。在系統使用過程中,隨著數據量越來越大,系統復雜度越來越高,ISAM 和mSQL 的組合逐漸不堪重負。在分析性能瓶頸之後,他們發現問題出在mSQL 上面。不得已,他們拋棄了mSQL,重新開發了一套功能類似的數據存儲引擎,這就是ISAM 存儲引擎。大家可能已經注意到他們當時的主要客戶是數據倉庫,應該也容易理解為什麼直至現在,MySQL 最擅長的是查詢性能,而不是事務處理(需要藉助第三方存儲引擎)。
1990年,TcX的customer 中開始有人要求要為它的API提供SQL支持,當時,有人想到了直接使用商用資料庫算了,但是Monty覺得商用資料庫的速度難令人滿意。於是,他直接藉助於mSQL的代碼,將它集成到自己的存儲引擎中。但不巧的是,效果並不太好。於是,Monty雄心大起,決心自己重寫一個SQL支持。
1996年,MySQL 1.0發布, 在小范圍內使用。到了96年10月,MySQL 3.11.1發布了,沒有2.x版本。最開始,只提供了Solaris下的二進製版本。一個月後,Linux版本出現了。 此時的MySQL還非常簡陋,除了在一個表上做一些Insert,Update,Delete和Select 操作職位,沒有其他更多的功能。
緊接下來的兩年裡,MySQL依次移植到各個平台下。它發布時,採用的許可策略,有些與眾不同:允許免費商用,但是不能將MySQL與自己的產品綁定在一起發布。如果想一起發布,就必須使用特殊許可,意味著要花銀子。當然,商業支持也是需要花銀子的。其它的,隨用戶怎麼用都可以。這種特殊許可為MySQL帶來了一些收入,從而為它的持續發展打下了良好的基礎。
1999-2000年,有一家公司在瑞典成立了,叫MySQL AB。 雇了幾個人,與Sleepycat合作,開發出了 Berkeley DB引擎, 因為BDB支持事務處理,所以,MySQL從此開始支持事務處理了。
在2000 年的時候,MySQL 公布了自己的源代碼,並採用GPL(GNU General Public License)許可協議,正式進入開源世界。
2000年4月,MySQL對舊的存儲引擎進行了整理,命名為MyISAM。
2001年,Heikiki Tuuri向MySQL提出建議,希望能集成他們的存儲引擎InnoDB,這個引擎同樣支持事務處理,還支持行級鎖。所以在2001年發布的3.23 版本的時候,該版本已經支持大多數的基本的SQL 操作,而且還集成了MyISAM和InnoDB 存儲引擎。MySQL與InnoDB的正式結合版本是4.0。
2004年10月,發布了經典的4.1版本。 2005年10月,有發布了里程碑的一個版本,MySQL 5.0. 在5.0中加入了游標,存儲過程,觸發器,視圖和事務的支持。在5.0 之後的版本里,MySQL明確地表現出邁向高性能資料庫的發展步伐。
2008年1月16號 MySQL被Sun公司收購。
2009年04月20日Oracle收購Sun 公司,MySQL 轉入Oracle 門下。
2010年04月22 發布MySQL 5.5, MySQLcluster 7.1.
現在官網可以下到的MySQL 版本是:5.5.18. Oracle 對MySQL版本重新進行了劃分,分成了社區版和企業版,企業版是需要收費的,當然收費的就會提供更多的功能。
Ⅱ 求助C語言的問題
我的就是任意長度的啊,你沒測試過嗎
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
#define MAX 1000
#define MARK ('0'-1)
//The Prototypes of the functions
char* Initialiaze(char [],int);
char* Addition(char[],char[]);
char* Substraction(char[],char[]);
char* Multiplication(char[],char[]);
char* Division(char[],char[]);
char Div_per_bit(char [],int , char []);
int Sub_per_bit(char [],char [],int *);
int Copy(char [],int ,char []);
int Compare(char [],char []);
int Data_Process(char []);
int Value(char);
int Compare(char [],char []);
int Judge(int);
int Convert(char [],char [],int);
int main()
{ char a[MAX],b[MAX];
printf("a(length<%d):",MAX);
gets(a);
printf("b(length<%d):",MAX);
gets(b);
printf("\n");
printf("a+b=%s\n",Addition(a,b));
printf("a-b=%s\n",Substraction(a,b));
printf("a*b=%s\n",Multiplication(a,b));
printf("a/b=%s\n",Division(a,b));
return 0;
}
//The Iniatilize function ,initialize the result number before calculation
char* Initialize(char s[],int length)
{ int i;
for (i=0; i<length; i++)
s[i]=MARK;
return s;
}
//The Addition function , add two operands and return the result
char* Addition(char a[],char b[])
{ char c[2*MAX],d[2*MAX];
int i,j,k,a_length,b_length;
Initialize(c,2*MAX);
a_length=strlen(a);
b_length=strlen(b);
for (i=a_length-1,j=b_length-1,k=2*MAX-1; ( i>=0 || j>=0 ) ; i--,j--,k--)
{ if ( i>=0 && j>=0 )
c[k]=Value(a[i])+Value(b[j])+'0';
else
if (i>=0 && j<0 )
c[k]=Value(a[i])+'0';
else
if ( i<0 && j>=0 )
c[k]=Value(b[j])+'0';
}
Data_Process(c);
Convert(c,d,2*MAX);
return d;
}
//The Substraction function , substract one operand from another operand , and return the result
char* Substraction(char a[],char b[])
{ char c[2*MAX],d[2*MAX];
int i,j,k,a_length,b_length,sub_result,symbol,flag[2*MAX]={0};
Initialize(c,2*MAX);
a_length=strlen(a);
b_length=strlen(b);
if (strcmp(a,b)==0)
return ("0");
for (i=a_length-1,j=b_length-1,k=2*MAX-1; ( i>=0 || j>=0 ) ; i--,j--,k--)
{ sub_result=a[i]-b[j];
symbol=Judge(sub_result);
if (i>=1 && j>=0)
{ if (flag[k]==0)
{ if (a[i]>=b[j])
c[k]=sub_result+'0';
else
{ c[k]=sub_result+10+'0';
flag[k-1]=1;
}
}
else
{ if (a[i]-b[j]>=1)
c[k]=sub_result-1+'0';
else
{ c[k]=sub_result+9+'0';
flag[k-1]=1;
}
}
}
else
if (i==0 && j<0)
{
if (flag[k]==0)
c[k]=a[i];
else
{ if (a[i]==1)
;
else
c[k]=a[i]-1;
}
}
else
{ if ((i==0) && (j==0))
{ if (flag[k]==0)
{ switch (symbol)
{ case 0: ;
break;
case 1: c[k]=sub_result+'0';
break;
case -1: return NULL;
break;
}
}
else
{ switch (Judge(sub_result-1))
{ case 0: ;
break;
case 1: c[k]=sub_result-1+'0';
break;
case -1: return NULL;
break;
}
}
}
else
if ((i<0) && (j>=0))
return NULL;
else
if ((i>0) && (j<0))
{ if (flag[k]==0)
c[k]=a[i];
else
{ if (a[i]>'0')
c[k]=a[i]-1;
else
{ c[k]='9';
flag[k-1]=1;
}
}
}
}
}
Convert(c,d,2*MAX);
return d;
}
//The Multiplication function,multipy two operands and return the result
char* Multiplication(char a[],char b[])
{ char c[2*MAX],d[2*MAX];
int i,j,k,p,a_length,b_length;
Initialize(c,2*MAX);
a_length=strlen(a);
b_length=strlen(b);
for (j=b_length-1; j>=0 ; j--)
{ k=2*MAX-(b_length-j);
for (i=a_length-1,p=k; i>=0; i--,p--)
if (c[p]==MARK)
{ c[p]=(Value(a[i]))*(Value(b[j]))%10+'0';
if (c[p-1]==MARK)
c[p-1]=(Value(a[i]))*(Value(b[j]))/10+'0';
else
c[p-1]+=(Value(a[i]))*(Value(b[j]))/10;
}
else
{ c[p]+=(Value(a[i]))*(Value(b[j]))%10;
if (c[p-1]==MARK)
c[p-1]=(Value(a[i]))*(Value(b[j]))/10+'0';
else
c[p-1]+=(Value(a[i]))*(Value(b[j]))/10;
}
Data_Process(c);
}
Convert(c,d,2*MAX);
return d;
}
//The Division function,divise one operand from another operand, and return the result
char* Division(char a[],char b[])
{ char a1[MAX],c[MAX],d[MAX];
strcpy(a1,a);
int i,k,a_length=strlen(a1),b_length=strlen(b);
for (i=0; b[i]; i++)
if (b[i]!='0')
break;
if ((unsigned int)i==strlen(b))
{ printf("Error!\nIf you do division,the dividend must not equal to zero!\n");
return 0;
}
if (Compare(a,b)==-1)
{ printf("Error!\nIf you do division, A must bigger than B!\n");
return 0;
}
for ( i=0,k=0; k<a_length-b_length+1; i++,k++)
c[k]=Div_per_bit(a1,b_length+i,b);
c[k]='\0';
Convert(c,d,MAX);
return d;
}
//The Div_per_bit function , calculate quotient per digit ,and return the result to Division function
char Div_per_bit(char a[],int a_l,char b[])
{ int i,j;
char c[MAX];
for (i=0,j=0; i<a_l; i++)
if ( a[i]!=MARK)
{ c[j]=a[i];
j++;
}
c[j]='\0';
for (i=0; c[i]; i++)
if (c[i]!='0')
break;
if ((unsigned int)i==strlen(c))
return '0';
if (Compare(c,b)<0)
return '0';
if (Compare(c,b)==0)
{ for ( i=0; i<a_l; i++)
a[i]=MARK;
return '1';
}
i=0;
while (Compare(c,b)>=0)
Sub_per_bit(c,b,&i);
Copy(a,a_l,c);
return ('0'+i);
}
//The Sub_per_bit function, do the division by using substraction time after time
int Sub_per_bit(char a[],char b[],int *count)
{ char c[MAX],d[MAX];
int i,j,k,a_length,b_length,sub_result,symbol,flag[MAX]={0};
Initialize(c,MAX);
a_length=strlen(a);
b_length=strlen(b);
if (strcmp(a,b)==0)
strcpy(c,"0");
for (i=a_length-1,j=b_length-1,k=MAX-1; ( i>=0 || j>=0 ) ; i--,j--,k--)
{ sub_result=a[i]-b[j];
symbol=Judge(sub_result);
if (i>=1 && j>=0)
{ if (flag[k]==0)
{ if (a[i]>=b[j])
c[k]=sub_result+'0';
else
{ c[k]=sub_result+10+'0';
flag[k-1]=1;
}
}
else
{ if (a[i]-b[j]>=1)
c[k]=sub_result-1+'0';
else
{ c[k]=sub_result+9+'0';
flag[k-1]=1;
}
}
}
else
if (i==0 && j<0)
{
if (flag[k]==0)
c[k]=a[i];
else
{ if (a[i]==1)
;
else
c[k]=a[i]-1;
}
}
else
{ if ((i==0) && (j==0))
{ if (flag[k]==0)
{ switch (symbol)
{ case 0: ;
break;
case 1: c[k]=sub_result+'0';
break;
case -1: return 0;
break;
}
}
else
{ switch (Judge(sub_result-1))
{ case 0: ;
break;
case 1: c[k]=sub_result-1+'0';
break;
case -1: return 0;
break;
}
}
}
else
if ((i<0) && (j>=0))
{ return 0;
}
else
if ((i>0) && (j<0))
{ if (flag[k]==0)
c[k]=a[i];
else
{ if (a[i]>'0')
c[k]=a[i]-1;
else
{ c[k]='9';
flag[k-1]=1;
}
}
}
}
}
Convert(c,d,MAX);
strcpy(a,d);
(*count)++;
return 1;
}
//The Copy function , a number_string to another , wipe off the inutility symbol
int Copy(char a[],int a_l,char c[])
{ int i,j,c_l=strlen(c);
for (i=0; i<a_l-c_l; i++)
a[i]=MARK;
for (i,j=0; j<c_l; i++,j++)
a[i]=c[j];
return 1;
}
//The Compare function ,compare two numbers and return the result
int Compare(char a[],char b[])
{// char c[MAX];
if ((strlen(a))>(strlen(b)))
return 1;
if ((strlen(a))==(strlen(b)))
return (strcmp(a,b));
//if ((strlen(a))<(strlen(b)))
return -1;
}
//The Value function , receiver a digit_char, and return the number
int Value(char c)
{ if (isdigit(c))
return (c-'0');
else return 0;
}
//The Data_Process function,
int Data_Process(char s[])
{ int p,head,tail=2*MAX-1;
for (head=0; s[head]==MARK ; head++)
;
for (p=tail; p>=head ; p--)
if (!isdigit(s[p]))
if (s[p-1]!=MARK)
{ s[p-1]+=(s[p]-'0')/10;
s[p]=(s[p]-'0')%10+'0';
}
else
{ s[p-1]=(s[p]-'0')/10+'0';
s[p]=(s[p]-'0')%10+'0';
}
return 1;
}
//The Judeg function , judge the symbol of the number
int Judge(int i)
{ if (i==0)
return 0;
else
if (i>0)
return 1;
else
return -1;
}
//The Convert function , convert the original result to the final result ,wipe off the inuility symbol and number
int Convert(char c[],char d[],int length)
{ int i,j;
for (i=0; i<length; i++)
if (c[i]==MARK || c[i]=='0')
;
else
break;
for (i,j=0; i<length; i++,j++)
d[j]=c[i];
d[j]='\0';
return 1;
}
Ⅲ 什麼是MySql資料庫
MySQL資料庫:
MySQL是一種開放源代碼的關系型資料庫管理系統(RDBMS),使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。
MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。
MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
資料庫簡介:
MySQL是一種開放源代碼的關系型資料庫管理系統(RDBMS),MySQL資料庫系統使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。
由於MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
MySQL這個名字,起源不是很明確。一個比較有影響的說法是,基本指南和大量的庫和工具帶有前綴「my」已經有10年以上,而且不管怎樣,MySQL AB創始人之一的Monty Widenius的女兒也叫My。這兩個到底是哪一個給出了MySQL這個名字至今依然是個迷,包括開發者在內也不知道。
MySQL的海豚標志的名字叫「sakila」,它是由MySQL AB的創始人從用戶在「海豚命名」的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲史瓦濟蘭的開源軟體開發者Ambrose Twebaze提供。根據Ambrose所說,Sakila來自一種叫SiSwati的史瓦濟蘭方言,也是在Ambrose的家鄉烏干達附近的坦尚尼亞的Arusha的一個小鎮的名字。
MySQL,雖然功能未必很強大,但因為它的開源、廣泛傳播,導致很多人都了解到這個資料庫。它的歷史也富有傳奇性。
MySQL資料庫歷史:
MySQL的歷史最早可以追溯到1979年,那時Oracle也才小打小鬧,微軟的SQL Server影子都沒有。有一個人叫Monty Widenius, 為一個叫TcX的小公司打工,並用BASIC設計了一個報表工具,可以在4M主頻和16KB內存的計算機上運行。過了不久,又將此工具,使用C語言重寫,移植到Unix平台,當時,它只是一個很底層的面向報表的存儲引擎。這個工具叫做Unireg。
可是,這個小公司資源有限,Monty天賦極高,面對資源有限的不利條件,他反而更能發揮潛能,總是力圖寫出最高效的代碼。並因此養成了習慣。與Monty同在一起的還有一些別的同事,很少有人能堅持把那些代碼持續寫到20年後,而Monty卻做到了。
1990年,TcX的customer 中開始有人要求要為它的API提供SQL支持,當時,有人想到了直接使用商用資料庫算了,但是Monty覺得商用資料庫的速度難令人滿意。於是,他直接藉助於mSQL的代碼,將它集成到自己的存儲引擎中。但不巧的是,效果並不太好。於是, Monty雄心大起,決心自己重寫一個SQL支持。
1996年,MySQL 1.0發布,只面向一小撥人,相當於內部發布。到了96年10月,MySQL 3.11.1發布了,呵呵,沒有2.x版本。最開始,只提供了Solaris下的二進製版本。一個月後,Linux版本出現了。
緊接下來的兩年裡,MySQL依次移植到各個平台下。它發布時,採用的許可策略,有些與眾不同:允許免費商用,但是不能將MySQL與自己的產品綁定在一起發布。如果想一起發布,就必須使用特殊許可,意味著要花銀子。當然,商業支持也是需要花銀子的。其它的,隨用戶怎麼用都可以。這種特殊許可為MySQL帶來了一些收入,從而為它的持續發展打下了良好的基礎。(細想想,PostgreSQL曾經有幾年限入低谷,可能與它的完全免費,不受任何限制有關系)。
MySQL3.22應該是一個標志性的版本,提供了基本的SQL支持。
MySQL關系型資料庫於1998年1月發行第一個版本。它使用系統核心提供的多線程機制提供完全的多線程運行模式,提供了面向C、C++、Eiffel、Java、Perl、php、Python以及Tcl等編程語言的編程介面(APIs),支持多種欄位類型並且提供了完整的操作符支持查詢中的SELECT和WHERE操作。
MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。
1999-2000年,有一家公司在瑞典成立了,叫MySQL AB (AB是瑞典語「股份公司」的意思)。 雇了幾個人,與Sleepycat合作,開發出了 Berkeley DB引擎, 因為BDB支持事務處理,所以,MySQL從此開始支持事務處理了。
2000年4月,MySQL對舊的存儲引擎進行了整理,命名為MyISAM。同時,2001年,Heikiki Tuuri向MySQL提出建議,希望能集成他們的存儲引擎InnoDB,這個引擎同樣支持事務處理,還支持行級鎖。
如今,遺憾的是,BDB和InnoDB好像都被Oracle收購了,為了消滅競爭對手,哪怕是開源的,都是不擇手段。
MySQL與InnoDB的正式結合版本是4.0。
到了MySQL5.0,2003年12月,開始有View,存儲過程之類的東東,當然,其間, bug也挺多。
在2008年1月16號 MySQL被Sun公司收購。
最近,MySQL的創始人Monty Widenius已經向Sun提交了辭呈。head都要走了。
據說,被Sun收購的公司多薄命,不知道MySQL今後前途如何,希望一路走好。相信MySQL的生命力還是很長久的。
時至今日 mysql 和 php 的結合絕對是完美.很多大型的網站也用到mysql資料庫.mysql的發展前景是非常光明的!
MySQL常用命令:
1:使用SHOW語句找出在伺服器上當前存在什麼資料庫:
mysql> SHOW DATABASES;
2:2、創建一個資料庫MYSQLDATA
mysql> CREATE DATABASE MYSQLDATA;
3:選擇你所創建的資料庫
mysql> USE MYSQLDATA; (按回車鍵出現Database changed 時說明操作成功!)
4:查看現在的資料庫中存在什麼表
mysql> SHOW TABLES;
5:創建一個資料庫表
mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:顯示表的結構:
mysql> DESCRIBE MYTABLE;
7:往表中加入記錄
mysql> insert into MYTABLE values (」hyq」,」M」);
8:用文本方式將數據裝入資料庫表中(例如D:/mysql.txt)
mysql> LOAD DATA LOCAL INFILE 「D:/mysql.txt」 INTO TABLE MYTABLE;
9:導入.sql文件命令(例如D:/mysql.sql)
mysql>use database;
mysql>source d:/mysql.sql;
10:刪除表
mysql>drop TABLE MYTABLE;
11:清空表
mysql>delete from MYTABLE;
12:更新表中數據
mysql>update MYTABLE set sex=」f」 where name=』hyq』;
全局管理許可權對應解釋:
FILE: 在MySQL伺服器上讀寫文件。
PROCESS: 顯示或殺死屬於其它用戶的服務線程。
RELOAD: 重載訪問控製表,刷新日誌等。
SHUTDOWN: 關閉MySQL服務。
資料庫/數據表/數據列許可權:
ALTER: 修改已存在的數據表(例如增加/刪除列)和索引。
CREATE: 建立新的資料庫或數據表。
DELETE: 刪除表的記錄。
DROP: 刪除數據表或資料庫。
INDEX: 建立或刪除索引。
INSERT: 增加表的記錄。
SELECT: 顯示/搜索表的記錄。
UPDATE: 修改表中已存在的記錄。
特別的許可權:
ALL: 允許做任何事(和root一樣)。
USAGE: 只允許登錄–其它什麼也不允許做。
MySQL資料庫導入方法:
MySQL資料庫的導入,有兩種方法:
1) 先導出資料庫SQL腳本,再導入;
2) 直接拷貝資料庫目錄和文件。
在不同操作系統或MySQL版本情況下,直接拷貝文件的方法可能會有不兼容的情況發生。
所以一般推薦用SQL腳本形式導入。下面分別介紹兩種方法。
2. 方法一 SQL腳本形式
操作步驟如下:
2.1. 導出SQL腳本
在原資料庫伺服器上,可以用phpMyAdmin工具,或者mysqlmp命令行,導出SQL腳本。
2.1.1 用phpMyAdmin工具
導出選項中,選擇導出「結構」和「數據」,不要添加「DROP DATABASE」和「DROP TABLE」選項。
選中「另存為文件」選項,如果數據比較多,可以選中「gzipped」選項。
將導出的SQL文件保存下來。
2.1.2 用mysqlmp命令行
命令格式
mysqlmp -u 用戶名 -p 資料庫名 > 資料庫名.sql
範例:
mysqlmp -u root -p abc > abc.sql
(導出資料庫abc到abc.sql文件)
提示輸入密碼時,輸入該資料庫用戶名的密碼。
2.2. 創建空的資料庫
通過主控界面/控制面板,創建一個資料庫。假設資料庫名為abc,資料庫全權用戶為abc_f。
2.3. 將SQL腳本導入執行
同樣是兩種方法,一種用phpMyAdmin(mysql資料庫管理)工具,或者mysql命令行。
2.3.1 用phpMyAdmin工具
從控制面板,選擇創建的空資料庫,點「管理」,進入管理工具頁面。
在"SQL"菜單中,瀏覽選擇剛才導出的SQL文件,點擊「執行」以上載並執行。
注意:phpMyAdmin對上載的文件大小有限制,php本身對上載文件大小也有限制,如果原始sql文件
比較大,可以先用gzip對它進行壓縮,對於sql文件這樣的文本文件,可獲得1:5或更高的壓縮率。
gzip使用方法:
# gzip xxxxx.sql
得到
xxxxx.sql.gz文件。
提示輸入密碼時,輸入該資料庫用戶名的密碼。
3 直接拷貝
如果資料庫比較大,可以考慮用直接拷貝的方法,但不同版本和操作系統之間可能不兼容,要慎用。
3.1 准備原始文件
用tar打包為一個文件
3.2 創建空資料庫
3.3 解壓
在臨時目錄中解壓,如:
cd /tmp
tar zxf mydb.tar.gz
3.4 拷貝
將解壓後的資料庫文件拷貝到相關目錄
cd mydb/
cp * /var/lib/mysql/mydb/
對於FreeBSD:
cp * /var/db/mysql/mydb/
3.5 許可權設置
將拷貝過去的文件的屬主改為mysql:mysql,許可權改為660
chown mysql:mysql /var/lib/mysql/mydb/*
chmod 660 /var/lib/mysql/mydb/*
Mssql轉換mysql的方法:
1.導表結構
使用MySQL生成create腳本的方法。找到生成要導出的腳本,按MySQL的語法修改一下到MySQL資料庫中創建該表的列結構什麼的。
2.導表數據
在MSSQL端使用bcp導出文本文件:
bcp 「Select * FROM dbname.dbo.tablename;」 queryout tablename.txt -c -Slocalhostdb2005 -Usa
其中」"中是要導出的sql語句,-c指定使用 進行欄位分隔,使用 進行記錄分隔,-S指定資料庫伺服器及實例,-U指定用戶名,-P指定密碼.
在MySQL端使用mysqlimport 導入文本文件到相應表中
mysqlimport -uroot -p databasename /home/test/tablename.txt
其中-u指定用戶名,-p指定密碼,databasename指定資料庫名稱,表名與文件名相同
MySQL備份與恢復:
MySQL備份恢復數據的一般步驟
備份一個資料庫的例子:
1、備份前讀鎖定涉及的表
mysql>LOCK TABLES tbl1 READ,tbl1 READ,…
如果,你在mysqlmp實用程序中使用--lock-tables選項則不必使用如上SQL語句。
2、導出資料庫中表的結構和數據
shell>mysqlmp --opt db_name>db_name.sql
3、啟用新的更新日誌
shell>mysqladmin flush-logs
這樣可以記錄你備份後的數據改變為恢復數據准備。
4、解除表的讀鎖
mysql>UNLOCK TABLES;
為了加速上述過程,你可以這樣做:
shell> mysqlmp --lock-tables --opt db_name>db_name.sql; mysqladmin flush-logs
但是這樣可能會有點小問題。上命令在啟用新的更新日誌前就恢復表的讀鎖,
在更新繁忙的站點,可能有備份後的更新數據沒有記錄在新的日誌中。
現在恢復上面備份的資料庫
1、對涉及的表使用寫鎖
mysql>LOCK TABLES tbl1 WRITE,tbl1 WRITE,…
2、恢復備份的數據
shell>mysql db_name < db_name.sql
3、恢復更新日誌的內容
shell>mysql --one-database db_name < hostname.nnn
假設需要使用的日誌名字為hostname.nnn
4、啟用新的更新日誌
shell>mysqladmin flush-logs
5、解除表的寫鎖
mysql>UNLOCK TABLES;
希望上面的例子能給你啟發,因為備份數據的手法多種多樣,你所使用的和上面所述可能大不一樣,但是對於備份和恢復中,表的鎖定、啟用新的更新日誌的時機應該是類似的,仔細考慮這個問題。
MySQL資料庫優化:
選擇InnoDB作為存儲引擎
大型產品的資料庫對於可靠性和並發性的要求較高,InnoDB作為默認的MySQL存儲引擎,相對於MyISAM來說是個更佳的選擇。
優化資料庫結構
組織資料庫的schema、表和欄位以降低I/O的開銷,將相關項保存在一起,並提前規劃,以便隨著數據量的增長,性能可以保持較高的水平。
設計數據表應盡量使其佔用的空間最小化,表的主鍵應盡可能短。·對於InnoDB表,主鍵所在的列在每個輔助索引條目中都是可復制的,因此如果有很多輔助索引,那麼一個短的主鍵可以節省大量空間。
僅創建你需要改進查詢性能的索引。索引有助於檢索,但是會增加插入和更新操作的執行時間。
InnoDB的ChangeBuffering特性
InnoDB提供了changebuffering的配置,可減少維護輔助索引所需的磁碟I/O。大規模的資料庫可能會遇到大量的表操作和大量的I/O,以保證輔助索引保持最新。當相關頁面不在緩沖池裡面時,InnoDB的changebuffer將會更改緩存到輔助索引條目,從而避免因不能立即從磁碟讀取頁面而導致耗時的I/O操作。當頁面被載入到緩沖池時,緩沖的更改將被合並,更新的頁面之後會刷新到磁碟。這樣做可提高性能,適用於MySQL5.5及更高版本。
InnoDB頁面壓縮
InnoDB支持對表進行頁面級的壓縮。當寫入數據頁的時候,會有特定的壓縮演算法對其進行壓縮。壓縮後的數據會寫入磁碟,其打孔機制會釋放頁面末尾的空塊。如果壓縮失敗,數據會按原樣寫入。表和索引都會被壓縮,因為索引通常是資料庫總大小中佔比很大的一部分,壓縮可以顯著節約內存,I/O或處理時間,這樣就達到了提高性能和伸縮性的目的。它還可以減少內存和磁碟之間傳輸的數據量。MySQL5.1及更高版本支持該功能。
注意,頁面壓縮並不能支持共享表空間中的表。共享表空間包括系統表空間、臨時表空間和常規表空間。
使用批量數據導入
在主鍵上使用已排序的數據源進行批量數據的導入可加快數據插入的過程。否則,可能需要在其他行之間插入行以維護排序,這會導致磁碟I/O變高,進而影響性能,增加頁的拆分。關閉自動提交的模式也是有好處的,因為它會為每個插入執行日誌刷新到磁碟。在批量插入期間臨時轉移唯一鍵和外鍵檢查也可顯著降低磁碟I/O。對於新建的表,最好的做法是在批量導入後創建外鍵/唯一鍵約束。
一旦你的數據達到穩定的大小,或者增長的表增加了幾十或幾百兆位元組,就應該考慮使用OPTIMIZETABLE語句重新組織表並壓縮浪費的空間。對重新組織後的表進行全表掃描所需要的I/O會更少。
優化InnoDB磁碟I/O
增加InnoDB緩沖池大小可以讓查詢從緩沖池訪問而不是通過磁碟I/O訪問。通過調整系統變數innodb_flush_method來調整清除緩沖的指標使其達到最佳水平。
MySQL的內存分配
在為MySQL分配足夠的內存之前,請考慮不同領域對MySQL的內存需求。要考慮的關鍵領域是:並發連接——對於大量並發連接,排序和臨時表將需要大量內存。在撰寫本文時,對於處理3000+並發連接的資料庫,16GB到32GB的RAM是足夠的。
內存碎片可以消耗大約10%或更多的內存。像innodb_buffer_pool_size、key_buffer_size、query_cache_size等緩存和緩沖區要消耗大約80%的已分配內存。
日常維護
定期檢查慢的查詢日誌並優化查詢機制以有效使用緩存來減少磁碟I/O。優化它們,以掃描最少的行數,而不是進行全表掃描。
其他可以幫助DBA檢查和分析性能的日誌包括:錯誤日誌、常規查詢日誌、二進制日誌、DDL日誌(元數據日誌)。
定期刷新緩存和緩沖區以降低碎片化。使用OPTIMIZETABLE語句重新組織表並壓縮任何可能被浪費的空間。
Ⅳ 編程高手幫我看下,我只要演算法就行!
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>
#define MAX 1000
#define MARK ('0'-1)
//The Prototypes of the functions
char* Initialiaze(char [],int);
char* Addition(char[],char[]);
char* Substraction(char[],char[]);
char* Multiplication(char[],char[]);
char* Division(char[],char[]);
char Div_per_bit(char [],int , char []);
int Sub_per_bit(char [],char [],int *);
int Copy(char [],int ,char []);
int Compare(char [],char []);
int Data_Process(char []);
int Value(char);
int Compare(char [],char []);
int Judge(int);
int Convert(char [],char [],int);
int main()
{ char a[MAX],b[MAX];
printf("a(length<%d):",MAX);
gets(a);
printf("b(length<%d):",MAX);
gets(b);
printf("\n");
printf("a+b=%s\n",Addition(a,b));
printf("a-b=%s\n",Substraction(a,b));
printf("a*b=%s\n",Multiplication(a,b));
printf("a/b=%s\n",Division(a,b));
return 0;
}
//The Iniatilize function ,initialize the result number before calculation
char* Initialize(char s[],int length)
{ int i;
for (i=0; i<length; i++)
s[i]=MARK;
return s;
}
//The Addition function , add two operands and return the result
char* Addition(char a[],char b[])
{ char c[2*MAX],d[2*MAX];
int i,j,k,a_length,b_length;
Initialize(c,2*MAX);
a_length=strlen(a);
b_length=strlen(b);
for (i=a_length-1,j=b_length-1,k=2*MAX-1; ( i>=0 || j>=0 ) ; i--,j--,k--)
{ if ( i>=0 && j>=0 )
c[k]=Value(a[i])+Value(b[j])+'0';
else
if (i>=0 && j<0 )
c[k]=Value(a[i])+'0';
else
if ( i<0 && j>=0 )
c[k]=Value(b[j])+'0';
}
Data_Process(c);
Convert(c,d,2*MAX);
return d;
}
//The Substraction function , substract one operand from another operand , and return the result
char* Substraction(char a[],char b[])
{ char c[2*MAX],d[2*MAX];
int i,j,k,a_length,b_length,sub_result,symbol,flag[2*MAX]={0};
Initialize(c,2*MAX);
a_length=strlen(a);
b_length=strlen(b);
if (strcmp(a,b)==0)
return ("0");
for (i=a_length-1,j=b_length-1,k=2*MAX-1; ( i>=0 || j>=0 ) ; i--,j--,k--)
{ sub_result=a[i]-b[j];
symbol=Judge(sub_result);
if (i>=1 && j>=0)
{ if (flag[k]==0)
{ if (a[i]>=b[j])
c[k]=sub_result+'0';
else
{ c[k]=sub_result+10+'0';
flag[k-1]=1;
}
}
else
{ if (a[i]-b[j]>=1)
c[k]=sub_result-1+'0';
else
{ c[k]=sub_result+9+'0';
flag[k-1]=1;
}
}
}
else
if (i==0 && j<0)
{
if (flag[k]==0)
c[k]=a[i];
else
{ if (a[i]==1)
;
else
c[k]=a[i]-1;
}
}
else
{ if ((i==0) && (j==0))
{ if (flag[k]==0)
{ switch (symbol)
{ case 0: ;
break;
case 1: c[k]=sub_result+'0';
break;
case -1: return NULL;
break;
}
}
else
{ switch (Judge(sub_result-1))
{ case 0: ;
break;
case 1: c[k]=sub_result-1+'0';
break;
case -1: return NULL;
break;
}
}
}
else
if ((i<0) && (j>=0))
return NULL;
else
if ((i>0) && (j<0))
{ if (flag[k]==0)
c[k]=a[i];
else
{ if (a[i]>'0')
c[k]=a[i]-1;
else
{ c[k]='9';
flag[k-1]=1;
}
}
}
}
}
Convert(c,d,2*MAX);
return d;
}
//The Multiplication function,multipy two operands and return the result
char* Multiplication(char a[],char b[])
{ char c[2*MAX],d[2*MAX];
int i,j,k,p,a_length,b_length;
Initialize(c,2*MAX);
a_length=strlen(a);
b_length=strlen(b);
for (j=b_length-1; j>=0 ; j--)
{ k=2*MAX-(b_length-j);
for (i=a_length-1,p=k; i>=0; i--,p--)
if (c[p]==MARK)
{ c[p]=(Value(a[i]))*(Value(b[j]))%10+'0';
if (c[p-1]==MARK)
c[p-1]=(Value(a[i]))*(Value(b[j]))/10+'0';
else
c[p-1]+=(Value(a[i]))*(Value(b[j]))/10;
}
else
{ c[p]+=(Value(a[i]))*(Value(b[j]))%10;
if (c[p-1]==MARK)
c[p-1]=(Value(a[i]))*(Value(b[j]))/10+'0';
else
c[p-1]+=(Value(a[i]))*(Value(b[j]))/10;
}
Data_Process(c);
}
Convert(c,d,2*MAX);
return d;
}
//The Division function,divise one operand from another operand, and return the result
char* Division(char a[],char b[])
{ char a1[MAX],c[MAX],d[MAX];
strcpy(a1,a);
int i,k,a_length=strlen(a1),b_length=strlen(b);
for (i=0; b[i]; i++)
if (b[i]!='0')
break;
if ((unsigned int)i==strlen(b))
{ printf("Error!\nIf you do division,the dividend must not equal to zero!\n");
return 0;
}
if (Compare(a,b)==-1)
{ printf("Error!\nIf you do division, A must bigger than B!\n");
return 0;
}
for ( i=0,k=0; k<a_length-b_length+1; i++,k++)
c[k]=Div_per_bit(a1,b_length+i,b);
c[k]='\0';
Convert(c,d,MAX);
return d;
}
//The Div_per_bit function , calculate quotient per digit ,and return the result to Division function
char Div_per_bit(char a[],int a_l,char b[])
{ int i,j;
char c[MAX];
for (i=0,j=0; i<a_l; i++)
if ( a[i]!=MARK)
{ c[j]=a[i];
j++;
}
c[j]='\0';
for (i=0; c[i]; i++)
if (c[i]!='0')
break;
if ((unsigned int)i==strlen(c))
return '0';
if (Compare(c,b)<0)
return '0';
if (Compare(c,b)==0)
{ for ( i=0; i<a_l; i++)
a[i]=MARK;
return '1';
}
i=0;
while (Compare(c,b)>=0)
Sub_per_bit(c,b,&i);
Copy(a,a_l,c);
return ('0'+i);
}
//The Sub_per_bit function, do the division by using substraction time after time
int Sub_per_bit(char a[],char b[],int *count)
{ char c[MAX],d[MAX];
int i,j,k,a_length,b_length,sub_result,symbol,flag[MAX]={0};
Initialize(c,MAX);
a_length=strlen(a);
b_length=strlen(b);
if (strcmp(a,b)==0)
strcpy(c,"0");
for (i=a_length-1,j=b_length-1,k=MAX-1; ( i>=0 || j>=0 ) ; i--,j--,k--)
{ sub_result=a[i]-b[j];
symbol=Judge(sub_result);
if (i>=1 && j>=0)
{ if (flag[k]==0)
{ if (a[i]>=b[j])
c[k]=sub_result+'0';
else
{ c[k]=sub_result+10+'0';
flag[k-1]=1;
}
}
else
{ if (a[i]-b[j]>=1)
c[k]=sub_result-1+'0';
else
{ c[k]=sub_result+9+'0';
flag[k-1]=1;
}
}
}
else
if (i==0 && j<0)
{
if (flag[k]==0)
c[k]=a[i];
else
{ if (a[i]==1)
;
else
c[k]=a[i]-1;
}
}
else
{ if ((i==0) && (j==0))
{ if (flag[k]==0)
{ switch (symbol)
{ case 0: ;
break;
case 1: c[k]=sub_result+'0';
break;
case -1: return 0;
break;
}
}
else
{ switch (Judge(sub_result-1))
{ case 0: ;
break;
case 1: c[k]=sub_result-1+'0';
break;
case -1: return 0;
break;
}
}
}
else
if ((i<0) && (j>=0))
{ return 0;
}
else
if ((i>0) && (j<0))
{ if (flag[k]==0)
c[k]=a[i];
else
{ if (a[i]>'0')
c[k]=a[i]-1;
else
{ c[k]='9';
flag[k-1]=1;
}
}
}
}
}
Convert(c,d,MAX);
strcpy(a,d);
(*count)++;
return 1;
}
//The Copy function , a number_string to another , wipe off the inutility symbol
int Copy(char a[],int a_l,char c[])
{ int i,j,c_l=strlen(c);
for (i=0; i<a_l-c_l; i++)
a[i]=MARK;
for (i,j=0; j<c_l; i++,j++)
a[i]=c[j];
return 1;
}
//The Compare function ,compare two numbers and return the result
int Compare(char a[],char b[])
{// char c[MAX];
if ((strlen(a))>(strlen(b)))
return 1;
if ((strlen(a))==(strlen(b)))
return (strcmp(a,b));
//if ((strlen(a))<(strlen(b)))
return -1;
}
//The Value function , receiver a digit_char, and return the number
int Value(char c)
{ if (isdigit(c))
return (c-'0');
else return 0;
}
//The Data_Process function,
int Data_Process(char s[])
{ int p,head,tail=2*MAX-1;
for (head=0; s[head]==MARK ; head++)
;
for (p=tail; p>=head ; p--)
if (!isdigit(s[p]))
if (s[p-1]!=MARK)
{ s[p-1]+=(s[p]-'0')/10;
s[p]=(s[p]-'0')%10+'0';
}
else
{ s[p-1]=(s[p]-'0')/10+'0';
s[p]=(s[p]-'0')%10+'0';
}
return 1;
}
//The Judeg function , judge the symbol of the number
int Judge(int i)
{ if (i==0)
return 0;
else
if (i>0)
return 1;
else
return -1;
}
//The Convert function , convert the original result to the final result ,wipe off the inuility symbol and number
int Convert(char c[],char d[],int length)
{ int i,j;
for (i=0; i<length; i++)
if (c[i]==MARK || c[i]=='0')
;
else
break;
for (i,j=0; i<length; i++,j++)
d[j]=c[i];
d[j]='\0';
return 1;
}
Ⅳ 演算法案例(一)(V2.0)種子下載地址有么好人一生平安
演算法案例(一)(V2.0)種子下載地址:
Ⅵ 求解碼!!!
你腦殘。
Ⅶ LAMP環境下,mysql是一台單獨的的機器只用來提供資料庫服務。如何在web的機器設置資料庫的訪問路徑
MySQL名字的來歷
MySQL最初的開發者的意圖是用mSQL和他們自己的快速低級常式(ISAM)去連接表格。不管怎樣,在經過一些測試後,開發者得出結論:mSQL並沒有他們需要的那麼快和靈活。這導致了一個使用幾乎和mSQL一樣的API介面的用於他們的資料庫的新的SQL介面的產生,這樣,這個API被設計成允許為用於mSQL而寫的第三方代碼更容易移植到MySQL。
MySQL這個名字是怎麼來的已經不清楚了。基本指南和大量的庫和工具帶有前綴「my」已經有10年以上,而且不管怎樣,MySQL AB創始人之一的Monty Widenius的女兒也叫My。這兩個到底是哪一個給出了MySQL這個名字至今依然是個迷,包括開發者在內也不知道。
MySQL的海豚標志的名字叫「sakila」,它是由MySQL AB的創始人從用戶在「海豚命名」的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲史瓦濟蘭的開源軟體開發者Ambrose Twebaze提供。根據Ambrose所說,Sakila來自一種叫SiSwati的史瓦濟蘭方言,也是在Ambrose的家鄉烏干達附近的坦尚尼亞的Arusha的一個小鎮的名字。
[編輯本段]MySQL的概述
MySQL是一個小型關系型資料庫管理系統,開發者為瑞典MySQL AB公司。在2008年1月16號被Sun公司收購。目前MySQL被廣泛地應用在Internet上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站資料庫。MySQL的官方網站的網址是:
[編輯本段]MySQL的特性
1.使用C和C++編寫,並使用了多種編譯器進行測試,保證源代碼的可移植性
2.支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統
3.為多種編程語言提供了API。這些編程語言包括C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。
4.支持多線程,充分利用CPU資源
5.優化的SQL查詢演算法,有效地提高查詢速度
6.既能夠作為一個單獨的應用程序應用在客戶端伺服器網路環境中,也能夠作為一個庫而嵌入到其他的軟體中提供多語言支持,常見的編碼如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作數據表名和數據列名
7.提供TCP/IP、ODBC和JDBC等多種資料庫連接途徑
8.提供用於管理、檢查、優化資料庫操作的管理工具
9.可以處理擁有上千萬條記錄的大型資料庫
[編輯本段]MySQL的應用
與其他的大型資料庫例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之處,如規模小、功能有限(MySQL Cluster的功能和效率都相對比較差)等,但是這絲毫也沒有減少它受歡迎的程度。對於一般的個人使用者和中小型企業來說,MySQL提供的功能已經綽綽有餘,而且由於MySQL是開放源碼軟體,因此可以大大降低總體擁有成本。
目前Internet上流行的網站構架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作為操作系統,Apache作為Web伺服器,MySQL作為資料庫,PHP作為伺服器端腳本解釋器。由於這四個軟體都是遵循GPL的開放源碼軟體,因此使用這種方式不用花一分錢就可以建立起一個穩定、免費的網站系統。
[編輯本段]MySQL管理
可以使用命令行工具管理MySQL資料庫(命令mysql 和 mysqladmin),也可以從MySQL的網站下載圖形管理工具MySQL Administrator和MySQL Query Browser。
phpMyAdmin是由php寫成的MySQL資料庫系統管理程式,讓管理者可用Web介面管理MySQL資料庫。
phpMyBackupPro也是由PHP寫成的,可以透過Web介面創建和管理資料庫。它可以創建偽cronjobs,可以用來自動在某個時間或周期備份MySQL 資料庫。
另外,還有其他的GUI管理工具,例如早先的mysql-front 以及 ems mysql manager,navicat 等等。
[編輯本段]Mysql存儲引擎
MyISAM Mysql的默認資料庫,最為常用。擁有較高的插入,查詢速度,但不支持事務
InnoDB 事務型資料庫的首選引擎,支持ACID事務,支持行級鎖定
BDB 源自Berkeley DB,事務型資料庫的另一種選擇,支持COMMIT和ROLLBACK等其他事務特性
Memory 所有數據置於內存的存儲引擎,擁有極高的插入,更新和查詢效率。但是會佔用和數據量成正比的內存空間。並且其內容會在Mysql重新啟動時丟失
Merge 將一定數量的MyISAM表聯合而成一個整體,在超大規模數據存儲時很有用
Archive 非常適合存儲大量的獨立的,作為歷史記錄的數據。因為它們不經常被讀取。Archive擁有高效的插入速度,但其對查詢的支持相對較差
Federated 將不同的Mysql伺服器聯合起來,邏輯上組成一個完整的資料庫。非常適合分布式應用
Cluster/NDB 高冗餘的存儲引擎,用多台數據機器聯合提供服務以提高整體性能和安全性。適合數據量大,安全和性能要求高的應用
CSV 邏輯上由逗號分割數據的存儲引擎
BlackHole 黑洞引擎,寫入的任何數據都會消失,一般用於記錄binlog做復制的中繼
另外,Mysql的存儲引擎介面定義良好。有興趣的開發者通過閱讀文檔編寫自己的存儲引擎。
[編輯本段]Mysql最常見的應用架構
單點(Single),適合小規模應用
復制(Replication),適合中小規模應用
集群(Cluster),適合大規模應用
[編輯本段]mysql歷史版本
MySQL公司目前在同時開發兩個版本的軟體,4.1版以及5.0版。4.1版本的代碼已經發布並有望在8個月後公布最終代碼。而5.0版本的最後產品將在6個月後發布。
MySQL4.1版本中增加了不少新的性能,包括對主鍵的更高速度的緩存,對子查詢的更好的支持,以及應網路約會網站所要求的,基於地理信息的查詢。
而其同步開發的5.0版本則把目標對准了企業用戶,對於4.1版本中的所有新特性,5.0版本悉數收入囊中,並且獨具以下特點:對外鍵的良好支持;系統自動報錯機制以及對存儲過程的充分支持。
Mysql現在現已開發出5.1版本支持視圖!
[編輯本段]Mysql中文視頻教學
左光華的mysql網路資料庫開發教學視頻
Mysql6.0的alpha版於2007年初發布,新版增加了對falcon存儲引擎的支持。Falcon是Mysql社區自主開發的引擎,支持ACID特性事務,支持行鎖,擁有高性能的並發性。Mysql AB公司想用Falcon替代已經非常流行的InnoDB引擎,因為擁有後者技術的InnoBase已經被競爭對手Oracle所收購。
2008年1月16日,Sun Microsystems宣布收購MySQL AB,出價約10億美元現金包括期權。
[編輯本段]MySQL的基本命令
[ ]中的內容為可選項
--創建資料庫
mysql> create database 資料庫名稱
--創建表
mysql> create table 表名 (
列的名字(id)類型(int(4))primary key(定義主鍵) auto_increment(描述 自增),
……,
);
--查看所有資料庫
mysql> show databases 資料庫名稱;
--使用某個資料庫
mysql> use database 資料庫名稱;
--查看所使用資料庫下所有的表
mysql> show tables;
--顯示表的屬性結構
mysql> desc 表名;
--選擇表中數據的顯示
--* 代表選擇所有列 ,
mysql> select * from 表名 where id=?[and name=?] [or name=?];
mysql> select id,name from 表名order by 某一列的名稱 desc(降序,asc為升序)
--刪除表中的數據
mysql> delete from table where id=?[or name=? (and name=?)];
--刪除表
mysql> drop table;
--刪除資料庫
mysql> drop database;
索引是一種特殊的文件(InnoDB數據表上的索引是表空間的一個組成部分),它們包含著對數據表裡所有記錄的引用指針。
註:[1]索引不是萬能的!索引可以加快數據檢索操作,但會使數據修改操作變慢。每修改數據記錄,索引就必須刷新一次。為了在某種程序上彌補這一缺陷,許多SQL命令都有一個DELAY_KEY_WRITE項。這個選項的作用是暫時制止 MySQL在該命令每插入一條新記錄和每修改一條現有之後立刻對索引進行刷新,對索引的刷新將等到全部記錄插入/修改完畢之後再進行。在需要把許多新記錄插入某個數據表的場合,DELAY_KEY_WRITE選項的作用將非常明顯。[2]另外,索引還會在硬碟上佔用相當大的空間。因此應該只為最經常查詢和最經常排序的數據列建立索引。注意,如果某個數據列包含許多重復的內容,為它建立索引就沒有太大的實際效果。
從理論上講,完全可以為數據表裡的每個欄位分別建一個索引,但MySQL把同一個數據表裡的索引總數限制為16個。
1. InnoDB數據表的索引
與MyISAM數據表相比,在 InnoDB數據表上,索引對InnoDB數據表的重要性要在得多。在InnoDB數據表上,索引不僅會在搜索數據記錄時發揮作用,還是數據行級鎖定機制的苊、基礎。"數據行級鎖定"的意思是指在事務操作的執行過程中鎖定正在被處理的個別記錄,不讓其他用戶進行訪問。這種鎖定將影響到(但不限於)SELECT...LOCK IN SHARE MODE、SELECT...FOR UPDATE命令以及INSERT、UPDATE和DELETE命令。
出於效率方面的考慮,InnoDB數據表的數據行級鎖定實際發生在它們的索引上,而不是數據表自身上。顯然,數據行級鎖定機制只有在有關的數據表有一個合適的索引可供鎖定的時候才能發揮效力。
2. 限制
如果WEHERE子句的查詢條件里有不等號(WHERE coloum != ...),MySQL將無法使用索引。
類似地,如果WHERE子句的查詢條件里使用了函數(WHERE DAY(column) = ...),MySQL也將無法使用索引。
在JOIN操作中(需要從多個數據表提取數據時),MySQL只有在主鍵和外鍵的數據類型相同時才能使用索引。
如果WHERE子句的查詢條件里使用比較操作符LIKE和REGEXP,MySQL 只有在搜索模板的第一個字元不是通配符的情況下才能使用索引。比如說,如果查詢條件是LIKE 'abc%',MySQL將使用索引;如果查詢條件是LIKE '%abc',MySQL將不使用索引。
在ORDER BY操作中,MySQL只有在排序條件不是一個查詢條件表達式的情況下才使用索引。(雖然如此,在涉及多個數據表查詢里,即使有索引可用,那些索引在加快ORDER BY方面也沒什麼作用)
如果某個數據列里包含許多重復的值,就算為它建立了索引也不會有很好的效果。比如說,如果某個數據列里包含的凈是些諸如"0/1"或"Y/N"等值,就沒有必要為它創建一個索引。
普通索引、唯一索引和主索引
1. 普通索引
普通索引(由關鍵字KEY或INDEX定義的索引)的唯一任務是加快對數據的訪問速度。因此,應該只為那些最經常出現在查詢條件(WHERE column = ...)或排序條件(ORDER BY column)中的數據列創建索引。只要有可能,就應該選擇一個數據最整齊、最緊湊的數據列(如一個整數類型的數據列)來創建索引。
2. 唯一索引
普通索引允許被索引的數據列包含重復的值。比如說,因為人有可能同名,所以同一個姓名在同一個"員工個人資料"數據表裡可能出現兩次或更多次。
如果能確定某個數據列將只包含彼此各不相同的值,在為這個數據列創建索引的時候就應該用關鍵字UNIQUE把它定義為一個唯一索引。這么做的好處:一是簡化了MySQL對這個索引的管理工作,這個索引也因此而變得更有效率;二是 MySQL會在有新記錄插入數據表時,自動檢查新記錄的這個欄位的值是否已經在某個記錄的這個欄位里出現過了;如果是,MySQL將拒絕插入那條新記錄。也就是說,唯一索引可以保證數據記錄的唯一性。事實上,在許多場合,人們創建唯一索引的目的往往不是為了提高訪問速度,而只是為了避免數據出現重復。
3. 主索引
在前面已經反復多次強調過:必須為主鍵欄位創建一個索引,這個索引就是所謂的"主索引"。主索引與唯一索引的唯一區別是:前者在定義時使用的關鍵字是PRIMARY而不是UNIQUE。
4. 外鍵索引
如果為某個外鍵欄位定義了一個外鍵約束條件,MySQL就會定義一個內部索引來幫助自己以最有效率的方式去管理和使用外鍵約束條件。
5. 復合索引
索引可以覆蓋多個數據列,如像INDEX(columnA, columnB)索引。這種索引的特點是MySQL可以有選擇地使用一個這樣的索引。如果查詢操作只需要用到columnA數據列上的一個索引,就可以使用復合索引INDEX(columnA, columnB)。不過,這種用法僅適用於在復合索引中排列在前的數據列組合。比如說,INDEX(A, B, C)可以當做A或(A, B)的索引來使用,但不能當做B、C或(B, C)的索引來使用。
6. 索引的長度
在為CHAR和VARCHAR類型的數據列定義索引時,可以把索引的長度限制為一個給定的字元個數(這個數字必須小於這個欄位所允許的最大字元個數)。這么做的好處是可以生成一個尺寸比較小、檢索速度卻比較快的索引文件。在絕大多數應用里,資料庫中的字元串數據大都以各種各樣的名字為主,把索引的長度設置為10~15個字元已經足以把搜索范圍縮小到很少的幾條數據記錄了。
在為BLOB和TEXT類型的數據列創建索引時,必須對索引的長度做出限制;MySQL所允許的最大索引jlkjljkjlj全文索引
文本欄位上的普通索引只能加快對出現在欄位內容最前面的字元串(也就是欄位內容開頭的字元)進行檢索操作。如果欄位里存放的是由幾個、甚至是多個單詞構成的較大段文字,普通索引就沒什麼作用了。這種檢索往往以LIKE %word%的形式出現,這對MySQL來說很復雜,如果需要處理的數據量很大,響應時間就會很長。
這類場合正是全文索引(full-text index)可以大顯身手的地方。在生成這種類型的索引時,MySQL將把在文本中出現的所有單詞創建為一份清單,查詢操作將根據這份清單去檢索有關的數據記錄。全文索引即可以隨數據表一同創建,也可以等日後有必要時再使用下面這條命令添加:
ALTER TABLE tablename ADD FULLTEXT(column1, column2)
有了全文索引,就可以用SELECT查詢命令去檢索那些包含著一個或多個給定單詞的數據記錄了。下面是這類查詢命令的基本語法:
SELECT * FROM tablename
WHERE MATCH(column1, column2) AGAINST('word1', 'word2', 'word3')
上面這條命令將把column1和column2欄位里有word1、word2和word3的數據記錄全部查詢出來。
註解:InnoDB數據表不支持全文索引。
查詢和索引的優化
只有當資料庫里已經有了足夠多的測試數據時,它的性能測試結果才有實際參考價值。如果在測試資料庫里只有幾百條數據記錄,它們往往在執行完第一條查詢命令之後就被全部載入到內存里,這將使後續的查詢命令都執行得非常快--不管有沒有使用索引。只有當資料庫里的記錄超過了1000條、數據總量也超過了MySQL伺服器上的內存總量時,資料庫的性能測試結果才有意義。
在不確定應該在哪些數據列上創建索引的時候,人們從EXPLAIN SELECT命令那裡往往可以獲得一些幫助。這其實只是簡單地給一條普通的SELECT命令加一個EXPLAIN關鍵字作為前綴而已。有了這個關鍵字,MySQL將不是去執行那條SELECT命令,而是去對它進行分析。MySQL將以表格的形式把查詢的執行過程和用到的索引(如果有的話)等信息列出來。
在EXPLAIN命令的輸出結果里,第1列是從資料庫讀取的數據表的名字,它們按被讀取的先後順序排列。type列指定了本數據表與其它數據表之間的關聯關系(JOIN)。在各種類型的關聯關系當中,效率最高的是system,然後依次是const、eq_ref、ref、range、index和All(All的意思是:對應於上一級數據表裡的每一條記錄,這個數據表裡的所有記錄都必須被讀取一遍--這種情況往往可以用一索引來避免)。
possible_keys數據列給出了MySQL在搜索數據記錄時可選用的各個索引。key數據列是MySQL實際選用的索引,這個索引按位元組計算的長度在key_len數據列里給出。比如說,對於一個INTEGER數據列的索引,這個位元組長度將是4。如果用到了復合索引,在key_len數據列里還可以看到MySQL具體使用了它的哪些部分。作為一般規律,key_len數據列里的值越小越好(意思是更快)。
ref數據列給出了關聯關系中另一個數據表裡的數據列的名字。row數據列是MySQL在執行這個查詢時預計會從這個數據表裡讀出的數據行的個數。row數據列里的所有數字的乘積可以讓我們大致了解這個查詢需要處理多少組合。
最後,extra數據列提供了與JOIN操作有關的更多信息,比如說,如果MySQL在執行這個查詢時必須創建一個臨時數據表,就會在extra列看到using temporary字樣
[編輯本段]安裝MySQL時候的注意事項
1、如果您是用MySQL+Apache,使用的又是FreeBSD網路操作系統的話,安裝時候你應按注意到FreeBSD的版本問題,在FreeBSD的3.0以下版本來說,MySQL Source內含的MIT-pthread運行是正常的,但在這版本以上,你必須使用native threads,也就是加入一個with-named-thread-libs=-lc_r的選項。
2、如果您在COMPILE過程中出了問題,請先檢查你的gcc版本是否在2.81版本以上,gmake版本是否在3.75以上。
3、如果不是版本的問題,那可能是你的內存不足,請使用./configure -- with-low-memory來加入。
4、如果您要重新做你的configure,那麼你可以鍵入rm config.cache和make clean來清除記錄。
5、我們一般把MySQL安裝在/usr/local目錄下,這是預設值,您也可以按照你的需要設定你所安裝的目錄。
Ⅷ MYSQL是怎樣的一個資料庫
MySQL最初的開發者的意圖是用mSQL和他們自己的快速低級常式(ISAM)去連接表格。不管怎樣,在經過一些測試後,開發者得出結論:mSQL並沒有他們需要的那麼快和靈活。這導致了一個使用幾乎和mSQL一樣的API介面的用於他們的資料庫的新的SQL介面的產生,這樣,這個API被設計成允許為用於mSQL而寫的第三方代碼更容易移植到MySQL。 MySQL這個名字是怎麼來的已經不清楚了。基本指南和大量的庫和工具帶有前綴「my」已經有10年以上,而且不管怎樣,MySQL AB創始人之一的Monty Widenius的女兒也叫My。這兩個到底是哪一個給出了MySQL這個名字至今依然是個密,包括開發者在內也不知道。 MySQL的海豚標志的名字叫「sakila」,它是由MySQL AB的創始人從用戶在「海豚命名」的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲史瓦濟蘭的開源軟體開發者Ambrose Twebaze提供。根據Ambrose所說,Sakila來自一種叫SiSwati的史瓦濟蘭方言,也是在Ambrose的家鄉烏干達附近的坦尚尼亞的Arusha的一個小鎮的名字。編輯本段MySQL的概述 MySQL是一個小型關系型資料庫管理系統,開發者為瑞典MySQL AB公司。在2008年1月16號被Sun公司收購。目前MySQL被廣泛地應用在Internet上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,許多中小型網站為了降低網站總體擁有成本而選擇了MySQL作為網站資料庫。MySQL的官方網站的網址是: www.mysql.com 編輯本段MySQL的特性 1.使用C和C++編寫,並使用了多種編譯器進行測試,保證源代碼的可移植性 2.支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統 3.為多種編程語言提供了API。這些編程語言包括C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。 4.支持多線程,充分利用CPU資源 5.優化的SQL查詢演算法,有效地提高查詢速度 6.既能夠作為一個單獨的應用程序應用在客戶端伺服器網路環境中,也能夠作為一個庫而嵌入到其他的軟體中提供多語言支持,常見的編碼如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作數據表名和數據列名 7.提供TCP/IP、ODBC和JDBC等多種資料庫連接途徑 8.提供用於管理、檢查、優化資料庫操作的管理工具 9.可以處理擁有上千萬條記錄的大型資料庫編輯本段MySQL的應用 與其他的大型資料庫例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之處,如規模小、功能有限(MySQL Cluster的功能和效率都相對比較差)等,但是這絲毫也沒有減少它受歡迎的程度。對於一般的個人使用者和中小型企業來說,MySQL提供的功能已經綽綽有餘,而且由於MySQL是開放源碼軟體,因此可以大大降低總體擁有成本。 目前Internet上流行的網站構架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作為操作系統,Apache作為Web伺服器,MySQL作為資料庫,PHP作為伺服器端腳本解釋器。由於這四個軟體都是遵循GPL的開放源碼軟體,因此使用這種方式不用花一分錢就可以建立起一個穩定、免費的網站系統。編輯本段MySQL管理 可以使用命令行工具管理MySQL資料庫(命令mysql 和 mysqladmin),也可以從MySQL的網站下載圖形管理工具MySQL Administrator和MySQL Query Browser。 phpMyAdmin是由php寫成的MySQL資料庫系統管理程式,讓管理者可用Web介面管理MySQL資料庫。 phpMyBackupPro也是由PHP寫成的,可以透過Web介面創建和管理資料庫。它可以創建偽cronjobs,可以用來自動在某個時間或周期備份MySQL 資料庫。 另外,還有其他的GUI管理工具,例如早先的mysql-front 以及 ems mysql manager,navicat 等等。
Ⅸ 求2010年初級會計實務和經濟法基礎的習題班mp3課件和講義,中華和東奧的都可以,謝謝了
你是要考2011年的吧?
雖然變化不大,但變化的都是要點,尤其是稅務部分,改了幾個關鍵的地方。
所以你如果是要考試的話,不要用2010年的教材了。
發點經驗給你吧。
首先說說初級吧,初級考《初級會計實務》、《經濟法基礎》兩科,並且必須一次通過。
我很久以前就把初級考下來了,那時候有計算大題,綜合題,貌似2010年開始有不定項選擇代替了計算,我不知道是不是,建議大家找找歷年題。
《初級會計實務》,個人感覺《初級會計實務》比《中級會計實務》詳細一些,初級會計實務的主要內容是在企業中,一般會計業務中出現的,就是經常出現的一些經濟業務的會計處理,比如資產,負債,所有者權益,收入,成本,利潤等問題。其中資產涉及到應收應付,交易性金融資產,(好像2010年增加了投資性房地產)。不會涉及到非貨幣性資產交換,不會涉及到債務重組,長期股權投資等中級的知識。
從整體上說,初級會計實務不難,如果你的會計證是湖南,廣東,上海,北京這些地方考的,那麼初級對你來說重點就是經濟法基礎。如果你的會計證是河北,江蘇,陝西,河南,廣西等地考的,那麼初級會有難度,因為這些地方的會計證的賬務處理知識太少,我看過這些地方的教材,就一章涉及到賬務處理。
好了,說主題,初級會計實務的方法。
首先這本書分為兩大塊,前面是實務,後面是成本會計(以前還帶基礎,基礎所指的是比如憑證,賬簿,賬務處理程序,現在沒有這些了,直接從資產,負債開始。)
學會計常說的是歸納對比記特殊,
歸納,比如說資產,資產裡面的應收賬款,應收票據,其他應收款,其賬務處理差不多的,差別在於核算內容的不同。(說到這里我想起來,實務部分的編寫,大家拿到書,每章的黑體字都是從意義,賬務處理都是從初始計量----減值---處置這么寫下來的,大家也可以這么去歸納)
對比就是說,資產和負債可以對比,比如應收賬款與應付賬款,應收票據與應付票據,其他應收款與其他應付款,都是可以對比的。你在學負債的時候,你要去聯想資產是怎麼處理的。一筆經濟業務,你不僅要熟悉例如中本企業的賬務處理,還要想著對方企業的賬務處理,這樣能加深你的印象。
特殊,你比如交易性金融資產,沒什麼可以對比的,大體上按照資產的處理方式,這里我說幾點。這里要以公允價值後續計量,就會遇到「公允價值變動的問題」。尤其是會計賬務處理沒學過的。還不知道「交易性金融資產--公允價值變動」和「公允價值變動損益」的區別。注意,這里同投資性房地產一樣的,都涉及到二級科目。在這里,你關鍵是看一級科目,不要去死記。比如說,初始入賬成本100股的股票,成本為100,到了月底100股漲到了110.這就是說,交易性金融資產的公允價值上升,言外之意,就是資產增加了,資產增加記借方,借:交易性金融資產--公允價值變動,貸:公允價值變動。
上面的這個例子,就是對分錄的一種記憶,叫做「記一半」,就是說當你知道記什麼科目,而分不清記借方還是貸方的時候,你要邏輯判斷是什麼要素增加,什麼要素減少。
交易性金融資產還一個問題是投資收益問題,注意轉讓的投資收益(不包括收到股利或者利息),轉讓的投資收益有一種驗算,就是最終處置也就是賣出去的價格減去買進來的成本的數字,要等於處置時投資收益的數字(如果投資收益分兩步做,就注意投資收益加起來),不要去管中間的數字是如何變動的,因為中間的數字只涉及公允價值變動損益。
投資性房地產,這里我覺得考難題的可能性小,畢竟初級不是注冊會計師那麼強的綜合性。投資性房地產,你注意成本法和權益法的運用要求,還一個轉換問題,書上很詳細的,沒多少技術性的東西。核算范圍可能是選擇題考到的,注意一個產權來判斷投資性房地產。然後自用的轉為投資性房地產,和投資性房地產轉為自用的,這里有些麻煩。
然後是固定資產,無形資產,要注意了,這里最好放一起學,因為都涉及到初始計量,初始計量又都包括購買和自建/自創,後續計量都包括折舊或者攤銷,都包括處置。看書的時候在一起注意聯系區別。
再然後就是負債了,負債的難點我個人覺得是應付職工薪酬,尤其是物品的發放是個難點的地方,這里注意如果是商品就要視同銷售,注意視同銷售按照銷售價格來算,還是按照成本來算應付職工薪酬。注意一個稅。如果是固定資產,比如租用車或者房子給管理人員,注意折舊。然後應交稅費繞口,應交消費稅,注意是連續生產還是收回後直接對外出售。哪些是算營業稅金及附加科目,哪些是算入管理費用,這里一定要注意,也是選擇愛考的。
接下來是所有者權益,這里內容也少,好理解,沒多少可講的地方,注意利潤分配和資本公積吧。注意資本公積涉及到還挺多,你比如投資性房地產的某類經濟業務,與資本公積有聯系,注意核算范圍。然後利潤分配和未分配利潤吧,這里也有點特殊,沒什麼對比的。
收入,注意代銷,在做代銷的時候,注意是買斷的還是代理的,這里兩種情況。還有建造合同。注意銷售收入確認的時間,一定要注意,比如廣告收入,會員收入的確認時間,是比較重要的。
成本費用,記少不記多,記住財務費用的核算內容吧。其他的銷售費用是與銷售有關的。除開財務費用和銷售費用,其他都是管理費用了。
利潤,記住分布式利潤表,書上會給一張表,不要去死記公式,把表,表上每一步都有黑體字,記住黑體字,按照順序最後算到凈利潤,每一步計算包括什麼,不包括什麼。
財務報表,注意,這個年年考,到底是考資產負債表,還是考利潤表,還是考現金流量表,要注意。
資產負債表,如果考這個,那麼你發了,財務報表肯定考的,重點是些對分錄。財務報表也會考客觀。
注意按照什麼數字,到底是根據科目合計呢,還是要減,還是根據明細記,還是計算分析填列。建議大家仔細看看,你比如貨幣資金要根據銀行存款,三個月內到期的,現金等合計填列。當然不只這一個。
主要注意應收賬款,應付賬款,預收賬款,預付賬款的填列。這里你記的時候也有一個方法,就是前面所說的4個科目外。其他科目填列的方式都根據類型的,比如某一類的相似的科目就去記。
關於後面的成本,這里不難,不復雜,注意借貸會就一般會,成本要計算的有。
輔助成本分配問題,在產品與完工產品(尤其是約當產量的問題),品種法,分批法,分步法(三種主要方法),然後副產品和聯產品。
成本的演算法關鍵是分配率,分配率就是說幾種產品耗用,要計算出分配率就是關鍵問題。只要你算出是個整數,就對了。
輔助成本分配的問題,注意是順序分配還是交互分配。
在產品完工產品約當產量注意,約當產量的問題,注意書上原材料是一次投入,還是每一步開始一次投入,還是隨著進度陸續投入,這個就注意了。還要注意一種方法就是消耗定額。
品種法,一般不會考,把分錄全部寫出來,然後成本費用類科目歸集。
分批法注意表,最重要的是簡化的分批法,就是完工了才歸集。
分步法注意還原。
這里說說成本看錶的問題吧。
一定要注意,一張表,豎著看是加法減法的問題,一定要按照 月初+本月=在產+完工。
斜著看,就是算分配率的問題,是除法。
經濟法基礎:
2010年與2009年比,改了一章。
准確的說經濟法基礎是包括了稅,這里沒啥說的。
學稅,一定要注意,計稅基礎,初級的經濟法基礎的稅,大題出起來肯定不復雜。與注冊會計師的稅法比,判斷的東西部多。
學稅好歸納的地方是,稅是按照定義,徵收對象,納稅范圍,納稅義務人,計稅基礎,納稅時間,納稅地點,稅收優惠,這么一個順序這么列下來的。
所以你有空的話,自己羅列一下。