我正在尝试使用带有交叉外键的2个表,但我不允许在创建它时引用不存在的表.有什么方法可以为mysql创建这样的表,比如同时声明两个表或延迟外键的评估?
错误是1005:无法在mysql 5.0上创建表blocks.frm(errno 150)
SQL:
create table if not exists blocks(
id int unsigned not null auto_increment,
title varchar(100),
defaultpage int unsigned not null,
foreign key(defaultpage) references pages(pageID),
primary key(id)) engine=innodb;
create table if not exists pages(
pageID int unsigned not null auto_increment,
title varchar(50) not null,
content blob,
blockid int unsigned not null,
foreign key(blockid) references block(id),
primary key(pageID) ) engine=innodb;
Run Code Online (Sandbox Code Playgroud)
解决问题的正确方法是什么?
我花了一些时间来追查这个错误,但我终于找到了原因.我正在使用Rails框架为纸牌游戏建模.目前我的数据库(大多数)看起来像这样:
cards cards_games games
----- ----------- -----
id id id
c_type card_id ...
value game_id other_stuff
Run Code Online (Sandbox Code Playgroud)
Rails ActiveRecord card.rb和game.rb目前看起来像这样
#card.rb
class Card < ActiveRecord::Base
has_and_belongs_to_many :player
has_and_belongs_to_many :game
has_and_belongs_to_many :cardsInPlay, :class_name => "Rule"
end
Run Code Online (Sandbox Code Playgroud)
#game.rb
class Game < ActiveRecord::Base
has_and_belongs_to_many :cards
has_many :players
has_one :rules, :class_name => Rule
end
Run Code Online (Sandbox Code Playgroud)
当我尝试运行游戏并且有多个游戏(超过1个)时,我收到错误
ActiveRecord::StatementInvalid in GameController#start_game
# example
Mysql::Error: Duplicate entry '31' for key 1: INSERT INTO `cards_games` (`card_id`, `id`, `game_id`) VALUES (31, 31, 7)
Run Code Online (Sandbox Code Playgroud)
每次动作失败时,cardid == id.我认为,这与Rails如何将数据插入数据库有关.由于没有cardgames对象,我认为它只是将card_id拉入id并将其插入数据库.这可以正常工作,直到你有两张同一张牌的游戏,这违反了卡片游戏的主键约束.由于数据库比较丰富,我对此问题的第一个解决方案是尝试强制rails通过删除id并将cardid和gameid作为主键来遵循这种关系的"真实"定义.它没有用,因为迁移似乎无法处理两个主键(尽管Rails API说它可以做到这一点......很奇怪).另一个解决方案是省略INSERT INTO语句中的'id'列,让数据库处理自动增量.不幸的是,我也不知道该怎么做.
那么,还有另一种解决办法吗?是否有一些我不知道的漂亮的Rails技巧?或者这种结构在Rails中是不可能的?这真是令人沮丧,因为我 …
存储人类可读且广泛数据库兼容的UUID的最小方法是什么?
我正在考虑使用十六进制值的某种char数组?
我在代码中有一个变量,可以将文件路径或url作为值.例子:
http://someDomain/someFile.dat
file://c:\files\someFile.dat
c:\files\someFile.dat
Run Code Online (Sandbox Code Playgroud)
所以有两种表示文件的方法,我不能忽略它们中的任何一种.这样一个变量的正确名称是什么:path,url,location?
我正在使用第三方API,因此我无法更改语义或分离更多变量.
我想访问一个整数和一个字符串从一个类到所有其他类?最好的方法是什么?我想在程序中的任何位置增加值,然后想要在声明的类中更新它们....
任何想法如何实现这一点???
我已经使用JQuery进行了一个小动画工作:一个表#photos包含9张照片,我想使用animate鼠标悬停功能增加宽度和高度.但是当动画运行时,如果用户将鼠标移动到另一张照片,它会自动触发下一个动画,因此它完全混淆了.我该怎么办?我的代码是:
$(function(){
$("#photos tr td img").mouseover(function(){
$(this).animate({"width":"1000px","height":"512px"},2000)
});
$("#photos tr td img").mouseout(function(){
$(this).animate({"width":"100px","height":"50px"},2000)
});
});
Run Code Online (Sandbox Code Playgroud) 我正在使用这个可以查找和替换的免费RegExp Designer.如何搜索所有数字并添加千位分隔符?
Input: <node num='12345678'>
Output: <node num='12,345,678'>
Run Code Online (Sandbox Code Playgroud) 假设我有一个包含类类型"xx"的stl向量.xx是抽象的.我遇到过这样的问题:当我执行以下操作时,编译器不会让我"实例化":
std::vector<xx> victor;
void pusher(xx& thing)
{
victor.push_back(thing);
}
void main()
{
;
}
Run Code Online (Sandbox Code Playgroud)
我认为这是因为必须调用复制构造函数.我通过将xx*存储在向量而不是xx中来解决这个问题.有更好的解决方案吗?它是什么?
我在JavaScript中编写一个简单的语法高亮显示器,我需要找到一种方法同时测试多个正则表达式.
我们的想法是找出哪个是第一个,所以我可以确定要查找的新表达式集.
表达式可能类似于:
/<%@/,/<%--/,/<!--/和/<[a-z:-]/
首先,我尝试了一种策略,我将这些表达式组合在一起,如:
/(<%@)|(<%--)|(<!--)|(<[a-z:-])/
这样我就可以找出哪个匹配的组没有未定义.但问题是,当某些子表达式包含组或反向引用时.
所以我的问题是:
有没有人知道一个好的和合理的方式寻找与字符串中的多个正则表达式匹配?
我有类似的东西.
initMyclass {
if (self= [super init]) {
classMember = [[NSMutableArray alloc] init];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
仪器报告泄漏.
我在那里泄漏记忆?如果没有,xcode报告错误的内存泄漏?
谢谢.