簡體   English   中英

插入時出現Mysql完整性錯誤1452

[英]Mysql integrity error 1452 on insert

select * from memory_games_game; 給我下表:

在此輸入圖像描述

select * from memory_games_game_state; 給我下表:

在此輸入圖像描述

我有一個存儲過程如下:

delimiter //
CREATE PROCEDURE get_game_by_user_id(  
     p_user_id int, p_game_id int  
)   
BEGIN  
    insert into memory_games_game_state(user_id, game_id, level, progress) 

    SELECT 24 as user_id,
        game.game_type as game_id,
        1 as level,
        0 as progress

    FROM memory_games_game game 
    left outer join memory_games_game_state gameState on 
        game.game_type=gameState.game_id  and
        gameState.user_id=24 
    where game.level=1 and gameState.user_id is null;

    if p_game_id = -1 then
        SELECT  gameState.level, game_type, `current_date`    
        FROM memory_games_game game join memory_games_game_state gameState on 
             game.game_type=gameState.game_id and 
             gameState.user_id=24 and
             game.level=gameState.level;
    else
    SELECT gameState.level, game_type, `current_date`   
    FROM memory_games_game game join memory_games_game_state gameState on 
        game.game_type=gameState.game_id and 
        gameState.user_id=p_user_id and
        game.level=gameState.level
        WHERE game_type=12;

    end if;
END
// 

第一個插入將記錄插入memory_games_game_state表。

這個插入對於game_id從8到11是成功的,但是對於12有以下錯誤它失敗:

在此輸入圖像描述

我可以插入表中的記錄memory_games_gamegame_type 12這是什么,但game_id另一個表即memory_games_game_state

出了什么問題?

更新:

我的django型號:

class Game(models.Model):

    #Field for storing game type
    GAME_TYPE_CHOICES = (
        (8, 'Simon Game'),
        (9, 'Pinpoint reaction'),
        (10, 'Loslassen'),
        (11, 'Word pair'),
        (12, 'Wortschatz')
    )
    game_type = models.IntegerField(choices=GAME_TYPE_CHOICES)   
    level = models.IntegerField(default='1')
    #This helps to print in admin interface
    def __str__(self):
        return u"%s  level %s" % (self.get_game_type_display(), self.level)



class Game_state(models.Model):
    game = models.ForeignKey(Game, blank=True, null=True)
    user = models.ForeignKey(User, blank=True, null=True)
    level = models.IntegerField(default='1')
    progress = models.IntegerField(default='0')
    current_date = models.DateField(auto_now=True)

class Game_state_ui_model(models.Model):
    GAME_TYPE_CHOICES = (
        (8, 'Simon Game'),
        (9, 'Pinpoint reaction'),
        (10, 'Loslassen'),
        (11, 'Word pair'),
        (12, 'Wortschatz')
        )
    game_type = models.IntegerField(choices=GAME_TYPE_CHOICES)
    level = models.IntegerField()
    user_id = models.IntegerField(default='0')
    current_date = models.DateField(auto_now=True)

    # static method to fetch games for a paricular user  
    @staticmethod  
    def fetch_games(user_id, game_id):
        print("Fetching games in model")

        # create a cursor  
        cur = connection.cursor()  
        # execute the stored procedure passing in   
        # search_string as a parameter  
        cur.callproc('get_game_by_user_id', [user_id, game_id,])  
        # grab the results  
        results = cur.fetchall()

        cur.close()  

        Game_state_list=[] 

        for row in results:
            print("Get game", row)
            Gs = Game_state_ui_model()

            Gs.level=row[0]
            Gs.game_type=row[1]
            Gs.current_date=row[2]


            Game_state_list.append(Gs)

        return Game_state_list

正如錯誤所述,game_id引用memory_games_game.id; NOT memory_games_game.game_type。

認為“game_type 12只是另一個表中的game_id,即memory_games_game_state”是不正確的。

在memory_games_game中需要一行,id = 12。

我刪除了所有表並再次進行遷移,這在某種程度上解決了問題。 我沒有改變任何其他東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM