sql >> データベース >  >> RDS >> Mysql

MySQL外部キーONDELETECASCADE3つのテーブル間

    ONDELETECASCADEオプションがあれば十分です。この例を見てください:

    テーブルの作成と入力:

    CREATE TABLE molecule (
      id INT(11) NOT NULL,
      PRIMARY KEY (id)
    )
    ENGINE = INNODB;
    
    CREATE TABLE descriptor (
      id INT(11) NOT NULL,
      molecule_id INT(11) DEFAULT NULL,
      PRIMARY KEY (id),
      CONSTRAINT FK_descriptor_molecule_id FOREIGN KEY (molecule_id)
        REFERENCES molecule(id) ON DELETE CASCADE ON UPDATE RESTRICT
    )
    ENGINE = INNODB;
    
    CREATE TABLE tdepdescriptor (
      id INT(11) NOT NULL,
      descriptor_id INT(11) DEFAULT NULL,
      PRIMARY KEY (id),
      CONSTRAINT FK_tdepdescriptor_descriptor_id FOREIGN KEY (descriptor_id)
        REFERENCES descriptor(id) ON DELETE CASCADE ON UPDATE RESTRICT
    )
    ENGINE = INNODB;
    
    INSERT INTO molecule VALUES 
      (1),
      (2),
      (3);
    
    INSERT INTO descriptor VALUES 
      (1, 1),
      (2, 1),
      (3, 2);
    
    INSERT INTO tdepdescriptor VALUES 
      (1, 1),
      (2, 2),
      (3, 3);
    

    1つの分子とそのすべての記述子およびすべてのtdepdescriptorを削除します:

    DELETE FROM molecule WHERE id = 1;
    
    SELECT * FROM molecule;
    +----+
    | id |
    +----+
    |  2 |
    |  3 |
    +----+
    
    SELECT * FROM descriptor;
    +----+-------------+
    | id | molecule_id |
    +----+-------------+
    |  3 |           2 |
    +----+-------------+
    
    SELECT * FROM tdepdescriptor;
    +----+---------------+
    | id | descriptor_id |
    +----+---------------+
    |  3 |             3 |
    +----+---------------+
    


    1. OracleのPLSQLレコードとは

    2. php mysqliを使用して元帳帳を作成し、DRとCRに従ってバランスを取ります

    3. PHP/Mysqlの特殊文字の挿入が切り捨てられています

    4. AWSRDSでのMySQLデータベースおよびOracleデータベースでのJDeveloperの使用パート1