MySQLデータベースの学習(二十から六) - DDL(IV)制約 - 主キー、外部キー制約詳細addは、制約の制約を修正、削除します

序文「・ᴗ・ `

  • ここでは、主キー、外部キーインタビューの質問に関連した内容の一部についての話に補足としてみなされるべきではどのような検査を行うことができます
  • インデックスの概念の理解を深めながら、

複合主キーユニークキーの組み合わせ

PRIMARY KEY主キー
ユニークキーUNIQUEの
上の列にも複数に2一緒に組み合わせキー(KEY)

コードが知っている、我々は効果を確認するためのユニークなキーの組み合わせを持っている:
まだサンプルに

USE data1;  
DROP TABLE IF EXISTS project;

CREATE TABLE project(
	项目编号      INT       PRIMARY KEY, #PRIMARY KEY 跟在列后面的约束就是列约束 作用于一列
	项目识别码    INT       NOT NULL ,
	专利申请号    CHAR(20)  NOT NULL ,
	项目名称      CHAR(20)  NOT NULL ,                              
	项目负责人    CHAR(20)  NOT NULL ,
	CONSTRAINT un_project UNIQUE (项目识别码,专利申请号,项目名称),
	CONSTRAINT ck_responsibility CHECK(项目负责人 = 'Ryan' OR 项目负责人 = 'SST')     
	#另起一行 用逗号隔开的就是表级约束 可以约束多个列 就好像控制一个表一样                      
);
                              
DESC project;

DESCの結果:
ここに画像を挿入説明
その後
、我々はので、データの外観を挿入します。

INSERT INTO project VALUES(1,2233,2333,'基于MEMS传感器的跌到检测系统','Ryan'); 
INSERT INTO project VALUES(2,2233,2333,'基于树莓派和内置深度学习算法的','Ryan1'); 

ここに画像を挿入説明
第一及び第二見えるものの项目识别码,专利申请号繰り返したが、問題なし!
これがされているので、一緒に組み合わせることは、ユニークか否かが判断されます

我々はそれを追加します。

INSERT INTO project VALUES(3,2233,2333,'基于树莓派和内置深度学习算法的','Ryan1'); 

:次のように与えられた
ここに画像を挿入説明
重要なCONSTRAINT un_project UNIQUE (项目识别码,专利申请号,项目名称),
文を3 一緒に決定

これは、一意のキーの組み合わせ

:また、あなたは複合主キー試すことができ
、このような制約CONSTRINTを含めることを:
CONSTRAINT pk_project PRIMARY KEY (项目编号,项目识别码,专利申请号,项目名称),
テスト
別のキーの組み合わせは、一般的にされない安定しない十分なので、お勧め
ちょうどここに使用の地平を拡大します

問題について

列レベルの制約とテーブルレベルの制約では、我々はしばらくの間を述べた:
ここに画像を挿入説明
今、あなただけのCONSTRAINT制約名の後ろに従っていませ理解もした新しいキーの名前
も呼ぶことができるインデックスindex

他の人がインデックスを照会することがあるので、ことであることに注意してください
仕様を命名覚えておく:
ここに画像を挿入説明
正しい名前PRIMARY KEY -私が書いたPK pk_id_IMSI_ISO
CHECKを- ckの
カバーアンダースコア、ここでは、黒の背景であります

外部キーサプリメント

ここに画像を挿入説明

制約の追加

表が完了すると、我々はまた、制約を追加することができます作成し
、我々ここで1️⃣ 最初に追加しようと列レベルの制約
ケース以上を

DROP TABLE IF EXISTS project;

CREATE TABLE project(
	项目编号      INT       NOT NULL ,#PRIMARY KEY 跟在列后面的约束就是列约束 作用于一列
	项目识别码    INT       NOT NULL ,
	专利申请号    CHAR(20)  NOT NULL ,
	项目名称      CHAR(20)  NOT NULL ,                              
	项目负责人    CHAR(20)  NOT NULL ,
	CONSTRAINT pk_project PRIMARY KEY(项目编号,项目识别码,专利申请号,项目名称),
	CONSTRAINT ck_responsibility CHECK(项目负责人 = 'Ryan' OR 项目负责人 = 'SST')     
	#另起一行 用逗号隔开的就是表级约束 可以约束多个列 就好像控制一个表一样                      
);

私たちは、実行します。

ALTER TABLE project MODIFY COLUMN 项目编号 INT DEFAULT 18;

デイ二十から五転送を忘れないでください:
私たちは、式は:
alter table [表名] add|drop|modify|change column [列名] [列类型] [约束]
実際には、我々は修改modifyちょうど同じ追加するように変更する必要はありません
成功の一部の結果注
ここに画像を挿入説明
DESC見えるDEFAULTが追加されている
ここに画像を挿入説明
、それをキーワードADDないなぜか?テーブルレベルの制約のためのADD待ち
2️⃣追加されたテーブルレベルの制約

ALTER TABLE project ADD CONSTRAINT un_name_responsibility UNIQUE(项目名称,项目负责人);

結果:
ここに画像を挿入説明
ここでは、使用
SHOW INDEX FROM project;
すべて照会しているキーインデックス
我々は、一般的に言ったがキーである主键 PRIMARY KEY唯一键 UNIQUE
ここに画像を挿入説明

注意制約名(またはキーインデックスの名前はので、私たちは、制約を追加している繰り返すことはできません
あなたは再びそれを実行することができます

ALTER TABLE project ADD CONSTRAINT un_name_responsibility UNIQUE(项目名称,项目负责人);

これは起こります:
ここに画像を挿入説明
重複リピート

もちろん、我々はまた、外部キーを追加することができます
ここに画像を挿入説明

削除制約は、制約を変更しました

其实添加没啥暖用一般——基本的属性创表就写好了嘛
主要是有冲突的时候 我说过 键名不能重复 不然没法添加新约束
这时 我们得修改约束
SQL挺蛋疼 得先删除 再添加
比如 上面的这句约束

ALTER TABLE project ADD CONSTRAINT un_name_responsibility UNIQUE(项目名称,项目负责人);

我少加了一个 应该是这样:

ALTER TABLE project ADD CONSTRAINT un_name_responsibility UNIQUE(专利申请号,项目名称,项目负责人);

咋办?没回头路了“There’s no way back.’”
先删再加:
1️⃣删除UNIQUE 我们用INDEX关键字

ALTER TABLE project DROP INDEX un_name_responsibility;

再检查一下:

SHOW INDEX FROM project;

ここに画像を挿入説明
2️⃣ok 下一步:

ALTER TABLE project ADD CONSTRAINT un_name_responsibility UNIQUE(专利申请号,项目名称,项目负责人);
SHOW INDEX FROM project;

ここに画像を挿入説明
3️⃣补充一下:对于主键 我们用 PRIMARY KEY关键字
对于外键 我们用FOREIGN KEY关键字
如果只有一个 可以不加键名 约束名

ALTER TABLE project DROP PRIMARY KEY;
ALTER TABLE project DROP FOREIGN KEY;

总结 ´◡`

这一节在上一节的基础上 更加深入讲解了约束类型
从此 我们正式结束了DDL的学习 恭喜!也恭喜你自己能够学到这里!
下一站:

另外,

  • 想系统的学习数据库嘛?
    MySQL专栏

  • python这么火 想要深入学习python 玩一下简单的应用嘛?可以看我专栏 还在持续更新中哦:
    python应用

  • 小孩子才做选择 大人全都要!对后端感兴趣吗?收下它吧:)
    手把手带你学后端(服务端)

  • 谢谢大佬支持! 萌新有礼了:)

发布了39 篇原创文章 · 获赞 31 · 访问量 1万+

おすすめ

転載: blog.csdn.net/weixin_43178828/article/details/104202078