数据库
衣舞晨风
不预测,只应对
展开
-
MySQL select for update 加锁
当多人操作同一个客户下账号的时候,希望顺序执行,某个时刻只有一个人在操作;当然可以通过引入redis这种中间件实现,但考虑到并发不会很多,所以不想再引入别的中间件。通过简单的select for update 可以实现在并发不高的情况锁住数据。两个事务执行顺序按照SQL后面的指定,当指定到第三步的时候,能获取到具体数据。事务一、二 开两个终端或者在DBvear开两个窗口。先看下数据库自动提交有没有关闭。等到超时时间后,会提示错误。在执行第3步的时候会卡住。原创 2024-05-22 18:26:59 · 471 阅读 · 0 评论 -
SQL99 和 SQL92 的区别
我个人建议多表连接使用 SQL99 标准,因为层次性更强,可读性更强。原创 2023-06-27 07:13:18 · 255 阅读 · 0 评论 -
“分布式事务”的理解(适用于访问多个数据库之间)
总体来看,如果所有数据的修改仅依靠单个数据源就能完成,则这个事务就相当简单了。然而,随着商业需求的日益增加,应用程序变得越来越复杂,经常需要访问多个数据库,这些数据库通常分布在不同的地方,这就是分布式事务。分布式事务修改的数据存储在多个或多种类型的数据源中,这些数据源分布在多台机器上,甚至更复杂的情况。 设想有一个事务,要求数据变化发生在两个分离的数据库中,仍然要求所有的ACID特性测试转载 2014-04-29 08:43:12 · 2731 阅读 · 0 评论 -
order by 、group by 、having的用法区别
order by 从英文里理解就是行的排序方式,默认的为升序。 order by 后面必须列出排序的字段名,可以是多个字段名。 group by 从英文里理解就是分组。必须有“聚合函数”来配合才能使用,使用时至少需要一个分组标志字段。什么是“聚合函数”? 像sum()、count()、avg()等都是“聚合函数” 使用group by 的目的就是要将数据分类汇总。一般如: select 单位名称,原创 2014-01-08 09:47:50 · 4009 阅读 · 0 评论 -
SQL语句Left join 中On和Where的用法区别
原文地址:点击打开链接SQL语句如下:转载 2014-04-13 11:10:27 · 2152 阅读 · 0 评论 -
Subqueries are not allowed in this context. Only scalar expressions are allowed.
我想获取表中某一列的最大值,然后插入到另外一个表中,报错的Sql如下:insert into AA(AA_ID,AA_YWFSRQ) values(NewID(),( SELECT CONVERT(varchar, DATEADD(day,- 1, CAST(SUBSTRING(MAX(YEB_RQ), 1, 4)原创 2014-04-21 18:34:17 · 2594 阅读 · 0 评论 -
内存数据库
内存数据库,顾名思义就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。同时,内存数据库抛弃了磁盘数据管理的传统方式,基于全部数据都在内存中重新设计了体系结构,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多,一般都在10倍以上。内存数据库的最大原创 2014-05-07 08:19:25 · 1482 阅读 · 0 评论 -
Delete与truncate的区别
Delete table_name 删除"表格记录"会把操作记录在日志中,可以通过事务回滚来恢复删除的数据。 truncate table table_name删除"表格记录"不可恢复 。 delete 语句是数据库操作语言(dml),这个操作会放到rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。原创 2014-03-19 19:03:11 · 2124 阅读 · 0 评论 -
对于PowerDesigner中设计表自动生成Sql的分析
if exists (select 1 from sysobjects where id = object_id('DWLX') and type = 'U') drop table DWLXgo/*=======================================================原创 2014-03-19 19:18:47 · 2212 阅读 · 0 评论 -
SQL编码中注意的性能问题
1、选择合适的数据类型为列选择最小化的数据类型如果一列中的文本长度不一,使用VARCHAR而不是CHAR不存储Unicode不要使用NVARCHAR或者NCHAR如果一行的长度不超过8000,使用VARCHAR而不是TEXT对于仅存数字的列要使用数字类型而不要用字符类型不要使用字符串类型存储日期数据。2、谨慎使用触发器保持触发器内的代码最小化可能的情况下尽量用其原创 2014-04-29 15:18:37 · 1499 阅读 · 0 评论 -
怎样用SQL语句查询一个数据库中的所有表?
SQL : select * from information_schema.tablesORACLE: select table_name from user_tables ACCESS: select name from MSysObjects where type=1 and flags=0原创 2014-01-08 09:37:43 · 2466 阅读 · 0 评论 -
无法打开物理文件 "D:\understructuredata _DAT.MDF"。操作系统错误 5:"5(拒绝访问。)"
错误信息:标题: Microsoft SQL Server Management Studio------------------------------附加数据库 对于 服务器“HC-PC”失败。 (Microsoft.SqlServer.Smo)有关帮助信息,请单击: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+S原创 2014-11-27 18:32:20 · 5338 阅读 · 2 评论 -
十问 TiDB :关于架构设计的一些思考
“我希望能够把 TiDB 的设计的一些理念能够更好的传达给大家,相信大家理解了背后原因后,就能够把 TiDB 用的更好。”做 TiDB 的缘起是从思考一个问题开始的:为什么在数据库领域有这么多永远也躲不开的坑?从 2015 年我们写下第一行代码,3 年以来我们迎面遇到无数个问题,一边思考一边做,尽量用最小的代价来快速奔跑。作为一个开源项目,TiDB 是我们基础架构工程师和社区一起努力的结果...转载 2018-11-17 07:10:49 · 521 阅读 · 0 评论 -
OceanBase 选举
1、RootServer主备每个集群一般部署一主一备两台RootServer,主备之间数据强同步,即所有的操作都需要首先同步到备机,接着修改主机,最后才能返回操作成功。RootServer主备之间需要同步的数据包括:RootTable中记录的tablet分布信息、ChunkServerManager中记录的ChunkServer机器变化信息以及UpdateServer机器信息。Tablet复制...原创 2018-11-13 08:59:54 · 855 阅读 · 0 评论 -
OceanBase 架构初探
1、设计思路OceanBase的目标是支持数百TB的数据量以及数十万TPS、数百万QPS的访问量,无论是数据量还是访问量,即使采用非常昂贵的小型机甚至是大型机,单台关系数据库系统都无法承受。一种常见的做法是根据业务特点对数据库进行水平拆分,通常的做法是根据某个业务字段(通常取用户编号,user_id)哈希后取模,根据取模的结果将数据分布到不同的数据库服务器上,客户端请求通过数据库中间层路由到不...原创 2018-11-13 08:44:14 · 24794 阅读 · 8 评论 -
Oracle 连接查询(mysql、 sql server一样)
背景:emp表中有14条记录:dept表中4条记录:salgrade表中有5条记录:一、交叉连接(CROSS JOIN) 交叉连接(CROSS JOIN):有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积。 例如:下面的语句1和语句2的结果是相同的(均为56条记录)。 语句1:隐式的交叉连原创 2014-02-08 16:34:15 · 1597 阅读 · 0 评论 -
SQL Select查询原理--查询语句执行原则(基础)
1.单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据SELECT的选择列选择相应的列进行返回最终结果。1)简单的单表查询SELECT 字段 FROM 表名 WHERE 条件表达式那它们是按什么顺序执行呢?分析器会先看语句的第一个词,当它发现第一个词是SELECT关键字的时候,它会跳到FROM关键字,然后通过FROM关键字转载 2014-04-13 09:54:28 · 4493 阅读 · 1 评论 -
Sql查询原理与Select执行顺序(详细)
sql查询原理和Select执行顺序一 sql语句的执行步骤 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义。 2) 语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。 3)视图转换,将涉及视图的查询语句转换为相应的对基表查询语句。 4)表达式转换, 将复杂的 SQL 表达式转换为较简单的等效连接表达式。 5)选择优化器,不同的优化器转载 2014-04-13 10:21:11 · 5104 阅读 · 0 评论 -
数据库中varchar和Nvarchar区别与联系
在数据库中新建表的时候发现了字段类型有的带n有的不带n,那么两者之间有什么区别? 于是上网查找一些资料如下:一、1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim()。2、VARCHAR。存原创 2015-05-13 19:46:36 · 3516 阅读 · 0 评论 -
Visual Studio 2010生成SQL Server测试数据
1、创建SQL Server 2005数据库项目首先,打开Visual Studio 2010,选择新建项目,在下图中,选择建立一个SQL Server 2005的数据库项目,命名为Database12、导入数据在数据库项目中鼠标右键,在弹出的菜单中选择“导入数据对象和设置”,如下图:这时会打开一个数据导入的向导窗口,如下图,会提示用户连接已有的数据库,我们原创 2015-04-23 15:10:55 · 5185 阅读 · 4 评论 -
SQL UNION 和 UNION ALL 操作符
SQL UNION 操作符UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。SQL UNION 语法SELECT column_name(s) FROM table_name1UNIONSELECT colu转载 2014-03-05 16:08:33 · 2495 阅读 · 0 评论 -
Column \'表名.某列名\' is invalid in the select list because it is not contained in either an aggregate f
汉语:这个错误是提示'表名.某列名' 字段不在GROUP BY中解决方案:group by 后面是要跟着的 select 中所有不是聚合函数的字段原创 2014-01-08 09:47:44 · 11878 阅读 · 0 评论 -
Sql语句把一个表的某几列的数据存到另一个表里的方法
原文地址:sql语句把一个表的某几列的数据存到另一个表里的方法作者:星星月亮一、如何用slq语句把一个表中的某几个字段的数据插入到另一个新表中,就要用下面这条slq语句: insert into 表名1(字段1,字段2) select 字段1,字段2 from 表名2 这里有一点值得注意的是这2个字段要一一对应,并且按顺序。二、如果另一个表是已经有数据的表,只希望更改其中的一列或几列的话,则转载 2014-01-08 09:44:08 · 4675 阅读 · 0 评论 -
数据库事务
BEGIN TRAN标记事务开始COMMIT TRAN 提交事务ROLLBACK TRAN回滚事务 一般把DML语句(select ,delete,update,insert语句)放在BEGIN TRAN...COMMIT TRAN 之间作为一个事务处理也就是那些语句执行过程中如果遇到错误,无论哪句遇到错误,所有语句都会回滚到BEGIN TRAN之前的状态。原创 2014-01-20 16:26:49 · 1127 阅读 · 0 评论 -
更新数据库中某一列的值,让其在原数的基础上加N
update 表名 set 目标列名 = 目标列名 + N ;原创 2014-01-23 11:39:22 · 7385 阅读 · 0 评论 -
select * from table where 1<>1
一般是用来选择表结构。表结构,指的就是表的列的名称、类型和数量。一般是: CREATE TABLE B AS SELECT * FROM A WHERE 1这样就可以复制一个表结构而不复制数据。 因为ORACLE没有布尔字面值,不能写成 WHERE FALSE,而只能写成1就是不等于的意思,当然你写1=2,22原创 2014-01-08 09:45:50 · 2744 阅读 · 1 评论 -
select 1 from 表名
select 1 from table与select* from table 从作用上来说是没有差别的,都是查看数据库中这个表是否有记录。select1 from 中的1是一常量(可以为任意数值),查到的所有行的值都是它,但从效率上来说,1>*,因为不用查字典表。table表是一个数据表,假设表的行数为10行。1:select 1 from table 增加临时列,每行的列值是原创 2014-01-08 09:45:48 · 2944 阅读 · 0 评论 -
要求从表A查数据插入到表B中,并且要求如果表A中已存在的数据,就不要重复插入
insert into A select * from B where not exists (select 1 from A where A.ID=B.ID) insert when (not exists (select 1 from 表名 where 检验重复的条件)) then into 表名 values(相应的值)select 1 from dual原创 2014-01-08 09:41:22 · 2120 阅读 · 0 评论 -
Execution error: \'the function name is not a recognized built-in function name\'
SQL Server scalar user defined functions must be called with 2 part names. You need to write as username before function. So if your function name is "function1" and is defined in the dbo schema, the转载 2014-01-08 09:47:08 · 2874 阅读 · 0 评论 -
Error: String or binary data would be truncated. The statement has been terminated
Error: String or binary data would be truncated. The statement has been terminated数据库出错原因: 表字段创建的太短,插入的数据太长导致的错误。原创 2014-01-08 09:47:13 · 8523 阅读 · 0 评论 -
SQL ALTER TABLE 语法
如需在表中添加列,请使用下列语法:ALTER TABLE table_nameADD column_name datatype要删除表中的列,请使用下列语法:ALTER TABLE table_name DROP COLUMN column_name原创 2014-01-08 09:41:24 · 1168 阅读 · 0 评论 -
SQL COUNT(column_name) 语法
COUNT(column_name) 函数返回指定列的值的数目(NULL 不计入)COUNT(*) 函数返回表中的记录数计算一个表中有几行数据:select count(*) from 表名;原创 2014-01-08 09:40:48 · 3781 阅读 · 0 评论 -
将一个数据库表中的数据导入另一个数据库相应表中
语句形式为: insert into 数据库名.框架名.表名(列名) select (列名) from 数据库名.框架名.表名 where 条件 类似这样写就行了insert into MyEmp.dbo.原创 2014-01-08 09:41:15 · 1621 阅读 · 0 评论 -
SQL 修改表的某列为同一值
update 表名 set 列名=想改的值例子: 数据库表 Card 中的某列名为date ,列中的数据都不相同,把这一列的所有数据都改为2013 update Card set Date=2013原创 2014-01-08 09:44:01 · 6642 阅读 · 0 评论 -
查询出某字段值不为空的记录的SQL语句怎么写
select * from 表名 where 字段名 is not null原创 2014-01-08 09:44:05 · 11379 阅读 · 0 评论 -
select * from 表名 where 1=1
1=1 代表true, 如果单独是这个sql语句,可以不写where 1=1。但如果在程序中需要拼装sql语句。比如后面要加条件,就要写上这个。select * from table where 1=1因为table中根本就没有名称为1的字段,所以该SQL等效于select * from table,这个SQL语句很明显是全表扫描,需要大量的IO操作,数据量越大越慢,建议查询时增加必输项,即whe原创 2014-01-08 09:45:52 · 6214 阅读 · 0 评论 -
SQL GROUP BY 语句
合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句。GROUP BY 语句GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。SQL GROUP BY 语法SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name operator valueGRO原创 2014-01-08 09:47:26 · 1254 阅读 · 0 评论