Sql 在同一排

Sql 在同一排,sql,oracle,Sql,Oracle,因此,如果您的桌子看起来像: Field1 Field2 ------ ------ Value 5 Something 10 我应该能够插入('Apple',7),对吗?然后,当我尝试插入('Value',7)时,它失败了,因为已经有两个值的行了 但是我可以按相反的顺序做:插入('Value',7),然后插入('Apple',7) 如果我这样做会怎么样 WITH mydata AS ( SELECT 'Apple' AS field1, 7 AS fiel

因此,如果您的桌子看起来像:

Field1     Field2
------     ------
Value      5
Something  10
我应该能够插入
('Apple',7),
对吗?然后,当我尝试插入
('Value',7)
时,它失败了,因为已经有两个值的行了

但是我可以按相反的顺序做:插入
('Value',7)
,然后插入
('Apple',7)

如果我这样做会怎么样

WITH mydata AS (
    SELECT 'Apple' AS field1, 7 AS field2 FROM dual UNION ALL
    SELECT 'Value', 7 FROM dual
INSERT INTO mytable
SELECT null, field1, field2 FROM mydata
这是成功还是失败?没办法知道。不能保证数据库操作按照您认为的顺序进行


如果两个会话尝试插入这两行,然后提交,您将遇到相同的问题。

例如
alter table MYTABLE add constraint UK\u MYTABLE unique(Field1,Field2)
这不会阻止您插入
'VALUE',10
对,因为
'VALUE'
10
在不同的行中并且不匹配。例如<代码>更改表格MYTABLE添加约束UK_MYTABLE unique(字段1,字段2)这不会阻止您插入
'VALUE',10
对,因为
'VALUE'
10
在不同的行中,并且不会匹配。这应该通过使用触发器来实现。“但我不想…同时重复Field1和Field2的值”这是否意味着只要不在同一行中重复Field1和Field2值,您就可以重复Field1值或Field2值?在表MYTABLE DDL中,不存在唯一/主键约束,如果您构建了一个约束来帮助您强制执行唯一性,则应使用触发器来实现这一点。“但我不想。。。同时重复Field1和Field2值“这是否意味着只要不在同一行中重复Field1和Field2值,您就可以重复Field1值或Field2值?在表MYTABLE DDL中,如果您构建了有助于强制唯一性的约束,则不存在唯一/主键约束
INSERT INTO MYTABLE VALUES(null, 'Value', 5);
/* This works as there isn´t a row with both Field1='Value' and Field2=5 at the same time */

INSERT INTO MYTABLE VALUES(null, 'Something', 10);
/* This works as there isn´t a row with both Field1='Something' and Field2=10 at the same time */
INSERT INTO MYTABLE VALUES(null, 'Value', 10);
/* This doesn´t work as there is a row with both Field1='Value' and Field2=10 at the same time */
CREATE TABLE MYTABLE (
    id INT NOT NULL AUTO_INCREMENT,
    Field1 VARCHAR(30) UNIQUE,
    Field2 NUMBER(10) UNIQUE
);
ORA-20000: Cannot have duplicate Field1 and Field2
ORA-06512: at "SCHEMA_NAME.MYTABLE__NOT_REPEAT_F1_AND_F2", line 33
ORA-04088: error during execution of trigger 'SCHEMA_NAME.MYTABLE__NOT_REPEAT_F1_AND_F2'
Field1     Field2
------     ------
Value      5
Something  10
WITH mydata AS (
    SELECT 'Apple' AS field1, 7 AS field2 FROM dual UNION ALL
    SELECT 'Value', 7 FROM dual
INSERT INTO mytable
SELECT null, field1, field2 FROM mydata