복붙노트

[SQL] MySQL의에서 관계를 만드는 방법

SQL

MySQL의에서 관계를 만드는 방법

클래스에서, 우리는 모두 '공부'데이터베이스, 그리고 모든 사람이 액세스를 사용하고 있습니다. 이 지루해, 나는 클래스의 나머지가하고있는 일을하려고하지만, MySQL을 대신 Access를 사용하여 원시 SQL 명령과 함께하고 있습니다.

나는 데이터베이스와 테이블을 작성 관리,하지만 지금은 내가 어떻게 두 테이블 사이의 관계는 어떻게해야합니까?

나는 이런 내 두 개의 테이블이있는 경우 :

CREATE TABLE accounts(
    account_id INT NOT NULL AUTO_INCREMENT,
    customer_id INT( 4 ) NOT NULL ,
    account_type ENUM( 'savings', 'credit' ) NOT NULL,
    balance FLOAT( 9 ) NOT NULL,
    PRIMARY KEY ( account_id )
)

CREATE TABLE customers(
    customer_id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    address VARCHAR(20) NOT NULL,
    city VARCHAR(20) NOT NULL,
    state VARCHAR(20) NOT NULL,
    PRIMARY KEY ( customer_id )
)

어떻게 두 테이블 사이의 '관계'를 만들려면 어떻게해야합니까? 나는 각 계정이 '할당'해야 할 일 CUSTOMER_ID (그것을 소유 한 사람 표시하기).

해결법

  1. ==============================

    1.테이블이 InnoDB의 경우에는이처럼 만들 수 있습니다 :

    테이블이 InnoDB의 경우에는이처럼 만들 수 있습니다 :

    CREATE TABLE accounts(
        account_id INT NOT NULL AUTO_INCREMENT,
        customer_id INT( 4 ) NOT NULL ,
        account_type ENUM( 'savings', 'credit' ) NOT NULL,
        balance FLOAT( 9 ) NOT NULL,
        PRIMARY KEY ( account_id ), 
        FOREIGN KEY (customer_id) REFERENCES customers(customer_id) 
    ) ENGINE=INNODB;
    

    당신은 테이블의 MyISAM 엔진은 외래 키를 지원하지 않기 때문에 이노 것을 지정해야합니다. 추가 정보를 원하시면 여기를보세요.

  2. ==============================

    2.ehogue 말했듯이, 당신의 CREATE TABLE에 넣고

    ehogue 말했듯이, 당신의 CREATE TABLE에 넣고

    FOREIGN KEY (customer_id) REFERENCES customers(customer_id) 
    

    이미 만든 테이블이있는 경우 대안,은 ALTER TABLE 명령을 사용합니다 :

    ALTER TABLE `accounts`
      ADD CONSTRAINT `FK_myKey` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`customer_id`) ON DELETE CASCADE ON UPDATE CASCADE;
    

    이러한 명령을 배우기 시작하는 한 가지 좋은 방법은 데이터베이스 작업을위한 당신에게 더 "시각적"인터페이스를 제공 MySQL의 GUI 도구를 사용하고 있습니다. (액세스의 방법을 통해) 그에게 실제 혜택은 GUI를 통해 테이블을 설계 한 후, 그것을 실행하는 것, 따라서 당신이 배울 수 당신에게 SQL을 보여주고 있다는 점이다.

  3. ==============================

    3.

    CREATE TABLE accounts(
        account_id INT NOT NULL AUTO_INCREMENT,
        customer_id INT( 4 ) NOT NULL ,
        account_type ENUM( 'savings', 'credit' ) NOT NULL,
        balance FLOAT( 9 ) NOT NULL,
        PRIMARY KEY ( account_id )
    )
    
    and
    
    CREATE TABLE customers(
        customer_id INT NOT NULL AUTO_INCREMENT,
        name VARCHAR(20) NOT NULL,
        address VARCHAR(20) NOT NULL,
        city VARCHAR(20) NOT NULL,
        state VARCHAR(20) NOT NULL,
    )
    
    How do I create a 'relationship' between the two tables? I want each account to be 'assigned' one customer_id (to indicate who owns it).
    

    당신은 자신이 1-1 관계 또는 일대 다 관계의 1 개 밖에이 물어해야합니다. 즉, 모든 계정이 고객 및 모든 고객 계정이 가지고있다. 또는 계정없이 고객이있을 것이다. 귀하의 질문은 후자를 의미한다.

    당신이 엄격한 1-1 관계를 가지고 싶다면, 단지 두 개의 테이블을 병합합니다.

    CREATE TABLE customers(
        customer_id INT NOT NULL AUTO_INCREMENT,
        name VARCHAR(20) NOT NULL,
        address VARCHAR(20) NOT NULL,
        city VARCHAR(20) NOT NULL,
        state VARCHAR(20) NOT NULL,
        account_type ENUM( 'savings', 'credit' ) NOT NULL,
        balance FLOAT( 9 ) NOT NULL,
    )
    

    다른 경우에, 두 개의 테이블 간의 관계를 생성하기위한 정확한 방법은 관계 테이블을 작성한다.

    CREATE TABLE customersaccounts(
        customer_id INT NOT NULL,
        account_id INT NOT NULL,
        PRIMARY KEY (customer_id, account_id)
        FOREIGN KEY customer_id references customers (customer_id) on delete cascade,
        FOREIGN KEY account_id  references accounts  (account_id) on delete cascade
    }
    

    당신이 CUSTOMER_ID을 가지고 계정 정보를 원하는 그런 다음, 당신은 customersaccounts와 계정에 가입 :

    SELECT a.*
        FROM customersaccounts ca
            INNER JOIN accounts a ca.account_id=a.account_id
                AND ca.customer_id=mycustomerid;
    

    이 색인 것은 눈부시게 빠른 것의 때문에.

    그들이 분리 유지하면서 당신은 또한 당신에게 결합 된 customersaccounts 테이블의 효과를 제공하는보기를 만들 수 있습니다

    CREATE VIEW customeraccounts AS 
        SELECT a.*, c.* FROM customersaccounts ca
            INNER JOIN accounts a ON ca.account_id=a.account_id
            INNER JOIN customers c ON ca.customer_id=c.customer_id;
    
  4. ==============================

    4.ehogue에 의해 주석에 추가, 당신은 두 테이블 일치의 키의 크기를해야한다. 보다는

    ehogue에 의해 주석에 추가, 당신은 두 테이블 일치의 키의 크기를해야한다. 보다는

    customer_id INT( 4 ) NOT NULL ,
    

    그것을 만들

    customer_id INT( 10 ) NOT NULL ,
    

    하고 있는지 확인 고객 테이블에서 INT 열은 INT (10)이다.

  5. ==============================

    5.특정 MySQL의 엔진은 외래 키를 지원합니다. 예를 들어, InnoDB는 외래 키를 기반으로 제약 조건을 설정할 수 있습니다. 다른의 부양 가족이 하나 개의 테이블에서 항목을 삭제하려고하면 삭제가 실패합니다.

    특정 MySQL의 엔진은 외래 키를 지원합니다. 예를 들어, InnoDB는 외래 키를 기반으로 제약 조건을 설정할 수 있습니다. 다른의 부양 가족이 하나 개의 테이블에서 항목을 삭제하려고하면 삭제가 실패합니다.

    당신은 외래 키를 지원하지 않습니다의 MyISAM,로 MySQL에서 테이블 형식을 사용하는 경우, 당신은 어디서나 다이어그램과 쿼리를 제외하고는 테이블을 연결하지 않습니다.

    예를 들어, 쿼리에서 당신은 가입과 선택 성명에서 두 테이블을 사용하고 있습니다 :

    SELECT a, b from table1 LEFT JOIN table2 USING (common_field);
    
  6. ==============================

    6.다음은 의지의 도움을 시작하는 것이 자원의 몇 가지가 있습니다 : http://www.anchor.com.au/hosting/support/CreatingAQuickMySQLRelationalDatabase 및 http://code.tutsplus.com/articles/sql-for-beginners-part- 3 - 데이터베이스 - 관계 - NET-8561

    다음은 의지의 도움을 시작하는 것이 자원의 몇 가지가 있습니다 : http://www.anchor.com.au/hosting/support/CreatingAQuickMySQLRelationalDatabase 및 http://code.tutsplus.com/articles/sql-for-beginners-part- 3 - 데이터베이스 - 관계 - NET-8561

    컴퓨터에 서버 소프트웨어 (아파치와 MySQL)를 실행 XAMPP (또는 WAMP)를 설치 시도 다운로드 및 - 다른 사람이 말했다 또한 같은 GUI를 사용합니다. 그럼 당신은 탐색에 // localhost를 브라우저에서 시각적으로 MySQL 데이터베이스 작업을 시작하기에 phpMyAdmin을 선택할 때. 위에서 언급 한 바와 같이, 사용자가 요청한대로 관계를 만들 수 있도록 이노 디비를 사용했다. 당신이 데이터베이스 테이블과 무슨 일을하는지보고 쉽게 힙을 만듭니다. 이러한 / 악성 위협을 해킹에 노출 될 수있는 포트를 열 수 있습니다 - 때 완성 그냥 STOP 아파치와 MySQL 서비스를 기억한다.

  7. ==============================

    7.당신이 알아야 할 규칙 중 하나는 참조 할 테이블 열은 같은 데이터 유형과 함께하고있다 할 것입니다 참조하는 테이블. 2 당신이 MySQL의에서 달성하고자하는 것을 지원하는 엔진의 질문에 따라 때문에 당신이 InnoDB의 엔진을 사용할 필요가 MySQL을 사용하기로 결정한 경우.

    당신이 알아야 할 규칙 중 하나는 참조 할 테이블 열은 같은 데이터 유형과 함께하고있다 할 것입니다 참조하는 테이블. 2 당신이 MySQL의에서 달성하고자하는 것을 지원하는 엔진의 질문에 따라 때문에 당신이 InnoDB의 엔진을 사용할 필요가 MySQL을 사용하기로 결정한 경우.

    첫 번째 사람들은이 질문에 대답 할 수 있지만 벨로 코드는 그것을 시도한다 그들은 100 % 큰 응답을 제공하고 그들 모두를 고려하시기 바랍니다.

    CREATE TABLE accounts(
        account_id INT NOT NULL AUTO_INCREMENT,
        customer_id INT( 4 ) NOT NULL ,
        account_type ENUM( 'savings', 'credit' ) NOT NULL,
        balance FLOAT( 9 ) NOT NULL,
        PRIMARY KEY (account_id)
    )ENGINE=InnoDB;
    
    CREATE TABLE customers(
        customer_id INT NOT NULL AUTO_INCREMENT,
        name VARCHAR(20) NOT NULL,
        address VARCHAR(20) NOT NULL,
        city VARCHAR(20) NOT NULL,
        state VARCHAR(20) NOT NULL,
         PRIMARY KEY ( account_id ), 
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id) 
    )ENGINE=InnoDB; 
    
  8. ==============================

    8.

    create table departement(
        dep_id      int primary key auto_increment,
        dep_name    varchar(100) not null,
        dep_descriptin      text,
        dep_photo       varchar(100) not null,
        dep_video       varchar(300) not null
    );
    
    create table newsfeeds(
        news_id         int primary key auto_increment,
        news_title      varchar(200) not null,
        news_description    text,
        news_photo          varchar(300) ,
        news_date           varchar(30) not null,
        news_video          varchar(300),
        news_comment        varchar(200),
        news_departement    int foreign key(dep_id) references departement(dep_id)
    );
    
  9. from https://stackoverflow.com/questions/260441/how-to-create-relationships-in-mysql by cc-by-sa and MIT license