Tag: sql

SQL – 多对多表主键

在阅读这个问题的评论之后,出现这个问题: 数据库devise 当你创build一个多对多的表时,你应该在两个外键列上创build一个复合主键,还是创build一个自动增量代理“ID”主键,然后在你的两个FK列上放上索引一个独特的约束)? 在每种情况下插入新logging/重新索引对性能有什么影响? 基本上这个: PartDevice ———- PartID (PK/FK) DeviceID (PK/FK) 与此相比: PartDevice ———- ID (PK/auto-increment) PartID (FK) DeviceID (FK) 评论者说: 使两个ID为PK意味着该表按物理顺序在磁盘上进行物理sorting。 因此,如果我们插入(Part1 / Device1),(Part1 / Device2),(Part2 / Device3),则(Part 1 / Device3)数据库将不得不拆分表并插入条目2和3之间的最后一个。许多logging,这变得非常成问题,因为每次添加数百条,数千条或数百万条logging时都会涉及到这些logging。 相比之下,自动增量PK允许将新logging添加到最后。 我问的原因是因为我一直倾向于做没有代理自动增量列复合主键,但我不知道是否代理键实际上是更高性能。

SQL作为维恩图join

我在理解sql中的连接时遇到了麻烦,并且遇到了我认为可能会帮助我的这个映像。 问题是我不完全理解它。 例如,图像右上angular的连接,其中B的全部颜色为红色,但只有A的重叠。图像使得它看起来像是圆圈B是sql语句的主要焦点,但是sql语句本身,从A开始(从A中select,joinB),给我的印象是相反的,即A将成为sql语句的焦点。 同样,下面的图片只包含了B圈的数据,那么为什么在连接语句中包含了A呢? 问题:从右上angular开始按顺时针方向工作,然后在中心完成,可以有人提供关于每个sql映像表示的更多信息,解释 a)为什么在每种情况下都需要join(例如,尤其是在没有从A或B中获取数据的情况下,即只有A或B而不是两者都有颜色的情况下) b)以及其他任何可以阐明为什么图像是sql的良好表示的细节

无法删除或更新父行:外键约束失败

在做: DELETE FROM `jobs` WHERE `job_id` =1 LIMIT 1 它错误: #1451 – Cannot delete or update a parent row: a foreign key constraint fails (paymesomething.advertisers, CONSTRAINT advertisers_ibfk_1 FOREIGN KEY (advertiser_id) REFERENCES jobs (advertiser_id)) 这是我的表格: CREATE TABLE IF NOT EXISTS `advertisers` ( `advertiser_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `password` char(32) NOT NULL, […]

SQL:WHERE子句中的IF子句

MS SQL中的WHERE子句中可以使用IF子句吗? 例: WHERE IF IsNumeric(@OrderNumber) = 1 OrderNumber = @OrderNumber ELSE OrderNumber LIKE '%' + @OrderNumber + '%'

SQL Server的事务回滚的错误?

我们有在SQL Server 2005上运行一些SQL的客户端应用程序,如下所示: BEGIN TRAN; INSERT INTO myTable (myColumns …) VALUES (myValues …); INSERT INTO myTable (myColumns …) VALUES (myValues …); INSERT INTO myTable (myColumns …) VALUES (myValues …); COMMIT TRAN; 它由一个长string命令发送。 如果其中一个插入失败,或者命令的任何部分失败,SQL Server是否会回滚事务? 如果它不回滚,我是否必须发送第二个命令来回滚? 我可以给出关于我正在使用的api和语言的具体信息,但是我认为SQL Server应该对任何语言都做出相应的回应。

如何在SQLAlchemy-flask应用程序中执行原始SQL

你如何在SQLAlchemy中执行原始SQL? 我有一个python web应用程序运行在瓶和通过SQLAlchemy接口到数据库。 我需要一种方法来运行原始的SQL。 查询涉及多个表连接以及embedded视图。 我试过了: connection = db.session.connection() connection.execute( <sql here> ) 但我不断收到网关错误。

我怎样才能清除SQL Server查询caching?

我有一个简单的查询运行在SQL Server 2005上 SELECT * FROM Table WHERE Col = 'someval' 我第一次执行查询可能需要> 15 secs 。 随后的执行在< 1 sec内返回。 我怎样才能让SQL Server 2005不使用任何caching的结果? 我试过跑步 DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE 但是这似乎对查询速度没有影响(仍然< 1 sec )。

为什么我会在SQL中selectCHAR over VARCHAR?

我意识到,如果我所有的值都是固定宽度,build议使用CHAR。 但是,什么? 为什么不只是selectVARCHAR的所有文本字段只是为了安全。

我怎样才能绕过MySQL的Errcode 13与SELECT INTO OUTFILE?

我正在尝试使用MySQL SELECT INTO OUTFILE语句将表的内容转储到csv文件。 如果我做: SELECT column1, column2 INTO OUTFILE 'outfile.csv' FIELDS TERMINATED BY ',' FROM table_name; outfile.csv将在服务器上的这个数据库的文件存储在同一个目录下被创build。 但是,当我将我的查询更改为: SELECT column1, column2 INTO OUTFILE '/data/outfile.csv' FIELDS TERMINATED BY ',' FROM table_name; 我得到: ERROR 1 (HY000): Can't create/write to file '/data/outfile.csv' (Errcode: 13) Errcode 13是一个权限错误,但即使我将/ data的所有权更改为mysql:mysql,并给予它777权限,我也可以得到它。 MySQL以用户“mysql”运行。 奇怪的是我可以在/ tmp中创build文件,而不是在我试过的任何其他目录下,即使设置了权限,以使用户mysql应该能够写入目录。 这是在Ubuntu上运行的MySQL 5.0.75。

如何将逗号分隔值转换为oracle中的行?

这是DDL – create table tbl1 ( id number, value varchar2(50) ); insert into tbl1 values (1, 'AA, UT, BT, SK, SX'); insert into tbl1 values (2, 'AA, UT, SX'); insert into tbl1 values (3, 'UT, SK, SX, ZF'); 注意,这里的值是用逗号分隔的string。 但是,我们需要如下的结果 – ID VALUE ————- 1 AA 1 UT 1 BT 1 SK 1 SX 2 […]