/*SQL 轻量型
MYSQL是一种关系数据库
元组:表中的一行即为一个元组 或为一条记录
属性(字段):表中的每一列成为一个字段
属性值:行和列交叉位置表示的
主码:也叫主键 主关键字 表中用于唯一确定一个元组的数据
域:属性的取值范围 : sex char(10)
MYSQL是一种关系数据库
元组:表中的一行即为一个元组 或为一条记录
属性(字段):表中的每一列成为一个字段
属性值:行和列交叉位置表示的
主码:也叫主键 主关键字 表中用于唯一确定一个元组的数据
域:属性的取值范围 : sex char(10)
三大类型:
数字 :
整形:tinyint 一个字节 4位 , smallint 8位 mediumint 16位
浮点数:
日期/时间:date 2017-12-23 ; time 10:05:30 ; timestamp 时间戳 13位 以秒位单位的变化量 自从哪个时间到现在经过的秒数
字符串:
字符串:varchar 可变字符串 ;char不可变
文本:tinytext ;text;mediumtext;longtext
二进制:tinyblob;blob;.....
数字 :
整形:tinyint 一个字节 4位 , smallint 8位 mediumint 16位
浮点数:
日期/时间:date 2017-12-23 ; time 10:05:30 ; timestamp 时间戳 13位 以秒位单位的变化量 自从哪个时间到现在经过的秒数
字符串:
字符串:varchar 可变字符串 ;char不可变
文本:tinytext ;text;mediumtext;longtext
二进制:tinyblob;blob;.....
.sql 可以是封装 也可以使数据库
标识符:标识符由字母、数字或下划线(_)组成, 且第一个字符必须是字母或下划线。
create database 数据库名[其他选项] 创建数据库
create database samp_db character set gbk;
use samp_db 选择数据库
create table students 创建表
(
id int unsigned not null auto_increment(自加) primary key,
name char(8) not null(非空),
sex char(4) not null,
age tinyint unsigned not null,
tel char(13) null default "-" (用- 来替换null),
);
(
id int unsigned not null auto_increment(自加) primary key,
name char(8) not null(非空),
sex char(4) not null,
age tinyint unsigned not null,
tel char(13) null default "-" (用- 来替换null),
);
insert [into] 表名 [(列名1,列名2,...)] values (值1,2,...)
insert into students values(NULL, "王刚", "男", 20, "13811371377");
insert into students (name, sex, age) values("孙丽华", "女", 21);
insert into students values(NULL, "王刚", "男", 20, "13811371377");
insert into students (name, sex, age) values("孙丽华", "女", 21);
select 列名称 from 表名称 [查询条件];
去重查找
SELECT DISTINCT 列名称 FROM 表名称
select * from students; 查询
select name, age from students;
select * from students where sex="女";
select * from students where name like "%王%";
通配符: % :替代一个或多个 _ :替代一个 [] :字符列中的任何单一字符(regexp 代替 like)
select * from students where id<5 and age>20;
select * from students limit m,n; (m: 从哪一行开始 , n:几行)
select * from students where age in (20,21); 查找在20 21之间的 闭区间
between(20,22) 在20 22 之间的
Alias 别名 仅仅是展示 不会改变结构
select p.age,p.name from students as p where age > 15;
select name as p from students;
update 表名称 set 列名称=新值 where 更新条件; 更新表中的数据
update students set tel=default where id=5;
update students set age=age+1;
update students set name="张伟鹏", age=19 where tel="13288097888";
去重查找
SELECT DISTINCT 列名称 FROM 表名称
select * from students; 查询
select name, age from students;
select * from students where sex="女";
select * from students where name like "%王%";
通配符: % :替代一个或多个 _ :替代一个 [] :字符列中的任何单一字符(regexp 代替 like)
select * from students where id<5 and age>20;
select * from students limit m,n; (m: 从哪一行开始 , n:几行)
select * from students where age in (20,21); 查找在20 21之间的 闭区间
between(20,22) 在20 22 之间的
Alias 别名 仅仅是展示 不会改变结构
select p.age,p.name from students as p where age > 15;
select name as p from students;
update 表名称 set 列名称=新值 where 更新条件; 更新表中的数据
update students set tel=default where id=5;
update students set age=age+1;
update students set name="张伟鹏", age=19 where tel="13288097888";
delete from 表名称 where 删除条件; 删除表中的数据
delete from students where id=2;
delete from students where age<20;
delete from students;
alter table 语句用于创建后对表的修改, 基础用法如下:
添加列
基本形式: alter table 表名 add 列名 列数据类型 [after 插入位置];
示例:
在表的最后追加列
address: alter table students add address char(60);
在名为 age 的列后插入列
birthday: alter table students add birthday date after age;
修改列
基本形式: alter table 表名 change 列名称 列新名称 新数据类型;
示例:
将表 tel 列改名为
telphone: alter table students change tel telphone char(13) default "-";
将 name 列的数据类型改为
char(16): alter table students change name name char(16) not null;
删除列
基本形式: alter table 表名 drop 列名称;
示例:
删除 birthday 列:
alter table students drop birthday;
重命名表
基本形式: alter table 表名 rename 新表名;
示例:
重命名 students 表为 workmates:
alter table students rename workmates;
删除整张表
基本形式: drop table 表名;
示例: 删除 workmates 表:
drop table workmates;
复制表:
create table newstu like suqian145.students; (suqian145为另一个数据库)
insert into newstu select * from students;
备份:
create table newshoping select * from shoping;
引用两个表:
inner join:
select students.id,students.name,shopping.orderid,shopping.ordername,shopping.ordermu from students inner join shopping on students.id = shopping.stu_id order by shopping.ordernum;
(当students.id = shopping.stu_id 时的结果)
left join: 列出所有学生买了哪些(如果有):
select students.id,students.name,shoping.orderid,shoping.ordernum from students left join shoping on students.id = shoping.stu_id;
right join:查看所有商品销售情况
select * from students right join shoping on students.id = shoping.stu_id;
union 合并去重:
select id from students union select stu_id from shopping;
不去重:
select id from students union all select stu_id from shopping;
删除整个数据库
基本形式: drop database 数据库名;
示例:
删除 samp_db 数据库:
drop database samp_db;
*/
delete from students where id=2;
delete from students where age<20;
delete from students;
alter table 语句用于创建后对表的修改, 基础用法如下:
添加列
基本形式: alter table 表名 add 列名 列数据类型 [after 插入位置];
示例:
在表的最后追加列
address: alter table students add address char(60);
在名为 age 的列后插入列
birthday: alter table students add birthday date after age;
修改列
基本形式: alter table 表名 change 列名称 列新名称 新数据类型;
示例:
将表 tel 列改名为
telphone: alter table students change tel telphone char(13) default "-";
将 name 列的数据类型改为
char(16): alter table students change name name char(16) not null;
删除列
基本形式: alter table 表名 drop 列名称;
示例:
删除 birthday 列:
alter table students drop birthday;
重命名表
基本形式: alter table 表名 rename 新表名;
示例:
重命名 students 表为 workmates:
alter table students rename workmates;
删除整张表
基本形式: drop table 表名;
示例: 删除 workmates 表:
drop table workmates;
复制表:
create table newstu like suqian145.students; (suqian145为另一个数据库)
insert into newstu select * from students;
备份:
create table newshoping select * from shoping;
引用两个表:
inner join:
select students.id,students.name,shopping.orderid,shopping.ordername,shopping.ordermu from students inner join shopping on students.id = shopping.stu_id order by shopping.ordernum;
(当students.id = shopping.stu_id 时的结果)
left join: 列出所有学生买了哪些(如果有):
select students.id,students.name,shoping.orderid,shoping.ordernum from students left join shoping on students.id = shoping.stu_id;
right join:查看所有商品销售情况
select * from students right join shoping on students.id = shoping.stu_id;
union 合并去重:
select id from students union select stu_id from shopping;
不去重:
select id from students union all select stu_id from shopping;
删除整个数据库
基本形式: drop database 数据库名;
示例:
删除 samp_db 数据库:
drop database samp_db;
*/
/****************************************************************************************************
******************************************************************************************************/
******************************************************************************************************/
//用C++程序控制数据库:
#include <Windows.h>
#include <mysql.h>
#include <string>
#include <iostream>
// SDK software development kit
//简易版本的服务器
using namespace std;
//#pragma comment(lib,"D:\\Program Files\\MySQL\\MySQL Server 5.6\\lib\\libmysql.lib")
int main()
{
const char user[] = "root";
const char pswd[] = "zyc19970916";
const char host[] = "localhost";
const char databasename[] = "samp_db";
unsigned int port = 3306;
MYSQL myCont;//句柄 数据库变量 \n
MYSQL_RES *result;
MYSQL_ROW sql_row;
int res;
mysql_init(&myCont);
if (mysql_real_connect(&myCont, host, user, pswd, databasename, port, NULL, 0))
{
mysql_query(&myCont, "SET NAMES GBK"); //设置编码格式
res = mysql_query(&myCont, "select * from students");//查询
//res = mysql_query(&myCont, "insert into students (id,name,sex,age,tel) values(NULL,\"毕先鑫\",\"男\",23,\"154827837\")");//插入
//res = mysql_query(&myCont, "delete from students where name = '张猛'");//删除
//res = mysql_query(&myCont, "update students set sex = '女' where id = 2");//更新
if (!res)
{
result = mysql_store_result(&myCont);
if (result)
{
while (sql_row = mysql_fetch_row(result))//获取具体的数据
{
cout << "id " << sql_row[0] << " ";
cout << "name " << sql_row[1] << " ";
cout << "sex " << sql_row[3] << " ";
cout << "age " << sql_row[4] << " ";
cout << "telphone " << sql_row[2] << endl;
}
}
}
else
{
cout << "query sql failed!" << endl;
}
}
else
{
cout << "connect failed!" << endl;
}
if (result != NULL)
mysql_free_result(result);
mysql_close(&myCont);
system("pause");
return 0;
}