Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Problema con una foreign key di MySql

    Ciao a tutti, ho creato una tabella che ho chiamato t_exceptions_privileges_management

    nella quale ho inserito i campi:

    - id (primary key, autoincrement)
    - id_staff (di tipo INT e chiave esterna relativa a t_staff.id che è una primary key)
    - id_page (di tipo INT e chiave esterna relativa a t_indexing_pages.id che è una primary key)

    Quando metto in relazione le tabelle, mi da l' errore #1215 - Cannot add foreign key constraint
    nella creazione della foreign key relativa al campo id_page che è tale e quale al campo id_staff, il quale non mi da problemi e crea tranquillamente la foreign key.
    Qualcuno mi sa dire perchè?
    Grazie.

  2. #2
    Ciao,

    posta i create table delle 3 tabelle
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  3. #3
    Questa mi serve per creare vari gruppi di utenza:

    codice:
    -- phpMyAdmin SQL Dump
    -- version 4.2.7.1
    -- http://www.phpmyadmin.net
    --
    -- Host: 127.0.0.1
    -- Generation Time: Dic 04, 2014 alle 14:02
    -- Versione del server: 5.6.20
    -- PHP Version: 5.5.15
    
    
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
    
    
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    
    
    --
    -- Database: `black_skip_db`
    --
    
    
    -- --------------------------------------------------------
    
    
    --
    -- Struttura della tabella `t_staff_groups`
    --
    
    
    CREATE TABLE IF NOT EXISTS `t_staff_groups` (
    `id` int(11) NOT NULL COMMENT 'ID gruppo',
      `name` varchar(20) NOT NULL COMMENT 'Nome del gruppo'
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COMMENT='Tabella dei gruppi utente' AUTO_INCREMENT=6 ;
    
    
    --
    -- Dump dei dati per la tabella `t_staff_groups`
    --
    
    
    INSERT INTO `t_staff_groups` (`id`, `name`) VALUES
    (1, 'bs_site_admin'),
    (2, 'manutentori'),
    (3, 'elettricisti'),
    (4, 'pubbliche relazioni'),
    (5, 'impiegati');
    
    
    --
    -- Indexes for dumped tables
    --
    
    
    --
    -- Indexes for table `t_staff_groups`
    --
    ALTER TABLE `t_staff_groups`
     ADD PRIMARY KEY (`id`);
    
    
    --
    -- AUTO_INCREMENT for dumped tables
    --
    
    
    --
    -- AUTO_INCREMENT for table `t_staff_groups`
    --
    ALTER TABLE `t_staff_groups`
    MODIFY `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID gruppo',AUTO_INCREMENT=6;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    Questa mi serve per creare un elenco di pagine alle quali assocerò, in un' altra tabella, gli utenti che le possono visualizzare (e che ha la chiave primaria da inserire nell' altra tabella che non mi crea la foregn key:

    codice:
    -- phpMyAdmin SQL Dump
    -- version 4.2.7.1
    -- http://www.phpmyadmin.net
    --
    -- Host: 127.0.0.1
    -- Generation Time: Dic 04, 2014 alle 14:06
    -- Versione del server: 5.6.20
    -- PHP Version: 5.5.15
    
    
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
    
    
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    
    
    --
    -- Database: `black_skip_db`
    --
    
    
    -- --------------------------------------------------------
    
    
    --
    -- Struttura della tabella `t_indexing_pages`
    --
    
    
    CREATE TABLE IF NOT EXISTS `t_indexing_pages` (
    `id` bigint(20) NOT NULL COMMENT 'ID pagina',
      `name` text NOT NULL COMMENT 'Nome della pagina es. miapagina.php'
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
    
    
    --
    -- Dump dei dati per la tabella `t_indexing_pages`
    --
    
    
    INSERT INTO `t_indexing_pages` (`id`, `name`) VALUES
    (1, 'home_expenses.php'),
    (2, 'expenses_in.php');
    
    
    --
    -- Indexes for dumped tables
    --
    
    
    --
    -- Indexes for table `t_indexing_pages`
    --
    ALTER TABLE `t_indexing_pages`
     ADD PRIMARY KEY (`id`);
    
    
    --
    -- AUTO_INCREMENT for dumped tables
    --
    
    
    --
    -- AUTO_INCREMENT for table `t_indexing_pages`
    --
    ALTER TABLE `t_indexing_pages`
    MODIFY `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID pagina',AUTO_INCREMENT=3;
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    Questa tabella associa id utente a id gruppo:

    codice:
    -- phpMyAdmin SQL Dump
    -- version 4.2.7.1
    -- http://www.phpmyadmin.net
    --
    -- Host: 127.0.0.1
    -- Generation Time: Dic 04, 2014 alle 14:09
    -- Versione del server: 5.6.20
    -- PHP Version: 5.5.15
    
    
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
    
    
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    
    
    --
    -- Database: `black_skip_db`
    --
    
    
    -- --------------------------------------------------------
    
    
    --
    -- Struttura della tabella `t_staff_groups_account_association`
    --
    
    
    CREATE TABLE IF NOT EXISTS `t_staff_groups_account_association` (
    `id` int(11) NOT NULL COMMENT 'ID riga',
      `id_group` int(11) NOT NULL COMMENT 'ID gruppo (chiave esterna -> t_staff_groups.id)',
      `id_staff` int(11) NOT NULL COMMENT 'ID utente (chiave esterna -> t_staff.id_staff'
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
    
    
    --
    -- Dump dei dati per la tabella `t_staff_groups_account_association`
    --
    
    
    INSERT INTO `t_staff_groups_account_association` (`id`, `id_group`, `id_staff`) VALUES
    (1, 2, 78);
    
    
    --
    -- Indexes for dumped tables
    --
    
    
    --
    -- Indexes for table `t_staff_groups_account_association`
    --
    ALTER TABLE `t_staff_groups_account_association`
     ADD PRIMARY KEY (`id`), ADD KEY `id_group` (`id_group`,`id_staff`), ADD KEY `id_staff` (`id_staff`);
    
    
    --
    -- AUTO_INCREMENT for dumped tables
    --
    
    
    --
    -- AUTO_INCREMENT for table `t_staff_groups_account_association`
    --
    ALTER TABLE `t_staff_groups_account_association`
    MODIFY `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID riga',AUTO_INCREMENT=2;
    --
    -- Limiti per le tabelle scaricate
    --
    
    
    --
    -- Limiti per la tabella `t_staff_groups_account_association`
    --
    ALTER TABLE `t_staff_groups_account_association`
    ADD CONSTRAINT `t_staff_groups_account_association_ibfk_1` FOREIGN KEY (`id_group`) REFERENCES `t_staff_groups` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
    ADD CONSTRAINT `t_staff_groups_account_association_ibfk_2` FOREIGN KEY (`id_staff`) REFERENCES `t_staff` (`id_staff`) ON DELETE CASCADE ON UPDATE CASCADE;
    
    
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    E per finire questa tabella gestisce le eccezioni (nel caso in cui volessi mostrare comunque dei contenuti anche se non si fa parte del determinato gruppo) dove inserisco id utente e id pagina, ed è quella che non fa la foreign key del campo id_pagina:

    codice:
    -- phpMyAdmin SQL Dump
    -- version 4.2.7.1
    -- http://www.phpmyadmin.net
    --
    -- Host: 127.0.0.1
    -- Generation Time: Dic 04, 2014 alle 14:11
    -- Versione del server: 5.6.20
    -- PHP Version: 5.5.15
    
    
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
    
    
    
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    
    
    --
    -- Database: `black_skip_db`
    --
    
    
    -- --------------------------------------------------------
    
    
    --
    -- Struttura della tabella `t_exceptions_privileges_management`
    --
    
    
    CREATE TABLE IF NOT EXISTS `t_exceptions_privileges_management` (
    `id` int(11) NOT NULL COMMENT 'ID riga',
      `id_staff` int(11) NOT NULL,
      `id_page` int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    
    
    --
    -- Indexes for dumped tables
    --
    
    
    --
    -- Indexes for table `t_exceptions_privileges_management`
    --
    ALTER TABLE `t_exceptions_privileges_management`
     ADD PRIMARY KEY (`id`), ADD KEY `id_staff` (`id_staff`,`id_page`), ADD KEY `id_pagina` (`id_page`), ADD KEY `id_pagina_2` (`id_page`);
    
    
    --
    -- AUTO_INCREMENT for dumped tables
    --
    
    
    --
    -- AUTO_INCREMENT for table `t_exceptions_privileges_management`
    --
    ALTER TABLE `t_exceptions_privileges_management`
    MODIFY `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID riga';
    --
    -- Limiti per le tabelle scaricate
    --
    
    
    --
    -- Limiti per la tabella `t_exceptions_privileges_management`
    --
    ALTER TABLE `t_exceptions_privileges_management`
    ADD CONSTRAINT `t_exceptions_privileges_management_ibfk_1` FOREIGN KEY (`id_staff`) REFERENCES `t_staff` (`id_staff`) ON DELETE CASCADE ON UPDATE CASCADE;
    
    
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    in pratica, nella creazione dell' ultima tabella ci manca:

    ALTER TABLE `t_exceptions_privileges_management`
    ADD CONSTRAINT
    `t_exceptions_privileges_management_ibfk_1` FOREIGN KEY (`id_pagina`) REFERENCES `t_indexing_pages`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

    che non me la crea
    Grazie mille
    Ultima modifica di camionistaxcaso; 04-12-2014 a 15:30

  4. #4
    Ciao,

    il problema sta nei tipi di dato diversi.

    Infatti da una parte il tipo e' INT dall'altra BIGINT

    Uniforma il tipo di dato e funzionera'
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  5. #5
    Posso dirti che ti amo? Fossi li ti bacerei. Grazie!

  6. #6
    Quote Originariamente inviata da camionistaxcaso Visualizza il messaggio
    Posso dirti che ti amo? Fossi li ti bacerei. Grazie!
    prego alla prossima ;-)
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.