我可以在SQLite网站上找到关于此的语法"图表",但没有示例和我的代码崩溃.我在单个列上有其他具有唯一约束的表,但我想在两列上向表添加约束.这就是我所带来的SQLiteException,消息"语法错误".
CREATE TABLE name (column defs)
UNIQUE (col_name1, col_name2) ON CONFLICT REPLACE
Run Code Online (Sandbox Code Playgroud)
我这样做是基于以下几点:
为了清楚起见,我提供的链接上的文档说明CONTSTRAINT name
应该在我的约束定义之前.
可能导致解决方案的一点是,无论我的括号列定义如何,调试器都会抱怨.
如果我放
...last_column_name last_col_datatype) CONSTRAINT ...
Run Code Online (Sandbox Code Playgroud)
错误接近"CONSTRAINT":语法错误
如果我放
...last_column_name last_col_datatype) UNIQUE ...
Run Code Online (Sandbox Code Playgroud)
错误接近"UNIQUE":语法错误
我想开始使用dplyr代替ddply,但我无法理解它是如何工作的(我已阅读文档).
例如,为什么当我尝试mutate()时,"group_by"函数不能正常工作?
看着mtcars:
库(车)
假设我创建了一个data.frame,它是mtcars的摘要,按"cyl"和"gear"分组:
df1 <- mtcars %.%
group_by(cyl, gear) %.%
summarise(
newvar = sum(wt)
)
Run Code Online (Sandbox Code Playgroud)
然后说我想进一步总结这个数据帧.使用ddply,它很简单,但是当我尝试使用dplyr时,它实际上并不是"分组依据":
df2 <- df1 %.%
group_by(cyl) %.%
mutate(
newvar2 = newvar + 5
)
Run Code Online (Sandbox Code Playgroud)
仍然产生一个未分组的输出:
cyl gear newvar newvar2
1 6 3 6.675 11.675
2 4 4 19.025 24.025
3 6 4 12.375 17.375
4 6 5 2.770 7.770
5 4 3 2.465 7.465
6 8 3 49.249 54.249
7 4 5 3.653 8.653
8 8 5 6.740 11.740
Run Code Online (Sandbox Code Playgroud)
我在做错了语法吗?
编辑:
如果我要用plyr和ddply这样做:
df1 …
Run Code Online (Sandbox Code Playgroud) 如何使用Django使用复合(复合)主/唯一键创建模型(以及表格)?
我想创建一个具有自动生成主键的实体,但也是一个由两个其他字段组成的唯一复合键.我如何在JPA中执行此操作?
我想这样做是因为主键应该在另一个表中用作外键并使其复合并不好.
在下面的代码片段中,我需要命令和模型是唯一的.pk当然是主键.
@Entity
@Table(name = "dm_action_plan")
public class ActionPlan {
@Id
private int pk;
@Column(name = "command", nullable = false)
private String command;
@Column(name = "model", nullable = false)
String model;
}
Run Code Online (Sandbox Code Playgroud) 我需要使用Jpa 2/Hibernate 3.5.1在MySQL数据库中存储一些数据.由于遗留原因,我想要存储数据的表具有复合主键.主键的第一部分是INTEGER类型(自动增量值),第二部分是BIGINT类型(Java代码中的长 - 在持久化之前手动设置).
我已经通过@ IdClass-Annotation实现了(堆栈跟踪下面的示例代码)组合主键,第一个键部分也有一个生成策略集:@GeneratedValue(strategy = GenerationType.IDENTITY)
当试图用这样的代码持久化对象时
...
TestData testData = new TestData("data");
testData.setIdPartTwo(2L);
entityManager.getTransaction().begin();
entityManager.persist(testData);
entityManager.getTransaction().commit();
Run Code Online (Sandbox Code Playgroud)
抛出以下异常:
javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: could not set a field value by reflection setter of org.example.persistence.TestDataId.idPartOne
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1235)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1168)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1174)
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:674)
at org.example.persistence.PersistenceTest.shouldPersistTestData(PersistenceTest.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.testng.internal.MethodHelper.invokeMethod(MethodHelper.java:640)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:627)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:799)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1103)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:137)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:121)
at org.testng.TestRunner.runWorkers(TestRunner.java:1098)
at org.testng.TestRunner.privateRun(TestRunner.java:727)
at org.testng.TestRunner.run(TestRunner.java:581)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:315)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:310)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:272)
at org.testng.SuiteRunner.run(SuiteRunner.java:221)
at …
Run Code Online (Sandbox Code Playgroud) 我想更好地了解利用凯迪德data.table
.阅读文档后,我想我了解如何在使用一个密钥时加快子集化.例如:
DT = data.table(x=rep(c("ad","bd","cd"),each=3), y=c(1,3,6), v=1:9)
Run Code Online (Sandbox Code Playgroud)
方案一:
DT[x == "ad"]
Run Code Online (Sandbox Code Playgroud)
方案二:
setkey(DT,x)
DT["ad"]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,选项1比选项2慢得多,因为data.table使用键更有效地搜索(使用二进制搜索与矢量扫描,我不理解,但我相信会更快.)
在使用by语句聚合数据子集的情况下,定义密钥的最快方法是什么?我应该键入我用于对数据进行子集化的列,还是定义组的列?例如:
setkey(DT,x)
DT[!"bd",sum(v),by=y]
Run Code Online (Sandbox Code Playgroud)
要么
setkey(DT,y)
DT[!"bd",sum(v),by=y]
Run Code Online (Sandbox Code Playgroud)
是否有利用两个键的方式x
和y
?
编辑
是否设置了密钥x
并y
执行两次矢量搜索?即:
setkey(DT,x,y)
Run Code Online (Sandbox Code Playgroud)
EDIT2
对不起,我打算问的是,DT[!"bd",sum(v),by=y]
当DT被x和y键入时,调用会执行两次二进制扫描吗?
我想通过它们的名称和索引来存储数据.换句话说,我想将string
名称映射到对象,并为它们提供自定义顺序.
我首先std::vector
想到的是一对string
钥匙和物体.顺序由向量中的位置给出.
std::vector<std::pair<std::string, object> >
Run Code Online (Sandbox Code Playgroud)
但这种方法似乎不是最理想的,因为它不会自动检查string
名称的唯一性.此外,首先按顺序对对象进行分组是错误的,因为逻辑上它们的第一个顺序区别是名称.
我需要一个允许名称和索引访问的数据结构.
std::magic<std::string, unsigned int, object> collection;
// access by either string or unsigned int key
collection.insert("name", 42, new object());
collection["name"]
collection[42]
Run Code Online (Sandbox Code Playgroud)
这个用例是否已有数据结构?如果没有,我怎样才能把它们放在一起,最好是使用标准库?此外,我想要一种方法在给定元素之后的位置插入新元素,而不移动所有其他元素.
我已经阅读了一些似乎使这个重复的问题的内容.但阅读所有这些让我不确定.我希望得到一个基于下面绝对例子的答案,因为许多问题/答案会来回讨论.
如果我有:
dbo.Book
--------
BookID PK int identity(1,1)
dbo.Author
----------
AuthorID PK int identity(1,1)
Run Code Online (Sandbox Code Playgroud)
现在我有一个简单的联结表的两个选择:
dbo.BookAuthor
--------------
BookID CPK and FK
AuthorID CPK and FK
Run Code Online (Sandbox Code Playgroud)
以上将是两个FK上的复合/复合键,以及为两列设置FK关系 - 也可以在删除时使用Cascade.
要么
dbo.BookAuthor
--------------
RecordID PK int identity(1,1)
BookID FK
AuthorID FK
Run Code Online (Sandbox Code Playgroud)
BookID和AuthorID上的外键关系,以及删除时的Cascade.还在BookID和AuthorID上设置唯一约束.
我正在寻找一个简单的答案,为什么一个方法比ABOVE特定例子中的另一个更好.我正在阅读的答案非常详细,我正准备解决一个复合键,但后来观看了一个视频,其中示例使用了像我的第一个示例中的Identity列.
似乎这个主题略微被撕成两半,但我的直觉告诉我,我应该只使用复合键.
什么更有效的查询?它似乎有一个PK标识列,同时在两列上设置了一个唯一的约束,即使有一点,FK关系也会更加昂贵.
我正在使用SQLAlchemy以编程方式查询具有复合外键的表.例如:
CREATE TABLE example (
id INT NOT NULL,
date TIMESTAMP NOT NULL,
data VARCHAR(128)
PRIMARY KEY (id, date)
)
Run Code Online (Sandbox Code Playgroud)
我想获取一个值列表并获取行,例如:
interesting_data = (
(1, '2016-5-1'),
(1, '2016-6-1'),
(2, '2016-6-1'),
(3, '2016-5-1'),
(3, '2016-6-1'),
)
select(
[example.c.id, example.c.date, example.c.data],
).where(example.primary_key.in_(interesting_data)
Run Code Online (Sandbox Code Playgroud)
如果每列都是独立的,我可以做到
interesting_ids = [1,2,3]
interesting_dates = ['2016-5-1', '2016-6-1']
select(
[example.c.id, example.c.date, example.c.data],
).where(
example.c.id.in_(interesting_ids)
).where(
example.c.date.in_(interesting_dates)
)
Run Code Online (Sandbox Code Playgroud)
但这显然无法仅带来唯一匹配(id,date)元组.我怀疑有一种方法可以指定要查询的复合主键,但搜索后找不到任何文档.
我正在尝试使用 Spring Data JDBC 访问具有复合键的表,尽管我可以找到很多关于 Spring Data JPA 如何处理此问题的信息,但这似乎不适用于 Spring Data JDBC。
谁能举一个简单的例子,说明您需要如何使用 Spring Data JDBC 声明实体/存储库以与具有复合主键的表对话?(例如,两个字符串)
compound-key ×10
java ×2
jpa ×2
r ×2
annotations ×1
c++ ×1
data.table ×1
database ×1
django ×1
dplyr ×1
group-by ×1
hibernate ×1
key ×1
many-to-many ×1
mysql ×1
performance ×1
python ×1
spring-data ×1
sql ×1
sql-server ×1
sqlalchemy ×1
sqlite ×1
std ×1
stdmap ×1
t-sql ×1