环境:ubuntu
安装方法:终端命令 apt-get install mysql-server mysql-client libmysqlclient-dev
简介:Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
Mysql系统命令(终端命令)
1. 打开Mysql
代码: mysql -uroot -p123456
root用户,密码123456
2 添加数据库用户
代码: insert into user(host, user, password, select_priv, insert_priv, update_priv) values('localhost', 'ly', PASSWORD('123456'), 'Y', 'Y', 'Y');
解释: 用户名为ly,密码为123456,并授权用户可进行 SELECT, INSERT 和 UPDATE操作权限:
3 重新载入授权表
代码: flush privileges;
4 查询用户
代码: select host, user, password from user where user = 'ly';
5 使用表
代码: use 表名;
6 查看Myql的数据库
代码: show databases;
7 查看指定数据库的所有表
代码: use 数据库名;
show tables;
Mysql的数据类型
1:整形数据
数据类型 大小
tinyint(m) 一个字节
smallint(m) 二个字节
mediumint(m) 三个字节
int(m) 四个字节
bigint(m) 八个字节
2 :浮点型
数据类型 大小
float(m,d) 四个字节,8位精度,m总位数,d小数位数
double(m,d) 八个字节 16位精度,m总位数,d小数位数
3:定点数
数据类型 精确度要求
decimal(m,d) m<65 && d<30 && d<m
4:字符串
数据类型 最大大小
char(n) 255字符 固定长度
varchar(n) 65535字符 固定长度
tinytext 255字符 可变长度
text 65535字符 可变长度
mediumetext 2^(24-1)字符 可变长度
longtext 2^(32-1)字符 可变长度
TIP:
char和varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类 型存储的字符串末尾不能有空格,varchar不限于此。
2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。
3.char类型的字符串检索速度要比varchar类型的快。
varchar和text:
1.varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。
2.text类型不能有默认值。
3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用
5 二进制数据
数据类型 大小
BLOB 2^(16-1)字符
5 日期时间类型
数据类型 格式
data 日期‘2008-12-2’
time 时间‘12-25-36’
timestamp 自动存储记录修改时间
datetime 日期时间’2008-12-2 22:06:44‘
6 数据类型参数
关键字 含义
NULL 数据列可包含NULL值
NOT NULL 数据列不允许包含NULL值
DEFAULT 默认值
PRIMARY KEY 主键
AUTO_INCREMENT 自动递增
UNSIGNED 无符号
CHARACTER SET name 指定一个字符集
Mysql终端操作命令
1 进入Mysql
命令: mysql -h 主机名 -u 用户名 -p
含义: -h : 该命令用于指定客户端所要登录的MySQL主机名, 登录当前机器该参数可以省略;
-u : 所要登录的用户名;
-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
以登录刚刚安装在本机的MySQL数据库为例, 在命令行下输入 mysql -u root -p 按回车确认, 如果安装正确且 MySQL正在运行, 会得到以下响应:
2 创建数据库
命令: create database my1_db character set gbk;
含义: 创建了一个名为my_db数据库,将数据库字符编码指定为gdl
创建成功时会得到 Query OK, 1 row affected(0.02 sec) 的响应。
注意: MySQL语句以分号(;)作为语句的结束, 若在语句结尾不添加分号时, 命令提示符会以 -> 提示你继续输 入(有个别特例, 但加分号是一定不会错的);
要对一个数据库进行操作, 必须先选择该数据库, 否则会提示错误:
ERROR 1046(3D000): No database selected
3 创建数据库表
命令: creat table students(id int unsigned not null auto_increament primary key,
name char(8) not null,
sex char(3) not null,
age tinyint unsigned not null,
tel char(13) null default"-");
含义: 八个字符大小的name 不允许包含NULL,
三个字符大小的sex 不允许包含NULL,
一个字节大小的无符号整型age 不允许包含NULL,
十三个字符大小的tel默认值为“-” 允许包含NULL.
4 数据插入
命令: insert into students values(NULL, "王三", "男", 20, "13811371377");
insert into students (name, sex, age) values("孙丽华", "女", 21);
含义: 在students表中插入数据,id为上一条数据ID值+1;如果为第一条则为1;name为王二;sex为男;age为 20;tel为13811371377的数据
在students表中插入数据,id为上一条数据id+1;name为孙丽华,sex为女;age为21; tel为-;
按回车键确认后若提示 Query Ok, 1 row affected (0.05 sec) 表示数据插入成功。 若插入失败请检查是否已 选择需要操作的数据库。
5 数据查询
命令: select 列名称 from 表名称 [查询条件];
select * from students;
select name from students;
select * from students where age>20;
select * from students where id<5 and age>20;
含义 查询表内所有数据
查询表内所有数据的name列
查询表内所有age大于20的数据
查询表内所有id<5并且ge>20的数据
where 子句不仅仅支持 "where 列名 = 值" 这种名等于值的查询形式, 对一般的比较运算的运算符都是支持的, 例如 =、>、<、>=、<、!= 以及一些扩展运算符 is [not] null、in、like 等等。 还可以对查询条件使用 or 和 and 进行组合查询。
6 修改数据
命令: updata 表名称 set 列名称=新值 where 更新条件
update students set tel=default where id=5;
update students set age=age+1;
含义: 将id为5的手机号改为默认的"-"
将所有人的年龄增加1:
7 数据删除
命令: delete from 表名称 where 删除条件
delete from students where id=2;
delete from students where age<20;
delete from students;
含义: 删除id为2的行
删除所有年龄小于21岁的数据:
删除表中的所有数据
8 添加列
命令 alter table 表名 add 列名 列数据类型 [after 插入位置];
alter table students add address char(60);
alter table students add birthday date after age;
含义 在表的最后追加列
在名为 age 的列后插入列
9 修改列
命令 alter table 表名 change 列名称 列新名称 新数据类型;
alter table students change tel telphone char(13) default "-";
alter table students change name name char(16) not null;
含义 将表 tel 列改名为 telphone
将 name 列的数据类型改为 char(16)
字符型转化成实型数据会消失,实型转化成字符型,数据不会消失。
10 删除列
命令 alter table 表名 drop 列名称;
alter table students drop birthday;
含义 删除birthday列
11 重命名表
命令 alter table 表名 rename 新表名;
alter table students rename workmates;
含义 重命名students表为workmates;
12 删除整张表
命令 drop table 表名;
drop table workmates;
含义 删除workmates表
Mysql接口使用(程序)
mysql中文完全参考手册
http://www.yesky.com/imagesnew/software/mysql/manual_toc.html
编辑器 vi
编译器 g++
1 mysql函数头文件
命令 cd /uer/include/mysql
含义 查看库里mysql头文件种类
其中我们主要用mysql.h
如果include文件夹没有mysql文件夹,自己下一个
include<mysql/mysql.h>
2 编译含mysql的C++程序
命令 g++ main.cpp -o main -lmysqlclient
含义 编译main.cpp源文件 生成main文件 -l后面是要链接的库名
3 获取错误消息
函数原型 unsigned int mysql_errno(MYSQL *connection);
char *mysql_error(MYSQL *connection);
返回值 第一个函数返回的是一个错误码;
第二个函数返回的是一个错误文本信息;
代码 printf("%d,%s",msql_errno(a),mysql_error(a));
含义 a是数据库的操作句柄,当a使用数据库函数发生错误时,使用mysql_errno(a)可以获得错误码(数字),使用mysql_error(a)可以获得错误的具体信息.
一般都使用mysql_error()函数;
3 初始化数据库操作句柄
函数原型 MYSQL *mysql_init(MYSQL *mysql)
MYSQL *a=mysql_init(&b);
含义 建立了MYSQL 对象,名为b ,通过mysql_init函数初始化了b.
a指向b;
4 连接数据库
函数原型 MYSQL *mysql_real_connect (MYSQL *mysql,
const char *host,
const char *user,
const char *passwd,
const char *db,
unsigned int port,
const char *unix_socket,
unsigned long client_flag);
返回值 如果连接成功,返回MYSQL*连接句柄。如果连接失败,返回NULL。对于成功的连接,返回值与第1个参数的值相同。
解释 MYSQL *为mysql_init函数返回的指针,即操作数据库的句柄。
host为null或 localhost时链接的是本地的计算机,
当mysql默认安装在unix(或类unix)系统中,root账户是没有密码的,因此用户名使用root,密码为null,
当db为空的时候,函数链接到默认数据库,在进行 mysql安装时会存在默认的test数据库,因此此处可以使用test数据库名称,
port端口为0,使用 unix连接方式,unix_socket为null时,表明不使用socket或管道机制,最后一个参数经常设置为0
mysql_real_connect()尝试与运行在主机上的MySQL数据库引擎建立连接。在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,mysql_real_connect()必须成功完成。
代码 MYSQL *con = mysql_real_connect(mysql, NULL, "root", "123456", "my_db", 0, NULL,0);
if (con == NULL)
printf (" 连接服务器失败: %s\n", mysql_error(mysql));
含义 mysql是初始化好的操作句柄指针;NULL意味着连接本地计算机;”root"是用户名,"123456"是密码,“my_db"是连接的数据库,端口为0,NULL不使用SOCKET和管道,默认为0;
当连接失败时,语句返回值是NULL,使用mysql_error()函数打印错误信息;
5 关闭连接
函数原型 void mysql_close(MYSQL *sock);
解释 关掉数据库连接句柄
代码 mysql_close(a);
含义 关掉a指向的连接句柄
6 执行SQL语句,设置编码格式
函数原型 int mysql_query(MYSQL *mysql, const char *q);
返回值 执行失败返回0;
解释 第一个参数是数据库操作句柄指针,第二个参数是执行的语句
代码 mysql_query(mysql, "set names utf8");
int ret = mysql_query(mysql, sql);
if (ret != 0)
{
printf (" 操作失败 : %s\n", mysql_error(mysql));
return -1;
}
含义 第一个语句是解决中文乱码问题
第二个语句是执sql语句,失败则返回失败原因;SQL语句即终端命令;
7 获取数据库执行结果
函数原型 MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql);
返回值 MYSQL_RES指针,用来指向存放结果
解释 第一个参数是执行SQL语句的数据库操作句柄
代码 MYSQL_RES *mysql_res = mysql_store_result(mysql);
if (mysql_res == NULL)
{
if (mysql_errno(mysql) == 0) // 不是错误
{
printf (" 操作成功 \n");
return 0;
}
printf ("mysql_store_result () : %s\n", mysql_error(mysql));
return -1;
}
含义 获取SQL语句执行结果,获取失败则返回失败信息
8 获取执行结果的列数
函数原型 unsigned int mysql_num_fields(MYSQL_RES *res);
返回值 无符号整型数为结果的列数
解释 传入MYSQL_RES类指针,返回值为指针指向结果的列数;
代码 unsigned int num = mysql_num_fields(mysql_res);
含义 获取数据的列数;
9 获取结果列名
函数原型 MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res);
返回值 列名指针
解释 传入结果句柄
代码 MYSQL_FIELD *fields = mysql_fetch_fields(mysql_res);
for(i = 0; i < num; i++)
{
printf("%-8s", fields[i].name);
}
含义 获取列名指针,输出列名;
10 获取结果数据
函数原型 MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
返回值 数据数组
解释 传入结果句柄,获得数据数组
代码 MYSQL_ROW row;
while (row = mysql_fetch_row(mysql_res))
{
for (i = 0; i < num; i++)
{
printf ("%-8s", row[i]);
}
printf ("\n");
}
含义 获得数据数组,进行输出;
11 执行事务
函数原型 int mysql_query(MYSQL *mysql, const char *q);
返回值 执行失败返回0;
解释 第一个参数是数据库操作句柄指针,第二个参数是执行的语句
代码 int ret = 0;
ret = mysql_query(mysql, BEGIN_TRAN);
ret = mysql_query(mysql, SET_TRAN);
ret = mysql_query(mysql, ROLLBACK_TRAN);
ret =mysql_query(mysql,UNSET_TRAN);
ret = mysql_query(mysql, COMMIT_TRAN);
含义 执行事务开始SQL
设置事务手动提交
事务回滚
恢复事务提交标志
事务提交