MySQLデータベースの外部キー操作、カスケード、テーブルへの変更

1.外部キー:2つのテーブル間の関係を確立するために使用
-多くの
-多くの多くに
- 1

 

テーブルとテーブルの間の関係を研究:
  1.部門の従業員表の定義
    ID、氏名、性別、dep_name、 dep_descを

  -すべてのデータは、欠点のテーブルに格納されている:
    1.構造が明らか--->非致死ではない
    空間の2廃棄物--->致死
    3.スケーラビリティが悪い--->欠点を無視することはできない
      -などのファイルに保存されているすべてのPYのPythonコード、強い結合一緒に----> ----分離型>分割テーブル


    - スプリット上記の問題を解決するためのテーブル。

    - 2つのテーブル間の「外部キー」の使用との間に強い関係を確立する必要があります

-どのように!!!!! ******確認は、テーブルとテーブルの間の関係は(ある多くの1つは、多くの多くの、一から一
  - 注:2つのテーブル間の関係を確立するために、立たなければなりません2つの場所に考えるように:
    -従業員のテーブルの場所:複数の従業員が部署に対応できますか?ことができます!

      - 従業員や部門:多くの

        - フォームテーブルに多くの部門の従業員

    複数の部門が従業員に対応することができます: - 部門表の位置を立って?することはできません!

    概要:多くのツーテーブル関係の任意の方法で、外部キー関係の多くと呼ばれます。

  -外部キー:構文:外部キー(現在の関係テーブルの外部キーフィールド)の参照は、テーブル名(ID)と関連しています

 

 - 多くの

#2のテーブル作成
1.を、その後、関連テーブルの最初の関連付けテーブルを確立する必要があります

被关联表:
DEP:
  表DEP(作成
    主キーAUTO_INCREMENT INT ID、
    dep_nameのVARCHAR( 16 )、
    dep_desc VARCHAR( 255 
  )。

关联表:
EMP:
  emp表(作成
    ID int型主キーのAUTO_INCREMENT、
    名前のVARCHAR( 16 )、
    年齢int型、
    性別列挙型を(' 男性'' 女性'' 他者')デフォルトの' 男性' 
    dep_id int型ではないnullを、
    外部キー(dep_id)参照のDEP(ID)
  );

 

 

 注:MULの外部キーのKEY代表

#挿入データ:
-図1は、データ関係テーブル(DEP)に挿入し、次にアソシエーションテーブル(EMP)データに挿入されなければなりません。

DEP: 
            INSERT INTO DEP(dep_name、dep_desc)の値(' 外務省のNb_省'' 国際大使部門' )、 ' Sb_教育課'' プログラマー部門を作る!!!! ' )、 " 技術' ' 技術限ら部門' ); 

        EMP:
            INSERT INTO EMP(名前、年齢、性別、dep_id)
            の値(' 戦車 '17、。 ' 男性'1。)、 'ジェイソン '70 ' 男性'2)、 ' ショーン '50、 ' 男性'2)、 ' エゴン '88 ' 男性'2)、 ' オーウェン '95 ' 女性'、3 ); 

            报错、 
            EMPへの挿入(名前、年齢、性別、dep_id)の値(' 大饼'、100、"、999)。

 

- (関連するデータと共に変化する)カスケード更新とカスケード削除

  -更新カスケードに
  - ON DELETE CASCADEを

 - テーブルを作成します。

被关联表:
    DEP2:
        表DEP2(作成
            主キーAUTO_INCREMENT INT ID、
            dep_nameのVARCHAR( 16 )、
            dep_desc VARCHAR( 255 
        )。
关联表:
    EMP2:
        テーブルEMP2を作成します(
            主キーAUTO_INCREMENT int型のID、
            名前のVARCHAR( 16 )、
            年齢int型、
            性別列挙型(' 男性'' 女性'' 他者')デフォルト' 男性'
            dep_id int型ではないnullで、
            外部キー(dep_id)参照のDEP2(ID)
            更新カスケードの
            削除カスケード上
        )。

- 挿入データ

DEP: 
    INSERT INTOのDEP2(dep_name、dep_desc)の値( '外務省のNb_省' '国際大使部門' )、 ' Sb_教育課'' プログラマー部門を作る!!!! ' )、(" 技術' ' 技術限ら部門' );
 EMP:
    INSERT INTO EMP2(名前、年齢、性別、dep_id)
    の値(' 戦車 '、17、 ' 男性 '、1 )、 ' ジェイソン '70、 ' MALE "、2)、 ' ショーン'、50、' 男性'、2 )、 ' エゴン'、88 ' 男性'、2 )、 ' オーウェン'、95 ' 女性'、3 ); 

报错 
EMPへの挿入(名前、年齢、性別、dep_id)の値(' 大饼'、100、' 他人'、999);

- データの更新やデータの削除

- 更新は、レコード
の更新が言及ID上にSETをDEP2 = 200 WHERE上記ID = 1 ;

 - 削除レコード
の削除から DEP2 WHERE上記ID = 200。

 

 カスケード、データは200の変更に関連するので

注:MySQLは唯一の多くの、多くのではありません

 

- 多くの多くの

我々はまた、二つのテーブルの位置を考えるように立たなければなりません。

- デモンストレーションエラー:

#- 创建book表
    create table book(
        id int primary key auto_increment,
        title varchar(20),
        price int,
        book_content varchar(255),
        author_id int,
        foreign key(author_id) references author(id)
        on update cascade
        on delete cascade
        );

#- 创建author表
    create table author(
        id int primary key auto_increment,
        name varchar(16),
        age int,
        book_id int,
        foreign key(book_id) references book(id)
        on update cascade
        on delete cascade
        );

- 问题: 无法知道哪张表是被关联表

 - 利用第三张表,为两张表建立“多对多外键关系”。

#-book:
create table book(
    id int primary key auto_increment,
    title varchar(20),
    price int,
    book_content varchar(255)
);
#-auther:
create table author(
    id int primary key auto_increment,
    name varchar(16),
    age int
);
#-book2author:
create table book2author(
    id int primary key auto_increment,
    book_id int,
    author_id int,
    foreign key(book_id) references book(id)
    on update cascade
    on delete cascade,
    foreign key(author_id) references author(id)
    on update cascade
    on delete cascade    
);

 

 - 插入数据

#- book
insert into book(title, price, book_content) values
('金瓶mei', 199, '讲述朦胧时光的小故事'),
('python从入门到断气', 2000, '学习如何一夜秃头'),
('三体', 200, '跟着大佬进入宇宙奇幻世界')
;

 - author
insert into author(name, age) values
('egon', 68),
('jason', 88);

- book2author:
insert into book2author(book_id, author_id) values
(1, 1),
(1, 2),
(2, 2),
(3, 1);

# 报错, 插入的数据,book_id, author_id必须存在
insert into book2author(book_id,author_id) values(4, 4);

# 更新或删除
#更新
update book set price =666 where id =1;
update book set id=4 where id=1;
#删除
delete from book where id=4;  (会删除关联表内容)

- 一对一:

 

- user_info:
  id, name, age, gender, hobby, id_card

- user:
  id , name, age, detail_id(外键)

- detail:
  id, gender, hobby, id_card

user与detail表建立了 一对一的外键 关系。
foreign key 应该建在 使用频率较高的一方。

 

-创建表

#被关联表
create table customer(
    id int primary key auto_increment,
    name varchar(16),
    media varchar(32)
);
#关联表
create table student(
    id int primary key auto_increment,
    addr varchar(255),
    phone_char(11),
    id_card char(18),

    # 外键必须设置成唯一的
    customer_id int unique,
    forign key(customer_id) references customer(id)
    on update cascade
    on delete cascade
); 
    

- 插入数据

insert into customer(name,media) values
('hcy','facebook'),
('zsb1','ig'),
('zsb2','vk'),
('hb','探探');

insert into student(addr,phone,id_card,customer_id) values
 ('上海', '15214546711', '440888888888888888', 1),
 ('北京', '18888888888', '440777777777777777', 2);

  # 报错,一对一,关系必须 一一对应
insert into student(addr, phone, id_card, customer_id) values ('上海', '15214546711', '440888888888888888', 1);

- 插入数据:
insert into

 

修改表的操作

- 语法: 注意: mysql 关键字不区分大小写
1. 修改表名
ALTER TABLE 表名 RENAME 新表名;

2. 增加字段
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…],ADD 字段名 数据类型 [完整性约束条件…]; # 添加到最后一列

ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST; # 添加到第一列

ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名; # 添加到某一列之后

3. 删除字段
ALTER TABLE 表名 DROP 字段名;

4. 修改字段
ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…]; # 修改数据类型

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…]; # 修改字段名,保留字段类型

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…]; # 修改字段名与字段类型

- 复制表的操作:
复制表结构+记录 (key不会复制: 主键、外键和索引)
mysql> create table new_service select * from service;

只复制表结构
# 将select * from service where 1=2; ---> 不要真实数据,需要表结构
mysql> create table new_customer select * from customer where 1=2;

 

 

 

おすすめ

転載: www.cnblogs.com/ludingchao/p/12030415.html