
数据库
文章平均质量分 85
碧海凌云
从平凡到神奇
展开
-
mysql中key 、primary key 、unique key 与index区别
索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行。表越大,花费时间越多。如果表对于查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据。如果一个表有1000行,这比顺序读取至少快100倍。注意你需要存取几乎所有1000行,它较快的顺序读取,因为此时我们避免磁盘寻道。所有的MySQL索引(PRIMARY、UNIQUE和INDEX)在B树中存储。字符串是自动地压缩前缀和结尾空间。索引用于:转载 2021-08-11 10:47:48 · 801 阅读 · 0 评论 -
MySQL的INSERT ··· ON DUPLICATE KEY UPDATE使用的几种情况
在MySQL数据库中,如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句,而要插入的行与表中现有记录的惟一索引或主键中产生重复值,那么就会发生旧行的更新;如果插入的行数据与现有表中记录的唯一索引或者主键不重复,则执行新纪录插入操作。另外,ON DUPLICATE KEY UPDATE不能写where条件。示例:create table kid_score(id tinyint unsigned not null,birth_day date not null,sco转载 2021-06-02 14:35:41 · 921 阅读 · 0 评论 -
SQL各种连接——自连接、内连接、外连接、交叉连接的使用
首先准备了两个表 (Student 和 Course),其中 Student 表中的 C_S_Id 字段为外键列,关联的是 Course 表的 C_Id 主键列。内连接(inner join):满足on条件表达式,内连接是取满足条件表达式的两个表的交集(即两个表都有的数据)。 select * from Student s inner join Course c on s.C_S_Id=c.C_Id**外连接(outer join)**分为:左外连接(left join / left outer转载 2021-01-21 14:18:23 · 1727 阅读 · 0 评论 -
MySQL的四种事务隔离级别
MySQL的四种事务隔离级别本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDBhttps://www.cnblogs.com/huanongying/p/7021555.html一、事务的基本要素(ACID)1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。2转载 2021-01-12 20:44:45 · 134 阅读 · 0 评论 -
for update行级锁的作用
1、for update叫排它锁,是一种行级锁,一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行.如果其它用户想更新该表中的数据行,则也必须对该表施加行级锁.即使多个用户对一个表均使用了共享更新,但也不允许两个事务同时对一个表进行更新,真正对表进行更新时,是以独占方式锁表,一直到提交或复原该事务为止。行锁永远是独占方式锁。只有当出现如下之一的条件,便释放共享更新锁:(1)、执行提交(COMMIT)语句;(2)、退出数据库(LOG OFF转载 2020-11-29 18:49:52 · 683 阅读 · 0 评论 -
一条SQL语句在MySQL中如何执行的
本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的。在分析之前我会先带着你看看 MySQL 的基础架构,知道了 MySQL 由那些组件组成以及这些组件的作用是什么,可以帮助我们理解和解决这些问题。一 MySQL 基础架构分析1.1 MySQL 基本架构概览下图是 MySQL 的一个简要架构图,从下图你可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的。先简单介绍一下下图涉及的一些组件的基转载 2020-05-31 22:40:40 · 216 阅读 · 0 评论 -
索引,主键,唯一索引,联合索引 的区别
简单描述MySQL中,索引,主键,唯一索引,联合索引 的区别,对数据库的性能有什么影响索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们 包含着对数据表里所有记录的引用指针。普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯一任务是加快对数据的访问速度。普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼 此各不相同的值,在为这个数据列创建索引的时候就应该用关键字 UNIQUE 把它 定义为一个唯一索引。也就是说,唯一索引可以保证数据记录的唯原创 2020-05-25 10:35:40 · 3459 阅读 · 0 评论 -
timestamp的两个属性:CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP
timestamp有两个属性,分别是CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP两种,使用情况分别如下:CURRENT_TIMESTAMP当要向数据库执行insert操作时,如果有个timestamp字段属性设为CURRENT_TIMESTAMP,则无论这个字段有木有set值都插入当前系统时间ON UPDATE CURRENT_TIMESTAMP当执行update操作是,并且字段有ON UPDATE CURRENT_TIMESTAMP属性。则转载 2020-05-22 20:52:29 · 921 阅读 · 0 评论 -
mysql复合索引、普通索引总结
对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。下面用几个例子对比查询条件的不同对性能影响.create table test(a int,b int,c in...转载 2019-11-16 19:08:22 · 335 阅读 · 0 评论 -
MySQL组合索引与最左匹配原则详解
前言之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和面试官交流,发现遗漏了些东西,这里自己整理一下这方面的内容。什么时候创建组合索引?当我们的where查询存在多个条件查询的时候,我们需要对查询的列创建组合索引为什么不对没一列创建索引减少开销覆盖索引效率高减少开销:假如对col1、col2、col3创建组合索引,相当于创建了(co...转载 2019-11-16 18:25:57 · 294 阅读 · 0 评论 -
MySQL 聚簇索引和非聚簇索引的认识
聚簇索引是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序的算法。特点是存储数据的顺序和索引顺序一致。一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引。在《数据库原理》一书中是这么解释聚簇索引和非聚簇索引的区别的:聚簇索引的叶子节点就是数据节点,而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。因此,MYSQL中不同的数据存储引擎对聚簇索引的支持不同就很...转载 2019-11-16 09:49:30 · 158 阅读 · 0 评论 -
MySQL Key值(PRI, UNI, MUL)的含义、超键(super key)、候选键(candidate key)、主键(primary key)
一、PRI主键约束;UNI唯一约束;MUL可以重复。参考:http://www.cnblogs.com/licheng/archive/2010/10/16/1852938.html二、超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键候选键(candidate key):不含有多余属性的超键称为候选键主键(primary key):用户选作元组标识的一个...转载 2019-11-15 17:29:35 · 5143 阅读 · 0 评论 -
如何分析DB2的错误信息
SQLCODE: -407, SQLSTATE: 23502:这个报错的准确描述是这样的,不能把NULL值插入到定义为NOT NULL的列中。也就是违反了完整性约束异常。在开发中,这个报错,我们会经常遇到。问题也很简单,就是“不能为空的列,空了”。对于一个字段个数很多的表来说,排查起来有难度。如何精准定位呢?其实也很简单。我们可以从报错信息中了解更多详情,这些详情可以帮助我们精准定位问题所在...原创 2019-09-11 10:39:50 · 496 阅读 · 0 评论 -
MySQL中字段类型char、varchar和text的区别
在MySQL中,char、varchar和text类型的字段都可以用来存储字符类型的数据,char、varchar都可以指定最大的字符长度,但text不可以。它们的存储方式和数据的检索方式也都不一样。数据的检索效率是:char > varchar > text具体说明:char:存储定长数据很方便,CHAR字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义cha...转载 2019-07-29 14:53:49 · 666 阅读 · 0 评论 -
C/C++连接MySql数据库
本文对如何使用MySql的API连接MySql数据库,开发环境为VS2008. 一、VS2008工程设置工作 首先,建立一个windows应用程序的工程,将C/C++->预处理器->预处理器定义下的_WINDOWS改为_CONSOLE, 将连接器->系统->子系统 选择为控制台。 由于我们要使用Mysql的API,并且我们机子上肯定安装了转载 2018-02-01 17:03:00 · 861 阅读 · 0 评论 -
30多条mysql数据库优化方法,千万级数据库记录查询轻松解决
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描 Sql 代码 : select id from t where num is null; 可以在 num 上设置默认值 0,确保表中 num 列没有 null 值,然后这样查询转载 2018-01-23 20:16:46 · 230 阅读 · 0 评论 -
数据库的基本概念
关系数据库是表的集合,它是由一个或多个关系模式定义。SQL语言中的定义功能包括数据库,基本表,视图,索引的定义1.关系模型的基本概念关系数据库以关系模型为基础,它有一下三部分组成:数据结构——模型所操作的对象、类型的集合 完整性规则——保证数据有效。正确的约束条件 数据操作——对模型对象所允许执行的操作方式 关系(Relation)是一个由行和列组成的二维表格,表中的每一行是一条记录(Reco原创 2015-11-15 22:49:26 · 977 阅读 · 0 评论 -
oracle数据库常用的99条查询语句
select * from emp;select empno, ename, job from emp;select empno 编号, ename 姓名, job 工作 from emp;select job from emp;select distinct job from emp;select distinct empno, job from emp; 说明:因为雇员编号不重复,转载 2017-02-28 20:57:45 · 352 阅读 · 0 评论 -
使用ocilib库访问oracle数据库
下面是一个简单的建立数据库连接的代码: #include "ocilibDemo.h"void err_handler(OCI_Error *err){ printf( "code : ORA-%05i\n" "msg : %s\n" "sql : %s\n",转载 2017-03-03 17:27:45 · 3260 阅读 · 0 评论 -
C++使用 OCILIB 连接 Oracle
#include <iostream>#include "ocilib.h"//错误处理void err_handler(OCI_Error *err){ int err_type = OCI_ErrorGetType(err); char *err_msg = (char*)OCI_ErrorGetString(err); printf("%s - %s\n",转载 2017-03-04 16:54:38 · 3090 阅读 · 0 评论 -
C/C++连接MySql数据库
本文对如何使用MySql的API连接MySql数据库,开发环境为VS2008. 一、VS2008工程设置工作 首先,建立一个windows应用程序的工程,将C/C++->预处理器->预处理器定义下的_WINDOWS改为_CONSOLE, 将连接器->系统->子系统 选择为控制台。 由于我们要使用Mysql的API,并且我们机子上肯定安装了Mysql数据库,所以我们要将工程的转载 2017-04-19 09:14:44 · 991 阅读 · 0 评论 -
查看mysql数据库及表编码格式
1.查看数据库编码格式mysql> show variables like 'character_set_database'; 2.查看数据表的编码格式mysql> show create table <表名>; 3.创建数据库时指定数据库的字符集mysql>create database <数据库名> character set utf8;4.创建数据表时指定数据表的编码格式create转载 2017-04-19 09:17:08 · 5966 阅读 · 0 评论 -
MySQL 获得当前日期时间 函数
MySQL 获得当前日期时间 函数获得当前日期+时间(date + time)函数:now()mysql> select now();+---------------------+| now() |+---------------------+| 2008-08-08 22:20:46 |+---------------------+获得当前日期+时间(date + time)函数:sy转载 2017-04-19 11:23:28 · 384 阅读 · 0 评论 -
C/C++中调用api设置mysql连接的编码方式
MySQL在C/C++中调用api设置连接mysql的编码方式有以下几种方法:mysqli_set_charset 调用示例:ret = mysql_set_character_set(mysql, "utf8"); 说明: 推荐使用的设置方法,与mysql的连接断开自动重连后仍能保持设置的编码格式,并且影响mysql_real_escape_string函数功能,使mysql_real_转载 2017-04-19 19:23:29 · 426 阅读 · 0 评论 -
mysql中的字符串的拼接
更新一个字段,在它的后面加一个字符串,不查询数据库得到这个字段值 怎么添加?? 我的test表,有个user字段,我现在想在它后面加了另一个用户的名字 我在mysql数据库这样写 UPDATE test SET user= user+ ‘,phpchina’ WHERE id= ‘2’; 这样是不对的,mysql数据库把它当成数字相加了,user字段值变成空了。转载 2017-04-19 21:19:07 · 33717 阅读 · 0 评论 -
MySql接口API函数综述
C API函数概述 函数描述mysql_affected_rows()返回上次UPDATE、DELETE或INSERT查询更改/删除/插入的行数。mysql_autocommit()切换 autocommit模式,ON/OFFmysql_change_user()更改打开连接上的用户和数据库。mysql_charset_name()返回用于连接的默认字符集的名称。mysql_转载 2017-04-19 21:24:18 · 611 阅读 · 0 评论 -
C++利用MySQL API连接和操作数据库实例详解
1.C++连接和操作MySQL的方式 系列文章: MySQL 设计和命令行模式下建立详解 C++利用MySQL API连接和操作数据库实例详解 在Windows平台,我们可以使用ADO、ODBC或者MySQL API进行连接和操作。ADO (ActiveX Data Objects,ActiveX数据对象)是Microsoft提出的一个用于存取数据源的COM组件。它提供了程序语言和统一数据访转载 2017-04-21 19:22:08 · 4106 阅读 · 1 评论 -
Mysql C API函数详解
mysql_init() MYSQL *mysql_init(MYSQL *mysql)描述分配或初始化与mysql_real_connect()相适应的MYSQL对象。如果mysql是NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。如果mysql_init()分配了新的对象,当调用mysql_close()来关闭连接时。将释放该对象。返回值初始化的MY原创 2017-04-20 19:55:37 · 7760 阅读 · 0 评论 -
SQL中 decode()函数简介
decode()函数简介:主要作用:将查询结果翻译成其他值(即以其他形式表现出来,以下举例说明);使用方法:Select decode(columnname,值1,翻译值1,值2,翻译值2,…值n,翻译值n,缺省值)From talbenameWhere …其中columnname为要选择的table中所定义的column,·含义解释: decode(条件,值1,翻译值1,值2,翻译转载 2017-04-24 10:14:02 · 432 阅读 · 0 评论 -
SQL连接查询保障效率的简易原则
连接查询是数据库操作中很常用的操作,也是最耗费资源的操作。提高连接查询的效率,对于整体的效率提高有很大的意义。实际使用发现连接操作确实需要做一些优化。一、一些原则看了一些网友的经验后,总结一下:使用子查询减少连接的两张表的字段、记录数量。建立视图,减少需要处理的字段、记录数量。用于连接的字段建立索引。连接方式优先选择内连接,外连接尽量不使用。尽可能将记录少的表放在连接的左边,以减少先处理的记录转载 2017-05-18 14:41:41 · 395 阅读 · 0 评论 -
提高SQL查询效率
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id转载 2017-05-18 15:08:18 · 234 阅读 · 0 评论 -
数据库为何要有复合主键(多主键)
最近学习一点数据库的基本知识,被一个问题困惑了许久:主键是唯一的索引,那么为何一个表可以创建多个主键呢? 其实“主键是唯一的索引”这话有点歧义的。举个例子,我们在表中创建了一个ID字段,自动增长,并设为主键,这个是没有问题的,因为“主键是唯一的索引”,ID自动增长保证了唯一性,所以可以。 此时,我们再创建一个字段name,类型为varchar,也设置为主键,你会发现,在表的多行中你是可以填写相同转载 2017-11-09 20:50:57 · 17259 阅读 · 2 评论 -
查看ORACLE 数据库及表信息
– 查看ORACLE 数据库中本用户下的所有表 SELECT table_name FROM user_tables;– 查看ORACLE 数据库中所有用户下的所有表 select user,table_name from all_tables;– 查看ORACLE 数据库中本用户下的所有列 select table_name,column_name from user_tab_colu转载 2017-02-28 15:24:13 · 919 阅读 · 0 评论