Mysql基本操作、C++Mysql简单应用、PythonMysql简单应用

时间:2021-09-24 14:59:41

MySql基本操作

-- 当指定名称的数据库不存在时创建它并且指定使用的字符集和排序方式

CREATE DATABASE

IF NOT EXISTS

db_name

CHARACTER SET UTF8

COLLATE utf8_general_ci;

-- 显示数据库语句

SHOW DATABASES;

-- 查看数据库的创建方式,主要是字符类型

SHOW CREATE DATABASE db_name;

-- 修改数据库的属性信息,比如修改字符集为 GBK

ALTER DATABASE db_name CHARACTER SET GBK;

-- 当一个数据库已存在时,对数据库进行删除操作

DROP DATABASE IF EXISTS db_name;

-- 使用一个数据库,设置当前指令应用的数据库

USE db_name;

-- 创建一张表的指令 CREATE TABLE table_name( column_name1 type1, column_name1 type1, column_name1 type1 )CHARACTER SET UTF8 COLLATE utf8_general_ci;

实例

CREATE TABLE SCHOOL_TABLE(
ID INT(10),
NAME CHAR(10)

)CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;
-- 查看指定表的内容

DESC table_name;

-- 指定数据库内的所有表

SHOW TABLES;

-- 显示数据表创建语句:

SHOW CREATE TABLE table_name;

-- 在表 table_name 中添加了类型为 new_type 一列

newcolumn_name [FIRST | AFTER column_name]

ALTER TABLE table_name ADD newcolumn_name new_type FIRST;

实例

ALTER TABLE school_table ADD num INT FIRST;

-- 仅修改某一张表指定列的类型信息

ALTER TABLE table_name MODIFY column_name new_type;

实例

ALTER TABLE school_table MODIFY ID CHAR

-- 修改某一张表指定列的列名和类型

ALTER TABLE table_name CHANGE column_name new_column_name new_type;

实例

ALTER TABLE SCHOOL_TABLE CHANGE NUM ABC CHAR;

-- 删除指定表的指定列

ALTER TABLE table_name DROP column_name;

-- 如何删除一张表

DROP TABLE table_name;

-- 向指定表的[所有]列中添加一条数据

INSERT INTO stu_info VALUE(1, "小明", "男", 1, now());

-- 向指定表的[指定]列中添加一条数据

INSERT INTO stu_info(name, class) VALUE("小红", 2);

-- 向指定表的所有列添加多条数据

INSERT INTO stu_info VALUES (1, "小明", '男', 1, "2010-06-07 10:54:08"), (2, "小红", '女', 2, "2011-06-07 10:54:08"), (3, "小黄", '女', 3, "2012-06-07 10:54:08"), (4, "小绿", '男', 5, "2013-06-07 10:54:08"), (5, "小清", '女', 3, "2014-06-07 10:54:08"), (6, "小紫", '男', 2, "2015-06-07 10:54:08"), (7, "小白", '女', 2, "2016-06-07 10:54:08"), (8, "小黑", '女', 1, "2017-06-07 10:54:08");

-- 无条件修改表内的所有数据

UPDATE stu_info SET sex='男';

-- 带条件的修改指定的数据

UPDATE stu_info SET sex='男' WHERE name="小清";

-- 带条件的删除

DELETE FROM stu_info WHERE name="小紫";

-- 无条件的删除

DELETE FROM stu_info;

-- 为指定表的指定列添加一个约束类型

ALTER TABLE stu_info MODIFY id int PRIMARY KEY;

-- 使用约束创建一张表

CREATE TABLE stu_info( id int PRIMARY KEY AUTO_INCREMENT, name varchar(20) UNIQUE KEY, sex ENUM('男', '女'), classid INT NOT NULL, score INT default 0, start_data DATETIME DEFAULT now() )CHARACTER SET UTF8 COLLATE utf8_general_ci;

-- 创建表2,保存班级的信息

CREATE TABLE class_info( id int PRIMARY KEY AUTO_INCREMENT, name varchar(20) NOT NULL )CHARACTER SET UTF8 COLLATE utf8_general_ci;

-- 添加外键, classid 保存的值必须是一个已存在的 class_info(id) 值

ALTER TABLE stu_info ADD FOREIGN KEY stu_info(classid) REFERENCES class_info(id);

-- 无条件查找指定表的所有内容

SELECT * FROM stu_info;

-- 无条件查找指定表的指定列内容

SELECT name, sex FROM stu_info;

-- 对查询到的结果进行去重

SELECT DISTINCT classid FROM stu_info;

-- 可以在查询的数值上直接执行算术运算

SELECT name, score*0.6 FROM stu_info;

-- 对显示出来的列取别名 as 是可选的

SELECT name as 姓名, score*0.6 as 成绩 FROM stu_info;

-- 使用关系运算符进行带条件的查询

SELECT * FROM stu_info WHERE classid > 1;

-- 使用 IN 关键字筛选结果为 set 中任何值的字段

SELECT * FROM stu_info WHERE classid IN (1, 3, 5);

-- 使用 BETWEEN AND 查询位于某一个区间内的数据

SELECT * FROM stu_info WHERE classid BETWEEN 3 AND 5;

-- 使用 LIKE 进行模糊查询 %(0或n个任意字符) _(1个任意字符)

SELECT * FROM stu_info WHERE name LIKE "%g";

-- 使用逻辑运算符进行多条语句的判断(and or not)

SELECT * FROM stu_info WHERE name LIKE "%g" OR sex="女";

-- 对查询到的结果进行排序 DESC(降序) ASC(升序)

SELECT * FROM stu_info ORDER BY start_data ASC;

-- 计算查询到的记录的总数

SELECT count(*) FROM stu_info;

-- 对结果(数值类型)进行平均值的计算

SELECT AVG(score) FROM stu_info;

-- 对结果(数值类型)进行求和计算

SELECT SUM(score) FROM stu_info;

-- 使用分组查询查询每一个班一共有多少个人

SELECT classid 班级 ,count(*) 人数 from stu_info GROUP BY classid

-- 使用 HAVING 对分组查询的数据进行筛选

SELECT classid 班级 ,count(*) 人数 from stu_info GROUP BY classid HAVING classid IN (1,3);

-- 通过 LIMIT n, m 选择输出第n个记录开始的m个记录 (从0开始后的3个,不是0到3.)

SELECT * FROM stu_info ORDER BY score DESC LIMIT 0, 3

-- 多表查询,查询到多张表的数据并组合成一个记录(会自动组合起来成不是想要的)

SELECT * FROM stu_info, class_info;

-- 多表查询(内连接)。基本的条件判断

SELECT * FROM stu_info, class_info WHERE stu_info.classid = class_info.id;

-- 使用外连接(left join\right join)已某一张表为基准查询所有的记录

SELECT * FROM stu_info right join class_info on stu_info.classid = class_info.id;

-- 使用子查询查询所有有女生的班级

SELECT DISTINCT * FROM class_info WHEREid IN ( SELECT classid FROM stu_info WHERE sex = "女" );

-- 子查询,如果任何一个班的同学分数大于80,输出总的前三名

SELECT * FROM stu_info, class_info WHERE EXISTS( SELECT score FROM stu_info WHERE score > 80 ) AND stu_info.classid = class_info.id ORDER BY score DESC LIMIT 0, 3

-- 输出所有和任何一个女生成绩的相同的男生的信息 ANY(满足任意条件)

SELECT * FROM stu_info, class_info WHERE score=ANY ( -- 女生的成绩 SELECT score FROM stu_info WHERE sex="女" )AND stu_info.classid = class_info.id AND sex='男';

-- 输出成绩高于所有男生的女生的信息 ALL(满足所有的条件)

SELECT * FROM stu_info, class_info WHERE stu_info.score >ALL ( SELECT score FROM stu_info WHERE sex="男" )AND stu_info.classid = class_info.id AND sex="女";

-- 数据库备份

mysqldump -u root -p tankwar_net > d:/tankwar_net_10_15.sql

-- 数据库还原 一

mysqldump -u root -p tankwar_net < d:/tankwar_net_10_15.sql

-- 数据库还原 二

mysql> use tankwar_net Database changed mysql> source d:/tankwar_net_10_15.sql;

C++ MySql简单应用

1.在Mysql安装目录下把【include文件夹、libmysql.dll、libmysql.lib】3个拷贝到项目文件

#include <iostream>
using namespace std;

// 1. 包含 mysql 需要用到的头文件,应用程序的环境要和mysql一致
#include "include/mysql.h"
// 2. 链接到 mysql 提供的 lib 文件
#pragma comment(lib, "libmysql.lib")

// 用于执行没有返回值的 sql 指令
void exec(MYSQL & mysql, LPCSTR sql)
{
// 1. 使用函数执行 sql 指令
mysql_query(&mysql, sql);

// 2. 对结果进行判断
if (mysql_errno(&mysql) != )
{
// 使用 mysql_error 输出错误的原因
printf("error: %s\n", mysql_error(&mysql));
system("pause"); ExitProcess();
}
}

// 用于执行有返回值的 sql 指令
void select(MYSQL& mysql, LPCSTR sql)
{
// 1. 使用函数执行 sql 指令
mysql_query(&mysql, sql);

// 2. 对结果进行判断
if (mysql_errno(&mysql) != )
{
// 使用 mysql_error 输出错误的原因
printf("error: %s\n", mysql_error(&mysql));
system("pause"); ExitProcess();
}

// 3. 获取 sql 指令的执行结果
MYSQL_RES* mysql_res = mysql_use_result(&mysql);

// 4. 获取查询到的结果的列数
int count = mysql_num_fields(mysql_res);

// 5. 通过获取到的列数便利获取所有的列名
MYSQL_FIELD* mysql_field = mysql_fetch_fields(mysql_res);
for (int i = ; i < count; ++i)
{
// 排除掉空指针的情况
if (mysql_field[i].name == nullptr)
printf("none\t");
else
printf("%s\t", mysql_field[i].name);
}
printf("\n");

// 6. 循环输出每一行的信息
MYSQL_ROW mysql_row = { };
while (mysql_row = mysql_fetch_row(mysql_res))
{
// 根据列数输出每一行的信息
for (int i = ; i < count; ++i)
{
// 排除掉空指针的情况
if (mysql_row[i] == nullptr)
printf("none\t");
else
printf(u8"%s\t", mysql_row[i]);
}
printf("\n");
}
}

int main(int argc, char* argv[])
{
// 3. 初始化 mysql 库,需要提供命令行参数
mysql_library_init(argc, argv, nullptr);

// 4. 初始化 mysql 对象,之后对数据库的操作都需要传入
MYSQL mysql = { };
mysql_init(&mysql);

// 5. 连接到数据库
mysql_real_connect(&mysql, "127.0.0.1", "root",
"", "school_table", , nullptr, );

// 6. 使用 mysql_errno 判断数据库是否连接成功
if (mysql_errno(&mysql) != )
{
// 使用 mysql_error 输出错误的原因
printf("error: %s\n", mysql_error(&mysql));
system("pause"); return ;
}

// 7. 执行数据的添加操作
exec(mysql, "INSERT INTO class_info(name) VALUE('123');");

// 8. 执行数据的查询操作
select(mysql, "select * from stu_info;");

// 9. 清理工作
mysql_library_end();

return ;
}

Python MySql简单应用

# encoding: utf8

import pymysql


# mysql 类,用于操作数据库
class Mysql:

# 构造函数,用于获取连接对象和游标
def __init__(self):
try:
# .获取连接对象
self.connect = pymysql.connect(host="127.0.0.1", port=,
user="root", password="", db="chat_table")
# .获取游标对象
self.cursor = self.connect.cursor()
except Exception as info:
print(info)

# 实例方法,用于执行没有返回值的语句
def insert(self, sql):
try:
# 执行 mysql 指令
self.cursor.execute(sql)
# 必须要提交数据,否则不会影响数据库
self.connect.commit()
except Exception as info:
# 回滚操作
self.connect.rollback()
# 输出错误信息
print(info)

# 实例方法,用于执行有返回值的语句
def select(self, sql):
try:
# 执行 mysql 指令
self.cursor.execute(sql)
# 获取到总的列数
count = self.cursor.rowcount
# 获取查询到的所有的数据
return count, self.cursor.fetchall()
except Exception as info:
# 回滚操作
self.connect.rollback()
# 输出错误信息
print(info)




if __name__ == "__main__":
mysql = Mysql()

# 返回的是一个元组,保存的是由每一行的信息组成的一个元组
# 想要获取第一行的第一列需要使用 rows[][]
print(mysql.select("select * from chat_user;"))

# user = "xiaogang"
# pswd = "xiaogangdemima"
# mysql.insert("INSERT INTO chat_user(user_name, user_pswd) VALUE('%s', md5('%s'))" % (user, pswd))