沈阳网络推广建站,湖州南浔建设局网站,承接网站建设,网站竞价托管文章目录 1 预备知识1.1 安装1.2 登录 退出1.3 配置文件my.cnf 2 基础知识2.1 链接服务器2.2 什么是数据库2.3 基本使用2.3.1创建表2.3.2 插入数据 2.4 服务器、数据库、表的关系2.5 SQL分类2.6 存储引擎 3 Mysql数据库的操作3.1 创建和删除3.2 字符集和校验规则3.3 查看… 文章目录 1 预备知识1.1 安装1.2 登录 退出1.3 配置文件my.cnf 2 基础知识2.1 链接服务器2.2 什么是数据库2.3 基本使用2.3.1创建表2.3.2 插入数据 2.4 服务器、数据库、表的关系2.5 SQL分类2.6 存储引擎 3 Mysql数据库的操作3.1 创建和删除3.2 字符集和校验规则3.3 查看数据库3.4 修改数据库3.5 备份和恢复3.6 数据库的链接情况 4 表的操作4.1 创建表4.1.1 复制表 4.2 查看表4.3 修改表4.3.1重命名4.3.2 插入数据4.3.3 向表中新增一列4.3.4 修改某一列的属性4.3.5 删除某一列 4.4 删除表 5 数据类型5.1 数值类型5.2 bit类型5.3 浮点数类型5.3.1 float /double5.3.2 decimal 5.4 字符类型5.4.1 char5.4.2 varchar 5.5 日期类型5.6 enum 和 set 类型5.6.1 enum类型和set类型的选取 —— find_in_set 6 表的约束6.1 空属性约束6.2 default约束6.3 comment约束6.4 zerofill6.5 主键 —— primary key6.6 auto_increment6.7 唯一键 —— unique key6.7.1 与主键的区别 6.8 外键 —— references 7 Mysql基本查询7.1 insert —— 增7.1.1 一次插入多行7.1.2 主键/唯一键冲突后修正 7.2 select —— 查7.2.1基本查询7.2.2 distinct 查询去重7.2.3 where条件7.2.4 order by子句7.2.5 筛选分页结果 —— limit 7.3 update —— 改7.4 delete —— 删7.4.1 截断表 7.5 插入查询操作 7.7 聚合函数7.8 group by 分组查询7.8.1 having 8 复合查询8.1 多表查询8.1.1 合并两张表内连接 8.2 自链接8.3 子查询8.3.1 单行子查询8.3.2 多行子查询8.3.3 多列子查询8.3.4 在from子句中使用子查询 8.4 合并查询 9 内置函数9.1 日期函数9.2 字符串函数9.3 数学函数9.4 其他函数 10 表的内外链接10.1 内连接10.2 外连接10.2.1 左外连接10.2.2 右外连接 11 索引11.1 存储11.2 聚簇索引和非聚簇索引11.3 索引操作11.3.1主键索引 —— primary key11.3.2 唯一索引 —— unique11.3.3 普通索引11.3.4 复合索引11.3.5 全文索引 11.4 explain 12 事务12.1 什么是事务哪些存储引擎支持事务 12.2 事务的提交方式12.3 事务的基本操作12.4 事务异常12.5 事务的隔离级别12.5.1 理解 隔离性与隔离级别12.5.2 如何解决幻读问题 12.6 查看与设置隔离级别12.7 理解RC与RR —— MVCC机制RC与RR的本质区别 13 视图14 用户管理14.1 用户操作14.2 用户权限 15 C/C引入MySQL客户端库15.1 C API 1 预备知识
1.1 安装 获取yum源rz : http://repo.mysql.com/ 安装yum源rpm -ivh mysql57-community-release-e17.rpm 安装mysqlyum install -y mysql-community-server 报错 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
安装完后 启动mysql start mysqld 查服务端口号 netstat -nltp 1.2 登录 退出
mysql -u root -p
quit
1.3 配置文件my.cnf
//免密码登录
--skip-grant-tables 2 基础知识
2.1 链接服务器
mysql -h 127.0.0.1 -P 3306 -u root -p-h指明登录部署了mysql服务的主机-P指明要访问的端口号-u指明登录用户-p指明需要输入密码
2.2 什么是数据库
mysql 是数据库服务的客户端mysqld是数据库服务的服务器端mysql本质是基于CS模式的一种网络服务数据库一般指的是再磁盘或内存存储的特定结构的数据
2.3 基本使用
2.3.1创建表 查看数据库文件: cd /var/lib/mysql2.3.2 插入数据 2.4 服务器、数据库、表的关系 2.5 SQL分类 DDLdata definition language数据定义语言用来维护存储数据的结构 代表指令: create, drop, alter DMLdata manipulation language数据操纵语言用来对数据进行操作 代表指令 insertdeleteupdate DML中又单独分了一个DQL数据查询语言代表指令 select DCLdata control language数据控制语言主要负责权限管理和事务 代表指令 grantrevokecommit
2.6 存储引擎 什么是存储引擎数据库管理系统如何存储数据如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法 MyISAM 、 BDB 、 Memory 、 innoDB最常用、 Archive 、 NDB show engines \G #查看存储引擎3 Mysql数据库的操作
3.1 创建和删除 创建 —— 本质是在 /var/lib/mysql创建一个目录 create [if not exists] database db_name; #[]里面的是可选项 删除 —— 本质是在 /var/lib/mysql删除一个目录 drop [if exists] database db_name;3.2 字符集和校验规则
查看编码集写
show variables like character_set_database;查看校验集读
show variables like collation_%;创建一个使用utf-8字符集、并带校对规则的数据库如果没有写默认为utf-8
create database dp_name charsetutf8 collateutf8_general_ci;
create database dp_name character set utf8 collate utf8_general_ci; #与 charsetutf8 一样3.3 查看数据库
查看当前在哪一个数据库中
select database();查看所有数据库
show databases;3.4 修改数据库
alter database db_name charsetutf8 #对编码格式修改3.5 备份和恢复
备份
mysqldump -P3306 -u root -B [数据库名1] [数据库名2] [数据库备份存储的文件路径] mysqldump -P3306 -u root -B [数据库名] [表名1] [表名2] [数据库备份存储的文件路径] #备份同一个数据库中的不同表恢复
source [数据库备份存储的文件路径]3.6 数据库的链接情况
show processlist4 表的操作
4.1 创建表
CREATE TABLE [if not exists] table_name (field1 datatype comment [文字说明],field2 datatype,field3 datatype
)character set [字符集] collate [校验规则] engine [存储引擎];4.1.1 复制表
create table [new_table] like [old_table]; 4.2 查看表
desc [表名]show create table [表名] \G4.3 修改表
1
4.3.1重命名
改表名
alter table [表名] rename to [新表名] ; #或者下面一种
rename table [] to []; 改表中某一列的名字
alter table [表名] change [old_name] [new_name] [属性];4.3.2 插入数据
insert into user values (1, yy, 1234, 2003-8-26);4.3.3 向表中新增一列
alter table [表名] add [新增列名] [列属性] comment [说明] after [列名];4.3.4 修改某一列的属性
alter table [表名] modify [列名] [列属性] comment [说明]; 4.3.5 删除某一列
alter table [表名] drop [要删除的列名]; 4.4 删除表
drop table [表名] 5 数据类型
5.1 数值类型
tinyint、 smallint、 mediumint、 int、 bigint 分别占1、2、3、4、8个字节 默认为有符号整数无符号tinyint unsigned、 smallint unsigned…
和C/C不同的是Mysql中值超出某一类型的数据范围会直接报错mysql中数据类型是一种约束 5.2 bit类型
[type_name] bit(M) # M表示位数范围[1,64], 默认为15.3 浮点数类型
5.3.1 float /double
[type_name] float(m, d)
# m表示数字总个数与是有符号或无符号无关d表示小数位数
# 默认有符号 (m - d 表示整数的位数)
# 2
3
5.3.2 decimal
基本用法与float类似精度比float高 5.4 字符类型
5.4.1 char
type_name char(L)
# L为字符的固定长度一个汉字/字母视为一个字符
# 最大长度为2555.4.2 varchar
type_name varchar(L)
# L表示字符长度
# 最大长度为65535字节65535/3个字符 utf-8一个字符占3个字节varchar中用1-3个字节表示内容总长度“用多少给多少”所以实际用于数据存储的字节最大有65532
实际存储char(4)varchar(4)char占用字节varchar占用字节AAA4 * 3 121 * 3 1 4
5.5 日期类型 当表被更新时timestamp自动更新成当前时间
5.6 enum 和 set 类型
enum 多选一插入时只能写枚举的常量或者下标从1开始set 多选多用n个位表示是否选取1表示选全0表示空串
建表
3表示二进制的011即插入basketball和football 5.6.1 enum类型和set类型的选取 —— find_in_set 上述语句选取的是只包含’football‘的而不是含有’football‘的
find_in_set
select find_in_set(a, a,b,c); # 0为false 非0为true下标4
若要查询包含多项可用and链接find_in_set
6 表的约束
通过约束使插入数据库表中的数据如何符合预期
6.1 空属性约束
[type_name] [type] not nullnull默认或 not null约束 not null 表示当插入数据时该列不能为空 5
6
6.2 default约束
如果同时约束了 not null 和 default 在插入数据时可以忽略该列即填入默认值没有写默认值那么默认值默认为NULL没有not null 约束时
[type_name] [type] default [defualt_value] # 设置默认值6.3 comment约束
comment没有实际含义用来描述字段类似于注释
[type_name] [type] comment [描述]6.4 zerofill
将数字剩余的宽度填充0
7
6.5 主键 —— primary key
primary key 用来约束该字段里面的数据不能重复且不能为空 一张表中最多只能有一个主键不代表只能有一列为主键主键所在的列通常是整数类型 去除主键
alter table [table_name] drop primary key; 添加主键
alter table [table_name] add primary key([某一字段名])复合主键当多个字段值均相同时才报错 6.6 auto_increment
自增长每次插入后加一一张表最多只能有一个自增长必须配合主键使用
create table [table_name] (id int primary key auto_increment,#...
) AUTO_INCREMENT1000; #默认为1获取上一次auto_increment的值
select last_insert_id();6.7 唯一键 —— unique key
create table [table_name] (id int unique key,#...
);6.7.1 与主键的区别
唯一键可以为NULL且可以多个为空主键更多是标识唯一性唯一键更多是保证不重复(配合primary key使用保证主键之外的唯一性)
6.8 外键 —— references 外键约束主要定义在从表上主表必须有主键或唯一键约束定义外键后要求外键列数据必须在主表的主键列存在或者为NULL 约束主表(master_table)与从表(slave_table)的关系 例如主表为班级从表为学生通过外键将从表的某一列与主表建立联系 foreign key([从表的某一列]) references [主表名]([主表某一列])7 Mysql基本查询
7.1 insert —— 增
7.1.1 一次插入多行
insert into [table_name] values(/*...*/), (/*...*/), (/*...*/);7.1.2 主键/唯一键冲突后修正
#若存在冲突则更新
#若没有冲突则插入values括号内的值
insert into [table_name] values() on duplicate key update [][], [][];replace
#如果有冲突删除之前的新增一条
replace into [table_name] () values ();7.2 select —— 查
7.2.1基本查询
#全列查询
select * from [table_name];
#选列查询
select [/*可以写表达式 通过as重命名列*/] from [table_name]; 7.2.2 distinct 查询去重
select distinct [列名] from [table_name]7.2.3 where条件
比较运算符
运算符说明, , , 大于大于等于小于小于等于等于NULL 不安全例如 NULL NULL 的结果是 NULL等于NULL 安全例如 NULL NULL 的结果是 TRUE(1)!, 不等于BETWEEN a0 AND a1范围匹配[a0, a1]如果 a0 value a1返回 TRUE(1)IN (option, …)如果是 option 中的任意一个返回 TRUE(1)IS NULL是 NULLIS NOT NULL不是 NULLLIKE / not like模糊匹配。% 表示任意多个包括 0 个任意字符_ 表示任意一个字符 逻辑运算符 可以用括号将多个逻辑条件分组
运算符说明AND多个条件必须都为 TRUE(1)结果才是 TRUE(1)OR任意一个条件为 TRUE(1), 结果为 TRUE(1)NOT条件为 TRUE(1)结果为 FALSE(0)
7.2.4 order by子句
NULL表示最小值默认升序执行顺序是先筛选数据最后排序
select [] from [table_name] order by [column_name1] [asc/desc], [column_name2] [asc/desc], ...
#多个排序当第一个相同时再通过第二个排...7.2.5 筛选分页结果 —— limit
#筛选前n条
select [] from [table_name] where ... limit n; #[0,n) ,表的每一行数据下标从0开始
#筛选第s到n条
select [] from [table_name] where ... limit s, n; #[s, n)
select [] from [table_name] where ... limit n offset s; #[s, n)7.3 update —— 改
对查询到的结果进行列值更新
update [table_name] set [column_name][expr] [where ...] ...;7.4 delete —— 删
delete from [table_name]; #删除表内所有数据
delete from [table_name] where [column_name][expr]...; #删除指定数据delete from [table_name] order by [column] asc limit n; #删除表内排序后的前n行数据
7.4.1 截断表
清空后会重置auto_increment项速度比delete快因为它不走事务不记录日志
truncate table_name; #与delete from [table_name]类似都是清空表的数据7.5 插入查询操作
insert into [table_name] select [column] from [table_name] ...;7.7 聚合函数
countsumavgmax / min
7.8 group by 分组查询
分组之后便于聚合统计group by 按照后一列的值进行分组分成不同行 7.8.1 having
对分组聚合统计之后的数据进行筛选类似于where
#显示平均工资低于2000的部门及它的平均工资
select department_no, avg(salary) department_avg_salary from employee group by department_no having department_avg_salary2000; having于where的区别执行顺序 where对任意列进行筛选having对聚合之后的结果进行筛选where先having在group by之后
8 复合查询
8.1 多表查询
以下两张表为例 8.1.1 合并两张表内连接
#通过deptno相同合并两张表
select * from emp, dept where emp.deptnodept.deptno;8.2 自链接
#默认自链接方式
select * from emp as t1, emp as t1;# 查找员工FORM的领导的名字和编号
# 1. 通过子查询
select ename, empno from emp where empno(select mgr from emp where enmaeFORM);# 2. 通过自链接表
select e2.ename, e2.empno from emp e1, emp e2 where e1.enameFORM and e1.mgre2.empno;8.3 子查询
select [] from [] where ()(select [] from [] where ...);8.3.1 单行子查询
# 显示SMITH同一部门的员工
select * from emp where deptno(select deptno from emp where enameSMITH);8.3.2 多行子查询
三个关键字
in筛选在一个集合中的列
# 查询与10号部门的工作岗位相同的员工的名字、岗位、工资、部门号但是不包含10好部门自己的
select enmae, job, sal, deptno from emp where job in (select distinct job from emp where deptno10) and deptno10;all所有
# 显示工资比30号部门的所有员工的工资高的员工的名字、工资、部门号
select ename, sal, deptno from emp where sal all (select distinct sal from emp where deptno30);any任意
# 显示工资比30号部门的任意一个员工的工资高的员工的名字、工资、部门号
select ename, sal, deptno from emp where sal any (select distinct sal from emp where deptno30);8.3.3 多列子查询
# 与员工SMITH的部门和工作相同的其他员工的数据
select * from emp where (deptno, job)(select deptno, job from emp where enmaeSMITH);8.3.4 在from子句中使用子查询
上述子查询在where语句之后充当判断条件以下子查询出现在from子句中将查询结果作为一张新的表
# 显示每个高于自己部门平均工资的员工的信息
select * from emp, (select deptno, avg(sal) avg_sal from emp group by deptno) as tmp where emp.deptnotmp.deptno and emp.saltmp.avg_sal;显示每个部门的信息和人员数量
select * from dept t1, (select deptno, count(*) dept_num from emp group by deptno) t2 where t1.deptnot2.deptno;8.4 合并查询
union求两个表的并集union all直接拼接两个表
9 内置函数
9.1 日期函数 #查看当前时间
select current_time(); #想表中插入时间数据 (birthday 类型为date)
insert into [] (birthday) value (date(current_date())); #统计两分钟以内插入的数据
select content msg_time from [] where msg_time date_sub(now(), interval 2 minute);
9.2 字符串函数
charset(str)查看字符串字符集concat(str, [])链接instr(str, substr)查找返回下标没有则返回0ucase() , lcase转大写转小写left(str, length)取str左边起长度为length的子串length(str)求str的长度 字节长度 一个汉字utf-8占三个字节replace(str, search_str, replace_str)将str中的search_str替换成repalce_strstrcmp(str1, str2)比较两字符串substring(str, position, length)取str[positon, posiron length]ltrim(str), rtrim(str)trim(str)去除字符串左侧/右侧/两侧空格
#用concat链接多列信息
select concat(姓名: , name, 总分, chinese english, 语文成绩 chinese, 英语成绩, english) msg from exam_score;9.3 数学函数
abs()bin(), hex()十进制转二进制/十六进制conv(number, from_base, to_base)将任意数进行进制转换ceiling(), floor()上取整/下取整rand()返回随机浮点数[0.0, 1.0]mod(number, denominator)取模求余format(number, n)对浮点数保留n位小数
9.4 其他函数
user()查询当前用户md5()将一个字符串进行MD5摘要得到一个32位字符串database()查询当前使用的数据库password()mysql内置的加密函数ifnull(x, y)if x ? x : y
10 表的内外链接
10.1 内连接
select 字段 from table1 inner join table2 on 连接条件 and 其他条件;# 显示SMITH的名字和部门名称
# 之前合并表的写法
select ename, dname from emp, dept where emp.deptnodept.deptno and enameSMITH;#标准的内连接写法
select ename, dname from emp inner join dept on emp.deptnodept.deptno and enameSIMTH;10.2 外连接
10.2.1 左外连接
链接两张表左侧表完全显示称为左外连接
select 字段 from table1 left join table2 on 链接条件; 10.2.2 右外连接
select 字段 from table1 right join table2 on 连接条件;11 索引
11.1 存储
在linux中表结构在磁盘中就是文件 找到文件就是定位到对应的扇区磁头-柱面-扇区Mysql进行IO的基本单位为16KBpage页目录B树叶子节点保留数据非叶子节点不要数 据只保存目录项叶子节点全部用双向链表连起来
11.2 聚簇索引和非聚簇索引 innoDB和MyISAM都采用B树 MyISAM最大的特点是将索引page和数据page分离也就是叶子节点没有数据而存储数据地址 称为非聚簇索引 innoDB叶子节点存放数据称为聚簇索引 一张表可能对应多个B树
11.3 索引操作
查看索引结构
show index from [tablename]\G11.3.1主键索引 —— primary key
创建主键索引
#其他创建主键索引的方法写在表的约束中
alter table [] add primary key([]);删除主键索引
slter table [] drop paimary key;11.3.2 唯一索引 —— unique
其他索引的删除
alter table [] drop index []
drop index [索引名] on [表名]其他操作在表的约束中
11.3.3 普通索引
创建
#1.在创建表时添加
#2.alter以某一列为普通索引
alter table [] add index([]);
#3.创建索引并给索引起名
create index [index _name] on [表名](列名);删除与唯一键索引相同
11.3.4 复合索引 11.3.5 全文索引
当文章字段或有大量文字的字段进行检索时使用全文索引
create table articles (id int unsigned auto_increment not null primary key,title varchar(200),body text,fulltext(title, body)
)engineMyISAM;
11.4 explain
一条查询语句所用的索引
expliain select * from ...;12 事务
12.1 什么是事务
mysql是网络服务多个客户端请求访问数据mysql内部采用多线程 - 事务锁事务是一组DML语句这些语句在逻辑上具有相关性要么全部成功要么全部失败一个完整的事务满足以下四个属性 原子性(Atomicity)对于所有操作保证原子性一次性全部完成一致性(Consistency)写入数据必须完全符合所有的预设规则保证数据的精确度可预期隔离性(Isolation)未提交、读提交、可重复读、串行化持久性(Durability)保证数据的修改是永久的
哪些存储引擎支持事务 设置隔离级别为读未提交
set global transaction isolation level READ UNCOMMITTED;查看链接mysql服务的用户
show processlist;12.2 事务的提交方式
事 物的提交方式有两种自动提交、手动提交
#查看提交方式
show variables like autocommit;
#修改提交方式
set autocommit0;12.3 事务的基本操作
create table if not exists account (id int primary key,name varchar(20) not null default,balance decimal(10,2) not null default 0.0
)engineInnoDB default charsetutf8;#1. 启动事务
start transaction;
#或
begin;#2. 设置保存点s1
savepoint s1;#3. 插入
insert into account values(1, xx, 1234);#4. 回滚事务提交之后无法回滚
rollback to s1;#5. 结束
commit;
12.4 事务异常
只要输入begin或者start transaction事务便需要通过commit提交之后才会持久化与是否开启自动提交无关当操作异常时mysql会自动回滚单独一句sql会被打包成事务当自动提交打开时mysql异常退出后该sql语句会自动提交关掉之后需要手动commit
12.5 事务的隔离级别
12.5.1 理解 隔离性与隔离级别 隔离性数据库中为了保证事务执行过程中尽量不受干扰区分事务谁先执行谁在执行一个执行的事务时原子的相互隔离 隔离级别数据库中允许事务受不同程度的干扰 读未提交(read uncommitted)两个事务当一个事务对数据进行修改但未提交第二个事务立马能看见修改隔离级别最低 dirty read一个事务在执行中读到另一个执行中事务的更新或其他操作但是未commit的数据的现象 读提交(read committed )一端提交之后另一端才能看见修改 不可重复读non repeatable read)用一个事务内在不同时间段独到的数据不同 幻读当同一个查询在不同的时间产生不同的结果集时事务中就会出现所谓的幻象问题。例如如果 SELECT 执行了两次但第二次返回了第一次没有返回的行则该行是“幻像”行。 可重复读(repeatable read)一端提交之后另一端需要也提交或者结束才能看见修改默认隔离级别 串行化(serializable)在每个读的数据行上加上共享锁强制事务排序使之不可能互相冲突隔离级别最高
12.5.2 如何解决幻读问题
12.6 查看与设置隔离级别
查看隔离级别
select global.tx_isolation; #全局select session.tx_isolation; #仅该会话局部
设置
#[]内可不写 {}内四选一
set [session|global] transaction isolation level {read uncommitted | read committed | repeatable read | serializable};#设置完全局之后重新登录之后局部和默认的隔离级别通过全局初始化12.7 理解RC与RR —— MVCC机制
多版本并发控制MVCC是一种用来解决读写冲突的无锁并发控制 每个事务都有一个事务ID根据事务ID决定事务的先后顺序 隐藏字段 undo log
MySQL以服务进程的方式在内存中运行一些机制例如索引、事务、隔离性、日志等都是在内存中完成的即在MySQL内部的相关缓冲区中保存相关数据据在合适时间写入磁盘中
先简单理解成一个内存缓冲区用来保存日志数据
Read View
Read View本质是用来进行可见性判断的当某个事务执行快照读时会对该记录创建一个Read View读视图
事务中快照读的结果非常依赖该事务首次出现快照读的地方决定了该事务后续快照读结果的能力
RC与RR的本质区别
RC级别下事务中每次快照读都会新生成一个Read ViewRR级别下同一个事务下的第一次快照才会创建Read View
13 视图
视图是一个虚拟表其内容由表查询定义。
#语法
create view [view_name] as [基表];#E.G.
create view ename_dname as select ename, dname from emp inner join dept on emp.deptnodept.deptno;修改基表同样也会影响视图的数据
14 用户管理
root初始化密码 root:Youyang826826 Dusong:Dusong041008 14.1 用户操作
use musql;
#查看主机、用户、密码
select host, user, authentication_string from user;#创建一个在本地登录的用户不能远程登陆Dusong 密码123456
create user Dusonglocalhost identified by 123456; #刷新
flush privileges;#删除用户
drop user 用户名主机名;#创建可以远端登录的用户
create user Dusong% identified by 123456;#自己该自己的密码
set passwordpassword(xxxx);#root用户改别人的密码
#1.
set password for 用户名主机名password(xxxx);
#2.
update user set authentication_stringpassword(xxx) where user用户名;14.2 用户权限
#给某用户权限
grant 权限列表 on 库.表名 to 用户名主机名# 给某用户所有权限
grant all [privileges] on ...;#查看某个用户的权限
show grant for ;#去掉用户的某个权限
revoke [] on 库.表名 from
#eg. revoke delete,insert on rootDB.user from Dusong%;15 C/C引入MySQL客户端库
#mysql动静态库
ls /usr/lib64/mysql/
#mysql头文件
ls /usr/include/mysql///查看客户端版本
mysql_get_client_info()15.1 C API
初始化
#include mysql/mysql.h
#include iostreamint main() {//初始化MYSQL *myfd mysql_init(nullptr);//链接, 返回nullptr则链接失败mysql_real_connect(myfd, 127.0.0.1, Dusong, 123456, test_db, 3306, nullptr, 0); //设置字符集mysql_set_character_set(myfd, utf8); //sqlmysql_query(myfd, select * from user); //查询user表//获取结果MYSQL_RES *res mysql_store_result(myfd);//关闭连接 mysql_close(myfd);
}链接数据库 设置字符集默认时latin1而mysqld使用的utf8
mysql_set_character_set(myfd, utf8);下发mysql命令 获取查询结果集 select 获取行数my_ulonglong mysql_num_rows(MYSQL_RES *res)获取列数my_ulonglong mysql_num_fields(MYSQL_RES *res) 打印结果
my_ulonglong row mysql_num_rows(res);
my_ulonglong col mysql_num_fields(res);//属性
MYSQL_FIELD *fields mysql_fetch_fields(res);
for (int i 0; i col; i) {cout fields[i].name \t;
}
cout \n;//内容
for (int i 0; i row; i) {MYSQL_RES row_res mysql_fetch_row(res);for (int j 0; j col; j) {cout row_res[j] \t;}cout \n;
}释放结果集的空间 yfd mysql_init(nullptr);
//链接, 返回nullptr则链接失败
mysql_real_connect(myfd, 127.0.0.1, Dusong, 123456, test_db, 3306, nullptr, 0); //设置字符集
mysql_set_character_set(myfd, utf8); //sql
mysql_query(myfd, select * from user); //查询user表//获取结果
MYSQL_RES *res mysql_store_result(myfd);//关闭连接
mysql_close(myfd);} - 链接数据库[外链图片转存中...(img-AQJEj5cy-1711710514039)]- 设置字符集默认时latin1而mysqld使用的utf8cpp
mysql_set_character_set(myfd, utf8);下发mysql命令
[外链图片转存中…(img-APSfUMvL-1711710514039)] 获取查询结果集 select [外链图片转存中…(img-m0nKT7hq-1711710514039)] 获取行数my_ulonglong mysql_num_rows(MYSQL_RES *res)获取列数my_ulonglong mysql_num_fields(MYSQL_RES *res) 打印结果
my_ulonglong row mysql_num_rows(res);
my_ulonglong col mysql_num_fields(res);//属性
MYSQL_FIELD *fields mysql_fetch_fields(res);
for (int i 0; i col; i) {cout fields[i].name \t;
}
cout \n;//内容
for (int i 0; i row; i) {MYSQL_RES row_res mysql_fetch_row(res);for (int j 0; j col; j) {cout row_res[j] \t;}cout \n;
}释放结果集的空间
[外链图片转存中…(img-mBm3QdXp-1711710514039)]
[外链图片转存中…(img-N9Xe9sDv-1711710514040)] 下述以该表为例 ↩︎ 四舍五入之后超出范围 ↩︎ 四舍五入之后在合法范围之内 ↩︎ 查找hobby中包含football的数据 ↩︎ address没有默认值 ↩︎ address不能为null ↩︎ int(10) unsigned中的10表示因为该无符号整数最大值2^32总共有10位数字有符号11位有一位表示符号 ↩︎