ディレクトリ
序文
テーブルの非合理的な構造(ケース)
以下この表ではまず見て
EMP_INFO従業員情報テーブル
ID | 名 | 性別 | dep_name | dep_desc |
---|---|---|---|---|
1 | ジェイソン | 男性 | 教育部 | 教育 |
2 | そこ | 男性 | 外務省 | 浮浪 |
3 | タンク | 男性 | 教育部 | 教育 |
4 | ケビン | 男性 | テクノロジー | 技術開発 |
すべての情報は、テーブルに記録されています
問題によって引き起こされます
- テーブル構造は明らかではありません
- ハードディスクの空き容量の廃棄、データの冗長性の詳細
- 表のスケーラビリティ、貧しい保守性(欠点を無視することはできません)
どのように問題を解決するには?
テーブルを決定するためにテーブルを分割し、関連付けられたテーブルを設定します
テーブルとテーブルの間の関係を判別するには、(2人の当事者が思いやりでなければならないの後の結論に到達するために)共感するようにしてください
以员工表和部门表为例:
先站在员工表看能否有多个员工对应一个部门
翻译过来:
一个部门能付否有多个员工
可以!!!(暂时只能确定员工单向多对一部门)
再站在部门表看能否有多个员工一起对应一个部门
翻译过来
....乱了
テーブル間の関係を確認する方法?
ルックアップテーブルの関係は、必ずすべての結論の前に完了したとみなされた2つのテーブルの視点に立っそうあなたは正しい答えを得ることができません、
テーブルの関係
- 多くの
- 多くの多くの
- マンツーマン
または2つの表は、重要ではありません。
多くの
多対1の方法は、外部キーの関係「一対多」です
多かどうか、多くの-ある多の関係、呼び出し対多、多対は関係ありません
多くの多くの
双方が多くの1人の関係の一方法である場合、2つの間の関係は、多くの多いです
分析
多くの関係、あなたは追加の第三のテーブルを作成する必要があり、2つのテーブル間の特別な関係を記録するために使用
- あなたが来た場合は、両方のテーブルが互いに一対一のアイデアに関連付けられている必要があり、それがテーブルを構築することはできません、他の当事者は最初の確立する必要がありましょう、外部キー関係が保存されている、それは、別のテーブルを開くの関係を救います
ケースの確立
削除外部キーがオンに同時に更新されます
マンツーマン
シナリオ
- パフォーマンス(ユーザの詳細と表示情報)を最適化するためにテーブルを分割する場合に特に大きなテーブル
- お客様や学生(顧客が学生であってもよいし、学生がクライアントである必要があります)
2つのテーブル間の双方向対多が確立されていない場合は、唯一の2例
- 一つの関係
- 関係なし
外部キーフィールドは、外部キー+ユニークで独特の限定されなければならないと表示される必要があります
文法との間の関係を決定する最も簡単なテーブル
三つの関係を一般的なケース
多くの
多くの1つである(関係があるかもしれませんし、一つだけ)
本と出版
あなたは、複数の出版社を持つことができますか?できません
この本の初版より出版社より、あなたができることができます!!!
多くの関係
多くの多くの
2人の可能な関係は多くに多くのですがあります
本と著者テーブル
この本は、複数の著者を持つことができますすることができます!!
著者が複数の本を書くことができますすることができます!!
多くの関係
またはNO-1関係ありません
することができ、いずれか1対1の関係、あるいは全く関係もありません
著者と著者の詳細
著者は、より多くの詳細を持ってすることはできません!!
著者の詳細がすることはできません複数の著者を持つことができます!!!
一つの関係
テーブルのリレーションシップを作成する方法?
外部キー外部キー
MySQLではにより外部キーテーブルとテーブルの間に剛性の関係を確立するために、
一般的に、外部キーフィールドと呼ばれる関係フィールド
ホームの外部キーフィールドを決定
- 多くの外部キーフィールドのは、中に構築する必要があり、その当事者の「多く」
- 多くの多くの追加的に構築するための外部キーフィールド3番目のテーブルに
- 一つのいずれかを実行します内蔵の外部キーフィールドの、でクエリを作成することが推奨され、より高い周波数のパーティ(外部キーフィールドは一意であることが保証されなければなりません)
注意事項は、外部キー関係を持っています
- で、テーブルを作成するときには、最初に関連するテーブルを作成する必要があります
- 挿入時のデータはまた、最初の関連するデータに挿入されるべきです
- カスケード更新、カスケード削除
(最後のピースを追加しないテーブルやフィールド定義文を構築することを忘れないでください、コンマ)(カンマはフィールドの終わりを表し)、コンマ外部キーを注意してください
外部キーテーブルには、リレーションシップを強制的にあなたを助けることができるだけでなく、データを関連テーブル制約の2つの列の間に増加するが、
テーブルを変更します。
MySQLは大文字と小文字を区別しません
英語での記号をメモしておいてください
テーブル名を変更します。
ALTER TABLE 表名 RENAME 新表名;
alter table 表名 rename 新表名;
フィールドを増やします
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ADD 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST; # 直接移到最前面
ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名; # 选择要插在哪个字段后面
フィールドを削除します
ALTER TABLE 表名 DROP 字段名;
フィールドを変更します。
# modify只能改字段数据类型完整约束,不能改字段名,但是change可以!
ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
テーブルをコピーします
コピーテーブル構造レコード+
キーはコピーされません。主キー、外部キーとインデックスを
# 查询语句执行的结果也是一张表,可以看成虚拟表
# 复制表结构+记录 (key不会复制: 主键、外键和索引)
create table new_service select * from service;
like 可以吗? 试试
使用の条件は、唯一のテーブル構造をコピーします
条件が偽で、データを見つけることができません
select * from service where 1=2; //条件为假,查不到任何记录
# 只复制表结构
create table new1_service select * from service where 1=2;
create table t4 like employees;
今日では、データベース操作文
データベースを作成します。
mysql> create database db1;
Query OK, 1 row affected (0.01 sec)
mysql>
mysql>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db1 |
| just_test |
| mysql |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.00 sec)
二つのテーブルに分割従業員および部門情報
従業員は部門に所属します
部門は、複数の従業員を擁しています
--->多く
従業員の予約部門番号であそこ
テーブルを作成します(従業員および部門情報テーブル)
create table dep(
id int primary key auto_increment,
dep_name varchar(30),
dep_comment varchar(60)
);
create table emp(
id int primary key auto_increment,
name varchar(50),
gender enum('male', 'famale', 'others') not null default 'male',
dep_id int,
foreign key(dep_id) references dep(id)
);
insert into dep (dep_name, dep_comment) values('研发部', '敲代码的那一群人'), ('教育部', '成天这啊那啊找麻烦的那群人'), ('后勤保障部', '搬水的关门的收拾卫生的');
insert into emp (name, dep_id) values('jason', 1), ('egon', 2), ('agong', '3');
alter table emp modify foreign key(dep_id) refrences dep(id)
on update cacade
on delete cacade;
select emp.id,name,gender,dep.dep_name,dep.dep_comment from emp left join dep on dep.id=emp.id;