相关疑难解决方法(0)

在postgresql中添加一个二分之一的非空约束

如果我在Postgresql中有一个表:

create table Education ( 
    id                  integer references Profiles(id),
    finished            YearValue not null,
    started             YearValue,
    qualification       text,
    schoolName          text,
    studiedAt           integer references Organizations(id),
    primary key (id)
);
Run Code Online (Sandbox Code Playgroud)

我需要创建一个约束,以便schoolName或者studiedAt不需要为null(其中一个必须包含信息).

我该怎么做呢?

sql postgresql constraints database-schema

24
推荐指数
1
解决办法
1万
查看次数

在Sql Server中相当于MySQL ON DUPLICATE KEY UPDATE

我试图在Sql Server(2012)中找到等效的以下MySql查询?

INSERT INTO mytable (COL_A, COL_B, COL_C, COL_D)
VALUES ( 'VAL_A','VAL_B', 'VAL_C', 'VAL_D')
ON DUPLICATE KEY UPDATE COL_D= VALUES(COL_D);
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

PS.我已经读过MERGE查询具有类似的功能,但我发现它的语法非常不同.

mysql sql sql-server

24
推荐指数
3
解决办法
2万
查看次数

是'黑洞'表恶吗?

阅读这个问题我刚刚学会了blackhole表技巧的存在:基本上是使用单个表来插入数据,然后是在许多其他表中分割数据的触发器.

一旦开发项目的开发人员意识到这一点,我想知道这是否会导致问题.

这个tecnique的优点和缺点是什么?

编辑:当我看到这个例子时,我想到的眨眼是关于交易:如果由于某种原因交易失败,你会找到blackhole包含原始数据的行,用于历史目的,也许可以帮助调试 - 但这似乎成为我能看到的唯一+1黑洞.想法?

mysql database postgresql database-design

18
推荐指数
2
解决办法
3289
查看次数

数据库触发器什么时候坏?

可能重复:
数据库是否触发了恶意?

关于数据库触发器有很多负面信息,只是想让社区在好的和坏的时候采取行动.

sql database sql-server triggers

11
推荐指数
3
解决办法
1万
查看次数

管理会话变量的方法

我一直在阅读(mysql)触发过去几天...特别是我想要做的是找出一个更新用户信息的好方法.


用于此的案例与用户管理系统有关: 例如,admin用户将用户更新regular为a manager,此用户type更改将enable|disable接口上的软件功能.

问题:type除非您查询数据库并重置例如$_SESSION['user']['type']变量和/或用户登录系统,否则 您将不会知道此用户更改.


问题:有没有什么好方法可以解决这个问题?

php mysql session triggers session-variables

8
推荐指数
1
解决办法
250
查看次数

想要将MySQL字段的值限制为特定范围(十进制值)

我想将表格行中的字段值限制为特定范围.是否可以将我的relationship_level字段限制为[0.00到1.00]

目前我正在使用DECIMAL(2,2),它不允许DECIMAL(1,2),因为M必须> = D.我假设DECIMAL(2,2)的数据类型实际上允许来自00.00的值高达99.99?

CREATE TABLE relationships (
    from_user_id MEDIUMINT UNSIGNED NOT NULL,
    to_user_id MEDIUMINT UNSIGNED NOT NULL,
    relationship_level DECIMAL(2,2) UNSIGNED NOT NULL,
    PRIMARY KEY (from_user_id, to_user_id), 
    FOREIGN KEY (from_user_id) REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE NO ACTION,
    FOREIGN KEY (to_user_id) REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE NO ACTION,
    INDEX relationship_from_to (to_user_id, from_user_id, relationship_level)
) ENGINE = INNODB;
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点,谁能预见到任何限制?

非常感谢!

mysql decimal database-schema sqldatatypes

6
推荐指数
1
解决办法
5023
查看次数

数据库触发器对于跨表完整性约束是否安全?

我建议使用触发器检查交叉表完整性约束来回答这个问题.评论中建议它可能会导致问题:

执行跨行检查的触发器很少在大多数数据库上工作...因为它们无法从其他事务中读取未提交的行

但是,我没有找到任何支持索赔的消息来源.官方 文档没有提到任何内容.我发现的其他问题在这里也有所涉及- 它主要批评潜在的隐藏复杂性,因为触发器在第一眼看不到.即使是评分最高的答案也会承认他们对完整性问题的使用.

所以我的问题是:数据库触发器对于跨表完整性约束是否安全?特别是,下面的解决方案是否有效?


总结原始问题.我们有桌子

  • Player - PlayerID,PlayerName
  • 投注 - BetID,BetName
  • plays_in - BetID,PlayerID

BetName和PlayerID组合的约束是唯一的约束.建议触发器的定义:

CREATE TRIGGER check_bet_name BEFORE INSERT ON plays_in 
  FOR EACH ROW BEGIN
      DECLARE bet_exists INT DEFAULT 0;
      DECLARE msg VARCHAR(255);

      SELECT 1 INTO bet_exists 
        FROM Bet AS b1
        WHERE b1.BetID = NEW.BetID
          AND EXISTS (SELECT * 
            FROM plays_in AS p JOIN Bet AS b2 USING (BetID)
            WHERE p.PlayerID = NEW.PlayerID AND b2.BetName = b1.BetName …
Run Code Online (Sandbox Code Playgroud)

mysql sql triggers transactions

4
推荐指数
1
解决办法
1594
查看次数

使用MERGE的算术溢出错误(数字到数字):SQL Server错误?

我有一个TargetTableDECIMAL(20, 7)列的目标表.我也有一个SourceTable包含DECIMAL(20, 7)列的源表,但是这个表中的值都是整数.

当我尝试将数据UPSERT成TargetTableSourceTable通过MERGE声明,我得到一个标准错误.

算术溢出错误将数字转换为数据类型数字.

我真的不明白为什么会发生这种情况,因为两种数据类型都是相同的.

但奇怪的是:当我使用SELECT INTOon TargetTable来创建测试表TestTable,然后将合并的目标更改为TestTable,upsert完成.我也弄不明白为什么会是这样,因为TargetTableTestTable是大部分相同.

有没有人遇到过这个,这是一个错误,还是有一些我不知道的SQL Server的细微差别?


示例代码:

失败:

SET NUMERIC_ROUNDABORT Off
GO

MERGE
    TargetTable Target
USING
    (
        SELECT
            cast(forecast as DECIMAL(20, 7)) forecast
          ,[SegmentID]
          ,[Country]
          ,[Environment]
          ,[YearColumn]
          ,[ForecastYear]
          ,[Criterion]
        FROM
            SourceTable
    ) Source
    ON
    (
        Target.SegmentID = Source.SegmentID
        AND Target.Country = Source.Country
        AND Target.Environment = Source.Environment
        AND Target.YearColumn = …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008

3
推荐指数
1
解决办法
1988
查看次数

插入和删除的伪表存储在哪里?

SQL Server 触发器允许访问 两个特殊表INSERTED- 具有“之后”值和DELETED“之前”值。

这些存储在哪里?它们是否存在于tempdb或与所操作的表位于同一个数据库中?

sql sql-server

3
推荐指数
1
解决办法
767
查看次数

MySQL性别表字段

如果我想在表格中创建性别字段,如何确保我的数据库不接受除"M"或"F"之外的任何值?

 $sqlCommand = "CREATE TABLE members (
             id int(11) NOT NULL auto_increment,
             ... 
             ...
             ...
             ...
             gender
             )";
Run Code Online (Sandbox Code Playgroud)

谢谢

mysql

2
推荐指数
2
解决办法
2万
查看次数