嵌入式数据库开发编程MySQL(全)
一、mysql
sudo apt-get install mysql-server mysql-client libmysqlclient-dev
-- 登录MYSQL
mysql -u root -p
-- 退出MYSQL
quit;
-- 查看所有的数据库
show databases;
-- 使用数据库
use mysql;
-- 查看所有表
show tables;
-- 查看所有用户信息
select user from user;
-- 创建用户
create user "c++class"@"localhost" identified by "123456";
-- 修改密码
set password for "c++class"@"localhost" = PASSWORD("666666");
-- 授予权限
grant select on *.* to "c++class"@"localhost";
grant all on *.* to "c++class"@"localhost";
-- 删除用户
drop user "c++class"@"localhost";
-- 创建表
create table int_test(
tiny_int tinyint,
small_int smallint,
medium_int mediumint,
commint_int int,
big_int bigint
);
-- 显示表的结构
describe int_test;
-- 插入数据
insert into int_test values(1,1,1,1,1);
insert into int_test values(200,1,1,1,1); -- ERROR 1264 (22003): Out of range value for column 'tiny_int' at row 1
insert into int_test values(1,1,1,'a',1); -- ERROR 1366 (HY000): Incorrect integer value: 'a' for column 'commint_int' at row 1
-- 创建学生表
create table student(
name varchar(10) not null,
age tinyint unsigned not null,
sex char(6)
);
-- 修改表
alter table student rename stu;
alter table stu drop sex;
alter table stu add sex char(6);
alter table stu add id int unsigned not null primary key auto_increment first;
alter table stu add birth date after name;
alter table stu add tel char(11) default '-';
-- 插入数据
insert into stu (id,name,birth,age,sex,tel) values(1000,"zhangsan","1999-9-9",90,"femal","11111111111");
insert into stu (name,birth,age,sex,tel) values("lisi","1993-9-19",40,"mal","22222222222");
insert into stu values(1002,"xiaozhang","1939-9-9",90,"femal","11213141511"),(1003,"xiaoming","1979-9-19",80,"femal","55555555555");
insert into stu (id,name,birth,age,sex) values(1005,"xiaowang","1993-9-19",40,"mal");
insert into stu (id,name,birth,age,sex) values(1005,"xiaowang","1993-9-19",40,"mal");
insert into stu stu values(1006,"张三","1998-8-8",21,"male","11111111111");
-- 查询数据
select * from stu;
select name from stu;
select name from stu where id > 1002;
select name from stu where id between 1001 and 1004;
-- 修改字符集
alter table stu convert to character set utf8;
-- 修改数据
update stu set tel = "88888888888" where name = "张三";
-- 删除记录
delete from stu where id = 1000;
-- 删除数据库
drop database test;
-- 创建数据库
create database test;
-- 事务操作
-- 创建表
create table account(
id int unsigned not null primary key,
name varchar(20),
money int
)charset utf8;
--插入数据
insert into account values(1000,"xiaozhang",2000),(1001,"xiaoming",5000),(1002,"张三",1000);
-- 小张给小明转账500
update account set money = money - 500 where id = 1000;
-- 停电了 数据出错
-- 开启事务
start transaction;
-- 小张给小明转账500
update account set money = money - 500 where id = 1000;
-- 小明增加500块
update account set money = money + 500 where id = 1001;
-- 提交
commit;
-- 开启事务
start transaction;
-- xiaozhang转出500
update account set money = money - 500 where id = 1000;
-- 设置回滚点
savepoint sp1;
-- 小明转出500块
update account set money = money - 500 where id = 1001;
-- 设置回滚点
savepoint sp2;
-- 张三增加1000块
update account set money = money + 1000 where id = 1002;
-- 回滚到sp1;
rollback to sp1;
-- 提交
commit;
二、Linux C下MYSQL的API
#include <iostream>
#include <mysql/mysql.h>
#include <iomanip>
using namespace std;
MYSQL *Init()
{
MYSQL *m;
m = mysql_init(NULL); //创建mysql对象并且初始化,返回对象的地址
if (NULL == m)
{
cout<<mysql_error(m)<<endl; //打印错误信息
return NULL;
}
m = mysql_real_connect(m,"localhost","c++class","1","mysql",0,NULL,0);
if (NULL == m)
{
cout<<mysql_error(m)<<endl; //打印错误信息
return NULL;
}
return m;
}
void InsertDatabase(MYSQL *m)
{
if (NULL == m)
{
return;
}
int ret = mysql_query(m,"set names utf8");
if (ret != 0)
{
cout<<mysql_error(m)<<endl;
return;
}
char sql[128] = {0};
int id,age;
char name[32] = {0},birth[32] = {0},sex[12] = {0},tel[12] = {0};
cout<<"input:id,name,birth,age,sex,tel:"<<endl;
cin>>id>>name>>birth>>age>>sex>>tel;
sprintf(sql,"insert into stu (id,name,birth,age,sex,tel) values(%d,'%s','%s',%d,'%s','%s')",
id,name,birth,age,sex,tel);
ret = mysql_query(m,sql);
if(ret != 0)
{
cout<< mysql_error(m)<<endl; //打印错误信息
return;
}
cout<<"插入成功"<<endl;
}
void FindDataBase(MYSQL *m)
{
if(m == NULL)
{
return;
}
int ret = mysql_query(m,"set names utf8");
if(ret != 0)
{
cout<< mysql_error(m)<<endl; //打印错误信息
return;
}
ret = mysql_query(m,"select * from stu;");
if(ret != 0)
{
cout<< mysql_error(m)<<endl; //打印错误信息
return;
}
MYSQL_RES * res = mysql_store_result(m); //获取查询到的结果
if(NULL == res)
{
cout<< mysql_error(m)<<endl; //打印错误信息
return;
}
//获取字段数
int field = mysql_num_fields(res);
MYSQL_FIELD *f; //结构体
while(f = mysql_fetch_field(res)) //获取具体的字段名
{
cout<<setw(20)<<setiosflags(ios::left)<<f->name; //打印字段名
}
cout<<endl;
//获取每一条记录
MYSQL_ROW r; //数组
while(r = mysql_fetch_row(res))
{
for(int i = 0 ; i < field;i++)
{
cout<<setw(20)<<setiosflags(ios::left)<<r[i];
}
cout<<endl;
}
}
int main(int argc, char const *argv[])
{
MYSQL *mysql; //创建mysql变量
mysql = Init();
if(mysql != NULL)
{
cout<<"链接数据库成功"<<endl;
}
else
{
cout<<"初始化数据库失败"<<endl;
}
//插入数据
InsertDatabase(mysql);
FindDataBase(mysql);
return 0;
}
-lmysqlclient