1. リレーショナル データベースの設計ルール
ER モデルと 3 つのパラダイムに従います
-
E エンティティは、データベース内のテーブルに対応するエンティティを表します
R 関係は関係の意味を表します
3 つの正規形:
1. 列は分割できません
2 、一意の識別
3. 関係参照主キー
具体的な実施例
データをテーブルに入れてから、そのテーブルをデータベース。
データベースには複数のテーブルが存在することがあり、各テーブルにはそれ自体を識別するための名前があります。テーブル名は一意です。
テーブルには、Java や Python の「クラス」の設計と同様に、データをテーブルに格納する方法を定義するいくつかの特性があります。
- #テーブルは列 (フィールドとも呼ばれます) で構成されます。データ テーブルの設計は、実際には各フィールドの意味の設計と説明です。データテーブルを作成するときは、各フィールドのデータ型を指定し、データ長と名前を定義する必要があります。各フィールドは、Java または Python の「インスタンス属性」に似ています。
- テーブル内のデータは行に格納され、1 つの行がレコードになります。各行は、Java または Python の「オブジェクト」に似ています。
-
- 参照整合性整合性): 例: 従業員の所在地の部門、この部門は部門テーブルで見つかる必要があります。
- ユーザー定義の整合性: 例: ユーザー名は一意であり、パスワードは一意ではありません。空の場合など、その部門の給与はこの部門のマネージャーは、この部門の従業員の平均給与の 5 倍を超えてはなりません。
- 2. 制約 (CONSTRAINTS)
①Mysql インデックスは主キー、一意キー、および外部キーのカラムに自動的に作成されます。他のカラムにもインデックスを作成する必要がある場合は、作成する必要があります。 #②主キーを削除すると、対応するインデックスも削除されます
#④外部キーを削除します。外部キー列のインデックスはまだ存在します。削除する必要がある場合は、インデックスを個別に削除する必要があります。
3. 制約の適用
1. テーブルの制約とインデックスを表示します。
#查看某个表的约束 SELECT * FROM information_schema.table_constraints WHERE table_name = '表名称'; 或 SHOW CREATE TABLE 表名; #查看某个表的索引 SHOW INDEX FROM 表名称;
2. 主キー制約: 主キー
(1) 主キーは単一列主キーと複合主キーに分割されます (複合主キーの使用は推奨されません)主キーは 3 つの正規形式に違反しています。 ):
#单个字段设置主键 create table t_user( id int primary key, username varchar(20), password varchar(20) ); create table t_user( id int, username varchar(20), password varchar(20), primary key(id) ); #多个字段设置联合主键 drop table t_user; create table t_user( id int, username varchar(20), password varchar(20), primary key(id,username) ); #了解 #在建表后指定主键约束 alter table 表名称 add primary key (主键字段列表); #删除主键约束 alter table 表名称 drop primary key;
主キーの特性:
1. テーブル内に存在できる主キーは 1 つだけです
- 2. 「主キーフィールドの値は一意であり、null ではない」に設定します。
- 3. 主キーが複数のフィールドで構成されている場合、フィールドの後に主キーを設定することはできませんすべてのフィールドの後に "primary key(" を使用する必要があります。Field, field)"
- 4. 結合主キーでは、主キーを構成する各フィールドは空ではありません。個別に繰り返すことはできますが、同時に繰り返すことはできません。
- 5. 主キーを作成すると、対応するインデックスが自動的に作成され、主キーに対応するインデックスを削除すると、削除される。
- 3. Auto_increment 制約: auto_increment
create table t_user( id int primary key auto_increment, username varchar(20), password varchar(20) ); #建表后指定自增长列 alter table [数据库.]表名 modify 自增字段名 数据类型 auto_increment; #删除自增约束 alter table 表名 modify 自增字段名 数据类型;
自動インクリメント制約の特徴:
テーブル内の 1 つの主キーのみが auto である必要があります。 -increment type フィールド。このフィールドは整数である必要があり、空にすることはできません。通常、キー制約は主キー制約、一意キー制約、外部キー制約など、主キーにのみ設定されます
2、设置为自增的字段,从1开始自增;每次添加数据,都会在该字段最大值的基础上+1
3、使字段自增的方式:
如果是空或者0,则实际插入的将是自动增长后的值。
a> insert into t_user(username,password) values(‘admin’,‘123456’);
b> insert into t_user values(null,‘root’,‘123456’); (推荐使用)
c> insert into t_user values(0,‘root’,‘123456’);
4、唯一键约束:unique key
create table t_user( id int primary key auto_increment, username varchar(20) unique key, password varchar(20) unique key ); create table t_user( id int primary key auto_increment, username varchar(20), password varchar(20), unique key(username,password) ); #在建表后增加唯一键约束 alter table 表名称 add 【constraint 约束名】 unique key (字段名列表); #如果没有指定约束名,(字段名列表)中只有一个字段的,默认是该字段名,如果是多个字段的默认是字段名列表的第1个字段名。也可以通过show index from 表名;来查看 #删除唯一键约束 ALTER TABLE 表名称 DROP INDEX 唯一性约束名; #注意:如果忘记名称,可以通过“show index from 表名称;”查看
唯一键约束的特点:
1、设置唯一键约束的字段值唯一,但是可以为null
2、一张表可以设置多个唯一键约束,也可以设置联合唯一键,即多个字段设置一个唯一约束,但是不能使用"unique key"写在字段后设置,必须写在所有字段后,使用"unique key(字段,字段)"
3、联合唯一键要求组成唯一约束的字段可以单独重复,不能同时重复
4、 MySQL会给唯一约束的列上默认创建一个唯一索引。
5、删除唯一键只能通过删除对应索引的方式删除,删除时需要指定唯一键索引名
5、非空约束:not null
create table t_user( id int primary key auto_increment, username varchar(20) unique key not null, password varchar(20) ); #在建表后指定某个字段非空 ALTER TABLE 表名称 MODIFY 字段名 数据类型 NOT NULL 【default 默认值】; #如果该字段原来设置了默认值约束,要跟着一起再写一遍,否则默认值约束会丢失 #取消某个字段非空 ALTER TABLE 表名称 MODIFY 字段名 数据类型 【default 默认值】; #如果该字段原来设置了默认值约束,要跟着一起再写一遍,否则默认值约束会丢失
非空约束的特点:
设置为非空约束的字段的值不能为null
6、默认值约束:default
create table t_user( id int primary key auto_increment, username varchar(20) unique key not null, password varchar(20), gender char not null default '男' );
添加数据时使用默认值的方式:
不为该字段赋值或使用关键字default
insert into t_user(username,password) values(‘root’,‘123’);
insert into t_user values(null,‘admin123’,‘123’,default);
insert into t_user values(null,‘admin’,‘123’,null); //此方式不可以,会为该字段赋值为null
7、外键约束:foreign key
表关系:
1、一对一
2、多对一,在多的一方引用一的主键
student(sid,sname,age,sex,cid)–clazz(cid,cname,location)
3、一对多,在多的一方引用一的主键
clazz(cid,cname,location)–student(sid,sname,age,sex,cid)
4、多对多
user(uid,username,password)
order(oid,create_time,total_count,total_amount,status,user_id)
order_goods(id,oid,gid)
goods(gid,gname,price,sales,stock)
create table t_dept( id int primary key auto_increment, name varchar(20) ); create table t_emp( id int primary key auto_increment, name varchar(20), age int, gender char, dept_id int, foreign key(dept_id) references t_dept(id) #外键只能在所有字段列表后面单独指定 ); #在建表后指定外键约束 alter table 从表名称 add 【constraint 外键约束名】 foreign key (从表字段名) references 主表名(主表被参照字段名) 【on update xx】[on delete xx]; #删除外键约束 ALTER TABLE 表名称 DROP FOREIGN KEY 外键约束名; #查看某个表的约束名 SELECT * FROM information_schema.table_constraints WHERE table_name = '表名称'; 或 SHOW CREATE TABLE 表名; #删除外键约束不会删除对应的索引,如果需要删除索引,需要用ALTER TABLE 表名称 DROP INDEX 索引名; #查看索引名 show index from 表名称;
(1)外键特点
外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系。
在创建外键约束时,如果不给外键约束名称,默认名不是列名,而是自动产生一个外键名(例如 student_ibfk_1;),也可以指定外键约束名。
当创建外键约束时,系统默认会在所在的列上建立对应的普通索引。但是索引名是列名,不是外键的约束名。
删除外键时,关于外键列上的普通索引需要单独删除。
(2)要求
在从表上建立外键,而且主表要先存在。
一个表可以建立多个外键约束
从表的外键列,在主表中引用的只能是键列(主键,唯一键,外键),推荐引用主表的主键。
从表的外键列与主表被参照的列名字可以不相同,但是数据类型必须一样
(3)约束关系:约束是针对双方的
添加了外键约束后,主表的修改和删除数据受约束
添加了外键约束后,从表的添加和修改数据受约束
在从表上建立外键,要求主表必须存在
删除主表时,要求从表先删除,或将从表中外键引用该主表的关系先删除
(4)5个约束等级
Cascade方式:在父表上update/delete记录时,同步update/delete掉子表的匹配记录
Set null方式:在父表上update/delete记录时,将子表上匹配记录的列设为null,但是要注意子表的外键列不能为not null
No action方式:如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作
Restrict方式:同no action, 都是立即检查外键约束
Set default方式(在可视化工具SQLyog中可能显示空白):父表有变更时,子表将外键列设置成一个默认的值,但Innodb不能识别
如果没有指定等级,就相当于Restrict方式
8、检查约束:check
检查约束,mysql暂不支持
create table stu( sid int primary key, sname varchar(20), gender char check ('男'or'女') ); insert into stu values(1,'张三','男'); insert into stu values(2,'李四','妖'); 使用枚举类型解决如上问题: create table stu( sid int primary key, sname varchar(20), gender enum ('男','女') );
以上がMySQL の制約とインデックスの概念とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

MySQLはGPLライセンスを使用します。 1)GPLライセンスにより、MySQLの無料使用、変更、分布が可能になりますが、変更された分布はGPLに準拠する必要があります。 2)商業ライセンスは、公的な変更を回避でき、機密性を必要とする商用アプリケーションに適しています。

Myisamの代わりにInnoDBを選択する場合の状況には、次のものが含まれます。1)トランザクションサポート、2)高い並行性環境、3)高いデータの一貫性。逆に、Myisamを選択する際の状況には、1)主に操作を読む、2)トランザクションサポートは必要ありません。 INNODBは、eコマースプラットフォームなどの高いデータの一貫性とトランザクション処理を必要とするアプリケーションに適していますが、Myisamはブログシステムなどの読み取り集約型およびトランザクションのないアプリケーションに適しています。

MySQLでは、外部キーの機能は、テーブル間の関係を確立し、データの一貫性と整合性を確保することです。外部キーは、参照整合性チェックとカスケード操作を通じてデータの有効性を維持します。パフォーマンスの最適化に注意し、それらを使用するときに一般的なエラーを避けてください。

MySQLには、B-Treeインデックス、ハッシュインデックス、フルテキストインデックス、空間インデックスの4つのメインインデックスタイプがあります。 1.B-Treeインデックスは、範囲クエリ、ソート、グループ化に適しており、従業員テーブルの名前列の作成に適しています。 2。HASHインデックスは、同等のクエリに適しており、メモリストレージエンジンのHASH_TABLEテーブルのID列の作成に適しています。 3。フルテキストインデックスは、記事テーブルのコンテンツ列の作成に適したテキスト検索に使用されます。 4.空間インデックスは、地理空間クエリに使用され、場所テーブルのGEOM列での作成に適しています。

tocreateanindexinmysql、usethecreateindexstatement.1)forasinglecolumn、 "createdexidx_lastnameonemployees(lastname);" 2)foracompositeindexを使用して、 "createindexidx_nameonemployees(lastname、firstname);" 3); "3)、" 3)を使用します

MySQLとSQLiteの主な違いは、設計コンセプトと使用法のシナリオです。1。MySQLは、大規模なアプリケーションとエンタープライズレベルのソリューションに適しており、高性能と高い並行性をサポートしています。 2。SQLiteは、モバイルアプリケーションとデスクトップソフトウェアに適しており、軽量で埋め込みやすいです。

MySQLのインデックスは、データの取得をスピードアップするために使用されるデータベーステーブル内の1つ以上の列の順序付けられた構造です。 1)インデックスは、スキャンされたデータの量を減らすことにより、クエリ速度を改善します。 2)B-Tree Indexは、バランスの取れたツリー構造を使用します。これは、範囲クエリとソートに適しています。 3)CreateIndexステートメントを使用して、createIndexidx_customer_idonorders(customer_id)などのインデックスを作成します。 4)Composite Indexesは、createIndexIDX_CUSTOMER_ORDERONORDERS(Customer_Id、Order_date)などのマルチコラムクエリを最適化できます。 5)説明を使用してクエリ計画を分析し、回避します

MySQLでトランザクションを使用すると、データの一貫性が保証されます。 1)StartTransactionを介してトランザクションを開始し、SQL操作を実行して、コミットまたはロールバックで送信します。 2)SavePointを使用してSave Pointを設定して、部分的なロールバックを許可します。 3)パフォーマンスの最適化の提案には、トランザクション時間の短縮、大規模なクエリの回避、分離レベルの使用が合理的に含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

メモ帳++7.3.1
使いやすく無料のコードエディター

ホットトピック









