您的位置:首页 > 数据库 > MySQL

CentOS使用MySQL的详细步骤,及C API编程

2013-01-26 10:57 387 查看

1.1执行yum命令安装MySQL

yum-yinstallmysqlmysql-server

1.2把添加MySQL进开机启动项,并立即启动MySQL
chkconfig--levels235mysqldon/etc/init.d/mysqldstart

1.3打开mysqld
servicemysqldstart

1.4设置MySQLroot帐号密码(如果出了问题,比如Mysql
ERROR1045(28000):Accessdeniedforuser'root'@'localhost',请参考1.5)

mysql_secure_installation


NOTE:RUNNINGALLPARTSOFTHISSCRIPTISRECOMMENDEDFORALLMySQLSERVERSINPRODUCTIONUSE!PLEASEREADEACHSTEPCAREFULLY!

InordertologintoMySQLtosecureit,we'llneedthecurrent

passwordfortherootuser.Ifyou'vejustinstalledMySQL,and

youhaven'tsettherootpasswordyet,thepasswordwillbeblank,

soyoushouldjustpressenterhere.

Entercurrentpasswordforroot(enterfornone):<--输入系统root密码

OK,successfullyusedpassword,movingon...

SettingtherootpasswordensuresthatnobodycanlogintotheMySQL

rootuserwithouttheproperauthorisation.

Setrootpassword?[Y/n]<--ENTER

Newpassword:<--你的MySQLroot密码

Re-enternewpassword:<--你的MySQLroot密码

Passwordupdatedsuccessfully!

Reloadingprivilegetables..

...Success!

Bydefault,aMySQLinstallationhasananonymoususer,allowinganyone

tologintoMySQLwithouthavingtohaveauseraccountcreatedfor

Thisisintendedonlyfortesting,andtomaketheinstallation

goabitsmoother.Youshouldremovethembeforemovingintoa

productionenvironment.

Removeanonymoususers?[Y/n]<--ENTER

...Success!

Normally,rootshouldonlybeallowedtoconnectfrom'localhost'.This

ensuresthatsomeonecannotguessattherootpasswordfromthenetwork.

Disallowrootloginremotely?[Y/n]<--ENTER

...Success!

Bydefault,MySQLcomeswithadatabasenamed'test'thatanyonecan

Thisisalsointendedonlyfortesting,andshouldberemoved

beforemovingintoaproductionenvironment.

Removetestdatabaseandaccesstoit?[Y/n]<--ENTER

-Droppingtestdatabase...

...Success!

-Removingprivilegesontestdatabase...

...Success!

Reloadingtheprivilegetableswillensurethatallchangesmadesofar

willtakeeffectimmediately.

Reloadprivilegetablesnow?[Y/n]<--ENTER

...Success!

Cleaningup...

Alldone!Ifyou'vecompletedalloftheabovesteps,yourMySQL

installationshouldnowbesecure.

ThanksforusingMySQL!

1.5MysqlERROR1045(28000):Accessdeniedforuser'root'@'localhost'问题的解决

这种问题需要强行重新修改密码,方法如下:


/etc/init.d/mysqlstop(servicemysqldstop)

/usr/bin/mysqld_safe--skip-grant-tables

另外开个SSH连接

[root@localhost~]#mysql

mysql>usemysql

mysql>updateusersetpassword=password("123456")whereuser="root";

mysql>flushprivileges;

mysql>exit

pkill-KILL-tpts/0可将pts为0的**用户(之前运行mysqld_safe的用户窗口)强制踢出

正常启动MySQL:/etc/init.d/mysqlstart(servicemysqldstart)

1.6通过命令行操作数据库
1.6.1连接

mysql-u用户名-p密码
1.6.2常用命令

创建一个数据库:

mysql>createdatabase[databasename];

列出所有数据库:

mysql>showdatabases;

切换到一个数据库:

mysql>use[dbname];

显示一个数据库的所有表:

mysql>showtables;

查看数据表的字段格式:

mysql>describe[tablename];

删除一个数据库:

mysql>dropdatabase[databasename];

删除一个数据表:

mysql>droptable[tablename];

显示一个数据表的所有数据:

mysql>SELECT*FROM[tablename];

返回指定数据表的各列信息:

mysql>showcolumnsfrom[tablename];

使用值“whatever”过滤显示选定的某些行:

mysql>SELECT*FROM[tablename]WHERE[fieldname]="whatever";

显示所有包含name为”Bob”和phone
number为“3444444”的记录:

mysql>SELECT*FROM[tablename]WHEREname="Bob"ANDphone_number='3444444';

显示所有不包含name为”Bob”和phone
number为“3444444”的记录,并以phone_number字段排序:

mysql>SELECT*FROM[tablename]WHEREname!="Bob"ANDphone_number='3444444'orderbyphone_number;

显示所有的name以字母“bob”开头和phone
number为“3444444”的记录:

mysql>SELECT*FROM[tablename]WHEREnamelike"Bob%"ANDphone_number='3444444';

显示name以字母“bob”开头和phone
number为“3444444”的第1至第5条记录:

mysql>SELECT*FROM[tablename]WHEREnamelike"Bob%"ANDphone_number='3444444'limit1,5;

使用正则表达式查找记录:使用“正则表达式二进制”强制区分大小写:此命令查找以a开头的任何记录:

mysql>SELECT*FROM[tablename]WHERErecRLIKE"^a";

返回唯一不同的记录:

mysql>SELECTDISTINCT[columnname]FROM[tablename];

以升序或降序显示选定的记录:

mysql>SELECT[col1],[col2]FROM[tablename]ORDERBY[col2]DESC;

返回行数:

mysql>SELECTCOUNT(*)FROM[tablename];

统计指定列值的总和:

mysql>SELECTSUM(*)FROM[tablename];

联结表:

mysql>selectlookup.illustrationid,lookup.personid,person.birthdayfromlookupleftjoinpersononlookup.personid=person.personid=statementtojoinbirthdayin
persontablewithprimaryillustrationid;

新建一个用户:以root登录:切换到mysql数据库,创建用户,刷新权限:

#mysql-uroot-p

mysql>usemysql;

mysql>INSERTINTOuser(Host,User,Password)VALUES('%','username',PASSWORD('password'));

mysql>flushprivileges;

从unix命令行更改用户密码:

#[mysqldir]/bin/mysqladmin-uusername-hhostname.blah.org-ppassword'new-password'

从mysql命令行更改用户密码:以root登录,设置密码,更新权限:

#/etc/init.d/mysqlstop

#mysqld_safe--skip-grant-tables&

#mysql-uroot

mysql>usemysql;

mysql>updateusersetpassword=PASSWORD("newrootpassword")whereUser='root';

mysql>flushprivileges;

mysql>quit

#/etc/init.d/mysqlstop

#/etc/init.d/mysqlstart

root密码为空时,设置root密码:

#mysqladmin-urootpasswordnewpassword

更新root密码:

#mysqladmin-uroot-poldpasswordnewpassword

允许用户“bob”从localhost以密码“passwd”连接服务器:以root登录,切换mysql数据库:设置权限,更新权限:

#mysql-uroot-p

mysql>usemysql;

mysql>grantusageon*.*tobob@localhostidentifiedby'passwd';

mysql>flushprivileges;

为数据库db设置权限:以root登录,切换到mysql数据库,授予权限,更新权限:

#mysql-uroot-p

mysql>usemysql;

mysql>INSERTINTOdb(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)VALUES('%','databasename','username','Y','Y','Y','Y','Y','N');

mysql>flushprivileges;

或者

mysql>grantallprivilegesondatabasename.*tousername@localhost;

mysql>flushprivileges;

更新已存在表的数据:

mysql>UPDATE[tablename]SETSelect_priv='Y',Insert_priv='Y',Update_priv='Y'where[fieldname]='user';

删除表中[fieldname]=‘whatever’的行:

mysql>DELETEfrom[tablename]where[fieldname]='whatever';

更新数据库的权限/特权:

mysql>flushprivileges;

删除列:

mysql>altertable[tablename]dropcolumn[columnname];

新增列到db:

mysql>altertable[tablename]addcolumn[newcolumnname]varchar(20);

更改列名:

mysql>altertable[tablename]change[oldcolumnname][newcolumnname]varchar(50);

增加唯一的列:

mysql>altertable[tablename]addunique([columnname]);

设置列值大点:

mysql>altertable[tablename]modify[columnname]VARCHAR(3);

删除唯一列:

mysql>altertable[tablename]dropindex[colmnname];

导入一个CSV文件到表:

mysql>LOADDATAINFILE'/tmp/filename.csv'replaceINTOTABLE[tablename]FIELDSTERMINATEDBY','LINESTERMINATEDBY'\n'(field1,field2,field3);

导出所有数据库到sql文件:

#[mysqldir]/bin/mysqldump-uroot-ppassword--opt>/tmp/alldatabases.sql

导出一个数据库:

#[mysqldir]/bin/mysqldump-uusername-ppassword--databasesdatabasename>/tmp/databasename.sql

从一个数据库导出一个表:

#[mysqldir]/bin/mysqldump-c-uusername-ppassworddatabasenametablename>/tmp/databasename.tablename.sql

从sql文件还原数据库(数据表):

#[mysqldir]/bin/mysql-uusername-ppassworddatabasename</tmp/databasename.sql

创建数据表例1:

mysql>CREATETABLE[tablename](firstnameVARCHAR(20),middleinitialVARCHAR(3),lastnameVARCHAR(35),suffixVARCHAR(3),officeidVARCHAR(10),useridVARCHAR(15),username
VARCHAR(8),emailVARCHAR(35),phoneVARCHAR(25),groupsVARCHAR(15),datestampDATE,timestamptime,pgpemailVARCHAR(255));

创建数据表例2:

mysql>createtable[tablename](personidint(50)notnullauto_incrementprimarykey,firstnamevarchar(35),middlenamevarchar(50),lastnamevarchar(50)default'bato');

1.7安装CAPI库及头文件
yuminstallmysql-devel

1.8例子

/*testsql.c


**AnexampletouseMYSQLCAPI


**Copyright2004CoonXu.


**Author:CoonXu


**Date:
05Nov2004


*/




#include<mysql.h>


#include<stdio.h>

intmain(){


MYSQLmysql;//needainstancetoinit


MYSQL_RES*res;


MYSQL_ROWrow;


char*query;


intt,r;

//connectthedatabase


mysql_init(&mysql);


if(!mysql_real_connect(&mysql,"localhost","mmim","mmim","test",0,NULL,0))


{


printf("Errorconnectingtodatabase:%s/n",mysql_error(&mysql));


}


elseprintf("Connected.../n");



//gettheresultfromtheexecutingselectquery

query="select*fromt1";

t=mysql_real_query(&mysql,query,(unsignedint)strlen(query));

if(t)

{

printf("Errormakingquery:%s/n",

mysql_error(&mysql));

}

elseprintf("[%s]made.../n",query);

res=mysql_store_result(&mysql);

while(row=mysql_fetch_row(res))

{

for(t=0;t<mysql_num_fields(res);t++)

{

printf("%s",row[t]);

}

printf("/n");

}

printf("mysql_free_result.../n");

mysql_free_result(res);//freeresultafteryougettheresult

sleep(1);

//executetheinsertquery

query="insertintot1(id,name)values(3,'kunp')";

t=mysql_real_query(&mysql,query,(unsignedint)strlen(query));

if(t)

{

printf("Errormakingquery:%s/n",

mysql_error(&mysql));

}

elseprintf("[%s]made.../n",query);

mysql_close(&mysql);

return0;

}



1.9编译
gcctestmysql.c-I/usr/include/mysql-L/usr/lib64/mysql-lmysqlclient


1.10具体执行结果不确定,因为我没仔细看代码,这个例子主要是用来证明我按照好了mysql,并且可以使用capi操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: