linuxCsqlite3mysql_MySQL
<code class="hljs perl">/* ********** gcc main.c -lsqlite3 -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient ************ SQLITE_OK = 0; 返回成功 SQLITE_ERROR = 1; SQL错误或错误的数据库 SQLITE_INTERNAL = 2; An internal logic error in SQLite SQLITE_PERM = 3; 拒绝访问 SQLITE_ABORT = 4; 回调函数请求中断 SQLITE_BUSY = 5; 数据库文件被锁 SQLITE_LOCKED = 6; 数据库中的一个表被锁 SQLITE_NOMEM = 7; 内存分配失败 SQLITE_READONLY = 8; 试图对一个只读数据库进行写操作 SQLITE_INTERRUPT = 9; 由sqlite_interrupt()结束操作 SQLITE_IOERR = 10; 磁盘I/O发生错误 SQLITE_CORRUPT = 11; 数据库磁盘镜像畸形 SQLITE_NOTFOUND = 12; (Internal Only)表或记录不存在 SQLITE_FULL = 13; 数据库满插入失败 SQLITE_CANTOPEN = 14; 不能打开数据库文件 SQLITE_PROTOCOL = 15; 数据库锁定协议错误 SQLITE_EMPTY = 16; (Internal Only)数据库表为空 SQLITE_SCHEMA = 17; 数据库模式改变 SQLITE_TOOBIG = 18; 对一个表数据行过多 SQLITE_CONSTRAINT = 19; 由于约束冲突而中止 SQLITE_MISMATCH = 20; 数据类型不匹配 SQLITE_MISUSE = 21; 数据库错误使用 SQLITE_NOLFS = 22; 使用主机操作系统不支持的特性 SQLITE_AUTH = 23; 非法授权 SQLITE_FORMAT = 24; 辅助数据库格式错误 SQLITE_RANGE = 25; 2nd parameter to sqlite_bind out of range SQLITE_NOTADB = 26; 打开的不是一个数据库文件 SQLITE_ROW = 100; sqlite_step() has another row ready SQLITE_DONE = 101; sqlite_step() has finished executing *************************************************************************************************** */ #include "DB.h" gseMutex dbMutex=GSE_MUTEX_INIT; static int IsUpdateAll = 0; static int iDelCount = 0; const int FREE_NUM = 1000; static int needVacuum = 0; int DBOpen(dbClass *sqlDB, const char *sqlName, char *localhost, char *user, char *password) { if(sqlDB == NULL || sqlName == NULL || 0 == strlen(sqlName)) { gseLog(L_ERROR,"NULL *p"); return -1; } int ret = 0; if(sqlDB->type == SQL_SQLITE3) { gseMutexLock(&dbMutex); sqlDB->db = (sqlite3 *)sqlDB->db; localhost = NULL; user = NULL; password = NULL; char sqlPathName[64]={0}; sprintf(sqlPathName, "%s", sqlName); ret = sqlite3_open(sqlPathName, (struct sqlite3 **)&(sqlDB->db)); if(ret != SQLITE_OK) { gseLog(L_ERROR,"ret = %d, Cannot open db: %s",ret,sqlite3_errmsg(sqlDB->db)); } gseMutexUnlock(&dbMutex); // gseLog(L_INFO,"Open database"); } else if(sqlDB->type == SQL_MYSQL) { #ifdef MYSQL_DEFINE sqlDB->db = (MYSQL *)sqlDB->db; if(localhost == NULL || user == NULL || password == NULL) { gseLog(L_ERROR,"localhost user password is NULL"); return -1; } char creatDbStr[64]={0}; char useDbStr[64]={0}; sprintf(creatDbStr, "create database %s", sqlName); sprintf(useDbStr, "use %s", sqlName); sqlDB->db= mysql_init(NULL); if (sqlDB->db== NULL) { gseLog(L_ERROR,"sqlOpen Error 1 %u: %s", mysql_errno(sqlDB->db), mysql_error(sqlDB->db)); exit(1); } if (mysql_real_connect(sqlDB->db, localhost, user, password, NULL, 0, NULL, 0) == NULL) { gseLog(L_ERROR,"sqlOpen Error 2 %u: %s", mysql_errno(sqlDB->db), mysql_error(sqlDB->db)); exit(1); } ret = mysql_query(sqlDB->db, creatDbStr); if (ret) { gseLog(L_ERROR,"sqlOpen Error 3 %u: %s", mysql_errno(sqlDB->db), mysql_error(sqlDB->db)); } ret = mysql_query(sqlDB->db, useDbStr); if (ret) { gseLog(L_ERROR,"sqlOpen Error 4 %u: %s", mysql_errno(sqlDB->db), mysql_error(sqlDB->db)); exit(1); } #endif } else { return -2; } return ret; } int DBClose(dbClass *sqlDB) { if(NULL == sqlDB || NULL == sqlDB->db) { return -1; } int ret = 0; if(sqlDB->type == SQL_SQLITE3) { gseMutexLock(&dbMutex); sqlDB->db = (sqlite3 *)sqlDB->db; ret = sqlite3_close(sqlDB->db); gseMutexUnlock(&dbMutex); } else if(sqlDB->type == SQL_MYSQL) { #ifdef MYSQL_DEFINE sqlDB->db = (MYSQL *)sqlDB->db; mysql_close(sqlDB->db); #endif } else { return -2; } // gseLog(L_INFO, "Close database"); return ret; } int DBCreate(dbClass *sqlDB, const char *tableName, char *creatValueStr) { if(sqlDB == NULL || tableName == NULL || creatValueStr == NULL || NULL == sqlDB->db || 0 == strlen(creatValueStr)) { gseLog(L_ERROR,"*db is NULL"); return -1; } char *errmsg = 0; int ret = 0; char createString[MAX_SQLSTR]={0}; if(strlen(creatValueStr) >= 1) creatValueStr[strlen(creatValueStr) - 1]='\0'; sprintf(createString, "create table %s(%s)", tableName,creatValueStr); //create table tb_cardId(cardID KEY, cardNum INT, endDate INT, password NVARCHAR(8)) memset(creatValueStr, 0, strlen(creatValueStr)); if(sqlDB->type == SQL_SQLITE3) { gseMutexLock(&dbMutex); sqlDB->db = (sqlite3 *)sqlDB->db; ret = sqlite3_exec(sqlDB->db,createString,NULL,NULL,&errmsg); if(ret != SQLITE_OK) { gseLog(L_ERROR,"ret = %d, create table fail: %s", ret, errmsg); } else gseLog(L_INFO, "create table %s success.", tableName); sqlite3_free(errmsg); gseMutexUnlock(&dbMutex); } else if(sqlDB->type == SQL_MYSQL) { #ifdef MYSQL_DEFINE sqlDB->db = (MYSQL *)sqlDB->db; ret = mysql_query(sqlDB->db, createString); if (ret) { gseLog(L_ERROR,"sqlCreate Error %u: %s", mysql_errno(sqlDB->db), mysql_error(sqlDB->db)); } #endif } else { return -2; } return ret; } int DBInsert(dbClass *sqlDB, const char *tableName, char *valuesString) { if(sqlDB == NULL || tableName == NULL || valuesString == NULL || NULL == sqlDB->db || 0 == strlen(valuesString)) { gseLog(L_ERROR,"*db is NULL"); return -1; } char *errmsg = 0; int ret = 0; char sqlInsetTable[MAX_SQLSTR]={0}; if(strlen(valuesString) >= 1) valuesString[strlen(valuesString)-1]='\0'; sprintf(sqlInsetTable, "insert into %s values(%s)",tableName,valuesString); //insert into tb_cardId values(1,124343223,20130101,'12345678'); memset(valuesString, 0, strlen(valuesString)); if(sqlDB->type == SQL_SQLITE3) { gseMutexLock(&dbMutex); sqlDB->db = (sqlite3 *)sqlDB->db; ret = sqlite3_exec(sqlDB->db,sqlInsetTable,NULL,NULL,&errmsg); if(ret != SQLITE_OK) { gseLog(L_ERROR, "%s",sqlInsetTable); gseLog(L_ERROR,"ret = %d, inset table fail: %s",ret,errmsg); } sqlite3_free(errmsg); gseMutexUnlock(&dbMutex); } else if(sqlDB->type == SQL_MYSQL) { #ifdef MYSQL_DEFINE sqlDB->db = (MYSQL *)sqlDB->db; ret = mysql_query(sqlDB->db, sqlInsetTable); if (ret) { gseLog(L_ERROR,"sqlInsert Error 4 %u: %s", mysql_errno(sqlDB->db), mysql_error(sqlDB->db)); } #endif } else { ret = -2; } if(1 == IsUpdateAll && 0 != ret) { rollBack(sqlDB); return ret; } return ret; } int DBUpdate(dbClass *sqlDB, const char *tableName, char *updateSetStr, char *updateWhereStr) { if(sqlDB == NULL || tableName == NULL || updateSetStr == NULL || updateWhereStr == NULL) { gseLog(L_ERROR,"*db is NULL"); return -1; } if(strlen(updateSetStr) >= 1) updateSetStr[strlen(updateSetStr)-1]='\0'; if(strlen(updateWhereStr) >= 3) updateWhereStr[strlen(updateWhereStr)-3]='\0'; char *errmsg = 0; int ret = 0; char sqlUpdateTable[MAX_SQLSTR]={0}; sprintf(sqlUpdateTable, "update %s set %s where %s", tableName, updateSetStr, updateWhereStr); //update tb_cardID set cardNum=1243423,password='323443' where cardID=1 and endDate=2013; memset(updateSetStr, 0, strlen(updateSetStr)); memset(updateWhereStr, 0, strlen(updateWhereStr)); if(sqlDB->type == SQL_SQLITE3) { gseMutexLock(&dbMutex); sqlDB->db = (sqlite3 *)sqlDB->db; ret = sqlite3_exec(sqlDB->db,sqlUpdateTable,NULL,NULL,&errmsg); if(ret != SQLITE_OK) { gseLog(L_ERROR, "%s",sqlUpdateTable); gseLog(L_ERROR,"ret = %d, update table fail: %s", ret, errmsg); } sqlite3_free(errmsg); gseMutexUnlock(&dbMutex); } else if(sqlDB->type == SQL_MYSQL) { #ifdef MYSQL_DEFINE sqlDB->db = (MYSQL *)sqlDB->db; ret = mysql_query(sqlDB->db, sqlUpdateTable); if (ret) { gseLog(L_ERROR,"sqlUpdate Error 4 %u: %s", mysql_errno(sqlDB->db), mysql_error(sqlDB->db)); } #endif } else { ret = -2; } if(1 == IsUpdateAll && 0 != ret) { rollBack(sqlDB); return ret; } return ret; } int DBSearch(dbClass *sqlDB, const char *tableName, char *searchWhereStr, char (*returnValue)[SEARCH_MAXLEN]) { if(sqlDB == NULL || tableName == NULL || searchWhereStr == NULL) { gseLog(L_ERROR,"*db is NULL"); return -1; } char *errmsg = 0; int ret = 0; char sqlSearchTable[MAX_SQLSTR]={0}; int i; int nRow=0,nColumn=0; if(strlen(searchWhereStr) >= 3) searchWhereStr[strlen(searchWhereStr)-3]='\0'; sprintf(sqlSearchTable, "select * from %s where %s",tableName,searchWhereStr); //select * from tb_cardID where cardNum=323435; memset(searchWhereStr, 0, strlen(searchWhereStr)); if(sqlDB->type == SQL_SQLITE3) { gseMutexLock(&dbMutex); sqlDB->db = (sqlite3 *)sqlDB->db; char **azResult; ret = sqlite3_get_table(sqlDB->db, sqlSearchTable, &azResult, &nRow, &nColumn,&errmsg); if(ret != SQLITE_OK) { gseLog(L_ERROR, "%s",sqlSearchTable); gseLog(L_ERROR,"ret = %d, search table fail: %s", ret, errmsg); } // gseLog(L_INFO,"row:%d column=%d",nRow, nColumn); for(i=nColumn;i<(nRow+1)*nColumn;i++) { // printf("azResult[%d] = %s\n", i, azResult[i]); if(azResult[i] != NULL && (*returnValue + SEARCH_MAXLEN*(i-nColumn)) != NULL) strcpy(*returnValue + SEARCH_MAXLEN*(i-nColumn), azResult[i]); } sqlite3_free_table(azResult); sqlite3_free(errmsg); gseMutexUnlock(&dbMutex); if(0 == nRow) return 1; else if(1 <= nRow) return 0; } else if(sqlDB->type == SQL_MYSQL) { #ifdef MYSQL_DEFINE sqlDB->db = (MYSQL *)sqlDB->db; ret = mysql_query(sqlDB->db, sqlSearchTable); if (ret) { gseLog(L_ERROR,"sqlSearch Error 4 %u: %s\n", mysql_errno(sqlDB->db), mysql_error(sqlDB->db)); } MYSQL_RES *result; MYSQL_ROW row; MYSQL_FIELD *field; int num_fields; result = mysql_store_result(sqlDB->db); num_fields = mysql_num_fields(result); while ((row = mysql_fetch_row(result))) { nRow++; for(i = 0; i < num_fields; i++) { if (i == 0) { while(field = mysql_fetch_field(result)) { printf("%s ", field->name); } printf("\n"); } printf("%s ", row[i] ? row[i] : "NULL"); } } printf("\n"); mysql_free_result(result); if(nRow == 0) return 0; else return nRow; #endif } return -2; } int DBDelete(dbClass *sqlDB, const char *tableName, char *searchWhereStr) { if(sqlDB == NULL || tableName == NULL || searchWhereStr == NULL) { gseLog(L_ERROR,"*db is NULL"); return -1; } char *errmsg = 0; int ret = 0; char sqlDeleteTable[MAX_SQLSTR]={0}; if(strlen(searchWhereStr) >= 3) { searchWhereStr[strlen(searchWhereStr)-3]='\0'; sprintf(sqlDeleteTable, "delete from %s where %s", tableName, searchWhereStr); memset(searchWhereStr, 0, strlen(searchWhereStr)); } else if(strlen(searchWhereStr) == 0) sprintf(sqlDeleteTable, "delete from %s", tableName); //delete from tb_cardID where cardID=1; // gseLog(L_DEBUG, "%s",sqlDeleteTable); if(sqlDB->type == SQL_SQLITE3) { gseMutexLock(&dbMutex); sqlDB->db = (sqlite3 *)sqlDB->db; ret = sqlite3_exec(sqlDB->db,sqlDeleteTable,NULL,NULL,&errmsg); if(ret != SQLITE_OK) { gseLog(L_ERROR,"ret = %d, delete table fail: %s", ret, errmsg); } sqlite3_free(errmsg); needVacuum = 1; #if 0 if (iDelCount++ > FREE_NUM) { iDelCount = 0; ret = sqlite3_exec(sqlDB->db,"vacuum",NULL,NULL,&errmsg); if(ret != SQLITE_OK) { gseLog(L_ERROR,"ret = %d, vacuum fail: %s", ret, errmsg); } sqlite3_free(errmsg); } #endif gseMutexUnlock(&dbMutex); } else if(sqlDB->type == SQL_MYSQL) { #ifdef MYSQL_DEFINE sqlDB->db = (MYSQL *)sqlDB->db; ret = mysql_query(sqlDB->db, sqlDeleteTable); if (ret) { printf("sqlDelete Error %u: %s\n", mysql_errno(sqlDB->db), mysql_error(sqlDB->db)); } #endif } else { ret = -2; } if(1 == IsUpdateAll && 0 != ret) { rollBack(sqlDB); return ret; } return ret; } int DBVacuum(dbClass *sqlDB) { if(sqlDB == NULL) { gseLog(L_ERROR,"*db is NULL"); return -1; } char *errmsg = 0; int ret = 0; if(sqlDB->type == SQL_SQLITE3 && 1 == needVacuum) { gseMutexLock(&dbMutex); sqlDB->db = (sqlite3 *)sqlDB->db; ret = sqlite3_exec(sqlDB->db,"vacuum",NULL,NULL,&errmsg); if(ret != SQLITE_OK) { gseLog(L_ERROR,"ret = %d, vacuum fail: %s", ret, errmsg); } else { needVacuum = 0; } sqlite3_free(errmsg); gseMutexUnlock(&dbMutex); } return ret; } int DBIndex(dbClass *sqlDB, const char *tableName, char *indexName, char *columnName) { if(sqlDB == NULL || tableName == NULL || indexName == NULL || columnName == NULL) { gseLog(L_ERROR,"SQLITE_Index NULL *p"); return -1; } int ret = 0; char *errmsg = 0; char sqlCreateIndex[MAX_SQLSTR]={0}; sprintf(sqlCreateIndex, "create index %s on %s(%s)", indexName, tableName, columnName); // gseLog(L_DEBUG, "%s",sqlCreateIndex); if(sqlDB->type == SQL_SQLITE3) { sqlDB->db = (sqlite3 *)sqlDB->db; ret = sqlite3_exec(sqlDB->db,sqlCreateIndex,NULL,NULL,&errmsg); if(ret != SQLITE_OK) { gseLog(L_ERROR,"ret = %d, index table fail: %s", ret, errmsg); } sqlite3_free(errmsg); } else if(sqlDB->type == SQL_MYSQL) { #ifdef MYSQL_DEFINE sqlDB->db = (MYSQL *)sqlDB->db; ret = mysql_query(sqlDB->db, sqlCreateIndex); if (ret) { printf("sqlIndex Error %u: %s\n", mysql_errno(sqlDB->db), mysql_error(sqlDB->db)); } #endif } return ret; } int DBGetIdKey(dbClass *sqlDB, const char *tableName, const char *keyName, char (*returnValue)[ID_KEYLEN]) { if(sqlDB == NULL || tableName == NULL || keyName== NULL) { gseLog(L_ERROR,"*db is NULL"); return -1; } char *errmsg = 0; int ret = 0; char sqlSearchTable[MAX_SQLSTR]={0}; int i; int nRow=0,nColumn=0; sprintf(sqlSearchTable, "select %s from %s", keyName, tableName); if(sqlDB->type == SQL_SQLITE3) { gseMutexLock(&dbMutex); sqlDB->db = (sqlite3 *)sqlDB->db; char **azResult; ret = sqlite3_get_table(sqlDB->db, sqlSearchTable, &azResult, &nRow, &nColumn,&errmsg); if(ret != SQLITE_OK) { gseLog(L_ERROR, "%s",sqlSearchTable); gseLog(L_ERROR,"ret = %d, search table fail: %s", ret, errmsg); } // gseLog(L_INFO,"row:%d column=%d",nRow, nColumn); for(i=nColumn;i<(nRow+1)*nColumn;i++) { // printf("azResult[%d] = %s\n", i, azResult[i]); if(azResult[i] != NULL && (*returnValue + ID_KEYLEN*(i-nColumn)) != NULL) strcpy(*returnValue + ID_KEYLEN*(i-nColumn), azResult[i]); else break; } sqlite3_free_table(azResult); sqlite3_free(errmsg); gseMutexUnlock(&dbMutex); if(nRow == 0) return 0; else return nRow; } else if(sqlDB->type == SQL_MYSQL) { #ifdef MYSQL_DEFINE sqlDB->db = (MYSQL *)sqlDB->db; ret = mysql_query(sqlDB->db, sqlSearchTable); if (ret) { gseLog(L_ERROR,"sqlSearch Error 4 %u: %s\n", mysql_errno(sqlDB->db), mysql_error(sqlDB->db)); } MYSQL_RES *result; MYSQL_ROW row; MYSQL_FIELD *field; int num_fields; result = mysql_store_result(sqlDB->db); num_fields = mysql_num_fields(result); while ((row = mysql_fetch_row(result))) { nRow++; for(i = 0; i < num_fields; i++) { if (i == 0) { while(field = mysql_fetch_field(result)) { printf("%s ", field->name); } printf("\n"); } printf("%s ", row[i] ? row[i] : "NULL"); } } printf("\n"); mysql_free_result(result); if(nRow == 0) return 0; else return nRow; #endif } return -2; } int DBExecSql(dbClass *sqlDB, const char *sqlStr) { if(sqlDB == NULL || sqlStr == NULL) { gseLog(L_ERROR,"*db is NULL"); return -1; } char *errmsg = 0; int ret = 0; if(sqlDB->type == SQL_SQLITE3) { sqlDB->db = (sqlite3 *)sqlDB->db; ret = sqlite3_exec(sqlDB->db,sqlStr,NULL,NULL,&errmsg); if(ret != SQLITE_OK) { gseLog(L_ERROR,"ret = %d, exec sql(%s) fail: %s", ret, sqlStr, errmsg); } sqlite3_free(errmsg); } else if(sqlDB->type == SQL_MYSQL) { } return ret; } int dbAddColumn(char *createString, const char *keyName, const char *keyClass) { if(createString == NULL || keyName == NULL || keyClass == NULL) return -1; char tmpKey[128]; sprintf(tmpKey, "%s %s,", keyName, keyClass); strcat(createString, tmpKey); return 0; } int dbInsertColumn(char *insertString, char *value) { if(insertString == NULL || value == NULL) return -1; strcat(insertString,value); strcat(insertString,","); return 0; } int dbUpdateSet(char *updateSetStr, const char *setKey, char *setValue) { if(updateSetStr == NULL || setKey == NULL || setValue == NULL) return -1; char tmpStr[128]={0}; sprintf(tmpStr, " %s=%s,", setKey, setValue); strcat(updateSetStr, tmpStr); return 0; } int dbSearchWhere(char *searchWhereStr, const char *whereKey, char *whereValue) { if(searchWhereStr == NULL || whereKey == NULL || whereValue == NULL) return -1; char tmpStr[128]={0}; sprintf(tmpStr, " %s=%s and", whereKey, whereValue); strcat(searchWhereStr , tmpStr); return 0; } int setFlagIsUpdateAll(dbClass *sqlDB, int n) { int ret= 0; IsUpdateAll = n; if(-1 == IsUpdateAll) ret = rollBack(sqlDB); return ret; } int getFlagIsUpdateAll() { return IsUpdateAll; } int beginExclusive(dbClass *sqlDB) { int ret=0; char *errmsg = 0; sqlDB->db = (sqlite3 *)sqlDB->db; ret = sqlite3_exec(sqlDB->db,"BEGIN EXCLUSIVE", NULL,NULL, &errmsg); if(ret != SQLITE_OK) { gseLog(L_ERROR,"ret = %d, BEGIN EXCLUSIVE: %s", ret, errmsg); } sqlite3_free(errmsg); return ret; } int commitSQL(dbClass *sqlDB) { int ret=0; char *errmsg = 0; sqlDB->db = (sqlite3 *)sqlDB->db; ret=sqlite3_exec(sqlDB->db,"COMMIT", NULL,NULL, &errmsg); if(ret != SQLITE_OK) { gseLog(L_ERROR,"ret = %d, COMMIT: %s", ret, errmsg); } sqlite3_free(errmsg); return ret; } int rollBack(dbClass *sqlDB) { int ret=0; char *errmsg = 0; sqlDB->db = (sqlite3 *)sqlDB->db; ret=sqlite3_exec(sqlDB->db,"ROLLBACK", NULL,NULL, &errmsg); if(ret != SQLITE_OK) { gseLog(L_ERROR,"ret = %d, ROLLBACK: %s", ret, errmsg); } sqlite3_free(errmsg); return ret; } #ifdef MAIN_TEST void main() { char createValueStr[MAX_SQLSTR]={0}; char insertString[MAX_SQLSTR]={0}; char updateSetStr[MAX_SQLSTR]={0}; char searchWhereStr[MAX_SQLSTR]={0}; char *dbFileName="lkdb"; char *tableName="tb"; char *colList[]={"ID","names","sexsex"}; int ret=0; timeLog(); dbClass sqlDB; sqlDB.type = SQL_SQLITE3; DBOpen(&sqlDB, dbFileName, NULL, NULL, NULL); // sqlDB.type = SQL_MYSQL; // DBOpen(&sqlDB, dbFileName, "localhost", "root", "mima"); #if 1 dbAddColumn(createValueStr, colList[0], PRIMAY_KEY); dbAddColumn(createValueStr, colList[1], NVARCHAR_32); dbAddColumn(createValueStr, colList[2], NVARCHAR_32); DBCreate(&sqlDB, tableName, createValueStr); dbInsertColumn(insertString, "1"); dbInsertColumn(insertString, "'y_jg'"); dbInsertColumn(insertString, "'man'"); DBInsert(&sqlDB,tableName,insertString); dbInsertColumn(insertString, "2"); dbInsertColumn(insertString, "'lk'"); dbInsertColumn(insertString, "'man'"); DBInsert(&sqlDB,tableName,insertString); dbInsertColumn(insertString, "3"); dbInsertColumn(insertString, "'fqq'"); dbInsertColumn(insertString, "'woman'"); DBInsert(&sqlDB,tableName,insertString); dbInsertColumn(insertString, "4"); dbInsertColumn(insertString, "'xf'"); dbInsertColumn(insertString, "'man'"); DBInsert(&sqlDB,tableName,insertString); #endif dbUpdateSet(updateSetStr,"names", "'xxxx'"); dbSearchWhere(searchWhereStr,"id","3"); DBUpdate(&sqlDB,tableName,updateSetStr,searchWhereStr); DBClose(&sqlDB); timeLog(); } #endif</code>

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

웹 응용 프로그램에서 MySQL의 주요 역할은 데이터를 저장하고 관리하는 것입니다. 1. MySQL은 사용자 정보, 제품 카탈로그, 트랜잭션 레코드 및 기타 데이터를 효율적으로 처리합니다. 2. SQL 쿼리를 통해 개발자는 데이터베이스에서 정보를 추출하여 동적 컨텐츠를 생성 할 수 있습니다. 3.mysql은 클라이언트-서버 모델을 기반으로 작동하여 허용 가능한 쿼리 속도를 보장합니다.

InnoDB는 Redologs 및 Undologs를 사용하여 데이터 일관성과 신뢰성을 보장합니다. 1. Redologs는 사고 복구 및 거래 지속성을 보장하기 위해 데이터 페이지 수정을 기록합니다. 2. 결점은 원래 데이터 값을 기록하고 트랜잭션 롤백 및 MVCC를 지원합니다.

다른 프로그래밍 언어와 비교할 때 MySQL은 주로 데이터를 저장하고 관리하는 데 사용되는 반면 Python, Java 및 C와 같은 다른 언어는 논리적 처리 및 응용 프로그램 개발에 사용됩니다. MySQL은 데이터 관리 요구에 적합한 고성능, 확장 성 및 크로스 플랫폼 지원으로 유명하며 다른 언어는 데이터 분석, 엔터프라이즈 애플리케이션 및 시스템 프로그래밍과 같은 해당 분야에서 이점이 있습니다.

MySQL은 웹 응용 프로그램 및 컨텐츠 관리 시스템에 적합하며 오픈 소스, 고성능 및 사용 편의성에 인기가 있습니다. 1) PostgreSQL과 비교하여 MySQL은 간단한 쿼리 및 높은 동시 읽기 작업에서 더 잘 수행합니다. 2) Oracle과 비교할 때 MySQL은 오픈 소스와 저렴한 비용으로 인해 중소 기업에서 더 인기가 있습니다. 3) Microsoft SQL Server와 비교하여 MySQL은 크로스 플랫폼 응용 프로그램에 더 적합합니다. 4) MongoDB와 달리 MySQL은 구조화 된 데이터 및 트랜잭션 처리에 더 적합합니다.

MySQL의 기본 작업에는 데이터베이스, 테이블 작성 및 SQL을 사용하여 데이터에서 CRUD 작업을 수행하는 것이 포함됩니다. 1. 데이터베이스 생성 : createAbasemy_first_db; 2. 테이블 만들기 : CreateTableBooks (idintauto_incrementprimarykey, titlevarchar (100) notnull, authorvarchar (100) notnull, published_yearint); 3. 데이터 삽입 : InsertIntobooks (Title, Author, Published_year) VA

innodbbufferpool은 데이터와 인덱싱 페이지를 캐싱하여 디스크 I/O를 줄여 데이터베이스 성능을 향상시킵니다. 작업 원칙에는 다음이 포함됩니다. 1. 데이터 읽기 : BufferPool의 데이터 읽기; 2. 데이터 작성 : 데이터 수정 후 BufferPool에 쓰고 정기적으로 디스크로 새로 고치십시오. 3. 캐시 관리 : LRU 알고리즘을 사용하여 캐시 페이지를 관리합니다. 4. 읽기 메커니즘 : 인접한 데이터 페이지를 미리로드합니다. Bufferpool을 크기를 조정하고 여러 인스턴스를 사용하여 데이터베이스 성능을 최적화 할 수 있습니다.

MySQL은 테이블 구조 및 SQL 쿼리를 통해 구조화 된 데이터를 효율적으로 관리하고 외래 키를 통해 테이블 간 관계를 구현합니다. 1. 테이블을 만들 때 데이터 형식을 정의하고 입력하십시오. 2. 외래 키를 사용하여 테이블 간의 관계를 설정하십시오. 3. 인덱싱 및 쿼리 최적화를 통해 성능을 향상시킵니다. 4. 데이터 보안 및 성능 최적화를 보장하기 위해 데이터베이스를 정기적으로 백업 및 모니터링합니다.

MySQL은 데이터 저장, 관리 및 분석에 적합한 강력한 오픈 소스 데이터베이스 관리 시스템이기 때문에 학습 할 가치가 있습니다. 1) MySQL은 SQL을 사용하여 데이터를 작동하고 구조화 된 데이터 관리에 적합한 관계형 데이터베이스입니다. 2) SQL 언어는 MySQL과 상호 작용하는 열쇠이며 CRUD 작업을 지원합니다. 3) MySQL의 작동 원리에는 클라이언트/서버 아키텍처, 스토리지 엔진 및 쿼리 최적화가 포함됩니다. 4) 기본 사용에는 데이터베이스 및 테이블 작성이 포함되며 고급 사용량은 Join을 사용하여 테이블을 결합하는 것과 관련이 있습니다. 5) 일반적인 오류에는 구문 오류 및 권한 문제가 포함되며 디버깅 기술에는 구문 확인 및 설명 명령 사용이 포함됩니다. 6) 성능 최적화에는 인덱스 사용, SQL 문의 최적화 및 데이터베이스의 정기 유지 보수가 포함됩니다.
