[ターン] MySQLの凝集基礎

 文法が収集およびソートのMySQLの基本(B)

 オリジナル:https://www.cnblogs.com/cxx8181602/p/9525950.html

接続データベース操作

コードをコピー
/ * * mysqlの接続/
mysqlの-h -Pポートアドレス-uユーザ名-pパスワード
例:mysqlの-h 127.0.0.1 -P 3306 -uルート-p ****

/ *終了mysqlの* /
出口;
コードをコピー

 

データベース操作

コードをコピー
#データベース操作
/ *キーワード:データベース(増加)を作成します* /
データベースのデータベース名[データベースオプション]を作成します。
例如:データベースのテストのデフォルトの文字セットのutf8コレートutf8_binを作成します。
/ *データベースオプション:キャラクタセットおよび照合* /
文字セット:一般的な黙認のUTF8。
一般的な照合:⑴ciの終わり:大文字と小文字を区別しないエンド⑵cs:エンド⑶binの大文字と小文字を区別:バイナリコーディングの比較

/ *キーワード:データベースは現在、(チェック)されているかを確認するには、show * /
ショーのデータベース;

/ *データベース作成文を確認してください* /
ショーは、データベースのデータベース名を作成します。

/ *キーワード:(変更)を変更するデータベースの情報を変更するためのオプション* /
データベースのデータベース名[新しいデータベースのオプション]を変更します。
たとえば、次のようにデータベースのテストのデフォルトの文字セットGBKを改変すること。

/ *キーワード:データベースを削除ドロップ(削除)* /
データベースのデータベース名をドロップ。

/ *キーワード:指定されたデータベースを入力するために使用します* /
データベース名を使用します。
コードをコピー

 

オペレーティングテーブル

コードをコピー
オペレーティングテーブル#
/ *キーワード:データテーブル(増加)を作成します* /
(名表テーブルを作成します
フィールド1つのフィールド1つのタイプ[フィールドオプション]、
フィールド2フィールドタイプ2 [フィールドオプション]、
N型フィールド、Nフィールド[オプションフィールド]
)表オプション情報。

たとえば、次の(表のテストを作成
  IDはint(10)符号なしNOT NULL AUTO_INCREMENTのコメント 'ID'、
  コンテンツVARCHAR(100)NOT NULLデフォルト '' コメント '内容'、
  時間はint(10)NOT NULLデフォルト0コメント '時間'
  主キー(ID)
)ENGINE = InnoDBのデフォルトのcharset = UTF8コメント= 'テストテーブル';

構文解析(単独以下、MySQLの列のプロパティを解析):
あなたがしたくない場合は、フィールドでNULL属性フィールドは、NOT NUL、データベース操作に設定することができる入力データ・フィールドがNULLの場合、エラーが報告されています。
一般に、主キーのために使用される増分AUTO_INCREMENT属性、自動的に1を加えた値として定義されます。
PRIMARY KEYキーは、カンマで区切られた列の間に、複数列主キーを定義するために使用することができる主キー列を定義するために使用されます。
ENGINE設定ストレージエンジン、CHARSETは備考コメント情報を、エンコーディングを設定します。
コードをコピー

コードをコピー
/ *キーワード:データベースで現在のクエリデータテーブルは、(チェック)かを示します* /
ショーのテーブル。

/ *キーワード:ファジークエリのような* /
ワイルドカード:任意の単一文字を表すことができ_、%は任意の文字を表すことができ
「ファジールックアップテーブル名%」のようなショーのテーブル。

/ *テーブルの作成文を確認してください* /
番組表表名を作成します。

/ *テーブル構造を参照してください* /
DESCテーブル名;

/ *キーワード:ドロップドロップテーブル(削除)* /
テーブルを削除[存在する場合]表名
例如:テストが存在する場合、テーブルをドロップ。

/ *キーワード:テーブル名(変更)を変更変更* /
旧ALTER TABLEテーブル名は、新しいテーブル名に名前を変更します。
コードをコピー
/ *列の定義を変更します* /
/ *キーワード:*を増加ADD /
新しい列名フィールドタイプ[フィールドオプション]を追加し、テーブルのテーブル名を変更します。
例:テーブルのテストは名char(10)NOT NULLデフォルト「」コメントの「name」を追加変更します。

/ *キーワード:*を削除してドロップ/
テーブルのドロップテーブル名、フィールド名を変更します。
たとえば、次の表のテストドロップコンテンツを変更します。
/ *キーワード:フィールドタイプを変更する変更* /
テーブルを変更し、テーブルに新しいフィールド名フィールドタイプ[新しいフィールドのオプション]を変更します。
例:テーブルのテストは、名前のVARCHAR(100)NOT NULLデフォルトの「管理者」が「修正名」コメントを修正する改変すること。

/ *キーワード:最初の*前面にフィールドを置く、ソートするフィールドを変更/
テーブルを変更するテーブル名、フィールド名、フィールドタイプ最初の[フィールドオプション]を変更します。
例:テーブルのテストは、最初の名前のVARCHAR(100)NOT NULLデフォルトの「管理」はコメント「トップ」を変更し改変すること。

/ *キーワード:フィールド名2の背面にソートフィールド、1つのフィールド名を変更した後* /
テーブルを変更する2フィールド名の後の表1フィールド名フィールドタイプ[オプションフィールド]を修正します。
例:テーブルテスト「後の時間フィールド」時間後に名前のvarchar(100)nullのデフォルト値を変更しないで「管理」コメントを改変すること。

/ *キーワード:変更は、フィールドの名前を変更します* /
テーブル変更テーブルを変更し、新たな元のフィールド名フィールドタイプフィールド名新しい[新しいフィールドオプション];
例如: alter table test change name username varchar(50) not null default '' comment '用户名字';

/*修改表选项*/ 
alter table 表名 表选项信息;
例如: alter table test engine Myisam default charset gbk; --修改存储引擎和修改表的字符集

 

数据操作

コードをコピー
#数据操作
/*关键字:insert 插入数据(增)*/
insert into 表名(字段列表) values(值列表);
例如: create table user(
  id int(10) unsigned not null auto_increment comment 'id',
  name char(10) not null default '' comment '名字',
  age int(3) not null default 0 comment '年龄',
  primary key (id)
)engine=InnoDB default charset=utf8 comment='用户表';
--插入数据
insert into user(id,name,age) values(1,'admin_a',50);
insert into user(name) values('admin_b');
コードをコピー
/*关键字:select 查询数据(查)*/
select *[字段列表] from 表名[查询条件];
例如: select * from user;--查全部字段用*代替

select name from user where age>0;--查name字段,age大于0

/*关键字:delete 删除数据(删)*/
delete from 表名[删除条件];
例如: delete from user where age<1;--删除age小于1数据

/*关键字:update 修改数据(改)*/
update 表名 set 字段1=新值1,字段n=新值n [修改条件];
例如: update user set age=100 where name='admin_a';

 

MySQL数据类型
#MySQL数据类型
/*MySQL三大数据类型:数值型、字符串型和日期时间型*/

/*数值型*/

/*字符串型*/

/*日期时间型*/

 

MySQL列属性
コードをコピー
#MySQL列属性
/*null、not null、default、primary key、auto_increment、comment*/
MySQL真正约束字段的是数据类型,但是数据类型的约束太单一,需要有一些额外的约束,来更加保证数据的合法性.
MySQL常用列属性有:null、not null、default、primary key、auto_increment、comment.

/*空属性: null和not null*/
空属性: null(空,默认) 和 not null(不为空). mysql数据库默认字段都是为null的,实际开发过程中尽可能保证所有的数据都不应该为null,空数据没有意义.
例如: create table test(
    a int not null,
    b int
);
insert into test (a,b) values(10,null);
insert into test (a,b) values(null,10);--报错
コードをコピー

コードをコピー
/*默认值: default*/
default: 自定义默认值属性,通常配合not null一起使用.
例如: create table test1(
    a int not null default 200,
    b int
);
insert into test1(b) values(20);--或 insert into test1(a,b) values(default,20);
コードをコピー

コードをコピー
/*主键|唯一索引*/
Mysql中提供了多种索引? (下文索引更多解析)
1.主键索引:primary key
2.唯一索引:unique key
3.全文索引:fulltext index
4.普通索引:key 或 index

主键:primary key  一张表中只能有一个字段可以使用对应的主键,用来唯一的约束该字段里面的数据,不能重复和不能为null.
设置主键有两种方式:
(1)在定义一个字段的时候直接在后面进行设置primary key
例如: create table test2(
  id int(10) unsigned not null primary key,
  name char(20) not null default ''
);
コードをコピー

コードをコピー
(2)定义完字段后再定义主键
例如: create table test3(
  id int(10) unsigned not null,
  name char(20) not null default '',
  primary key (id)
);
コードをコピー

コードをコピー
唯一键:unique key 解决表中多个字段需要唯一性约束的问题.
例如:create table test4(
  id int(10) unsigned not null,
  name char(20) not null default '',
  goods varchar(100) not null default '',
  primary key (id),
  unique key (name,goods)
);
コードをコピー

コードをコピー
/*自动增长: auto_increment*/
自增长属性:每次插入记录的时候,自动的为某个字段的值加1(基于上一个记录). 通常跟主键搭配.
自增长规则:(1)任何一个字段要做自增长前提必须是一个索引  (2)自增长字段必须是整型数字
例如: create table test5(
  id int(10) unsigned not null auto_increment,
  name char(20) not null default '',
  primary key (id)
);
コードをコピー

コードをコピー
/*列描述 comment*/
列描述(注释):comment 与其他的注释符不同之处在于,这里的注释内容属于列定义的一部分.
例如:create table user(
  id int(10) unsigned not null auto_increment comment 'id',
  name char(20) not null default '' comment '名字',
  primary key (id)
)engine=InnoDB default charset=utf8 comment='用户表';
コードをコピー

 

索引

コードをコピー
#索引
/*索引的概述和优缺点和种类*/
什么是索引?
索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.
类比理解:数据库中的索引相当于书籍目录一样,能加快数据库的查询速度.
没有索引的情况,数据库会遍历全部数据后选择符合条件的选项.
创建相应的索引,数据库会直接在索引中查找符合条件的选项.

索引的性质分类:
索引分为聚集索引和非聚集索引两种,聚集索引是索引中键值的逻辑顺序决定了表中相应行的物理顺序,而非聚集索引是不一样;
聚集索引能提高多行检索的速度,而非聚集索引对于单行的检索很快.

索引的优点:
(1)加快数据检索速度 (创建索引主要原因)
(2)创建唯一性索引,保证数据库表中每一行数据的唯一性
(3)加速表和表之间的连接
(4)使用分组和排序子句对数据检索时,减少检索时间
(5)使用索引在查询的过程中,使用优化隐藏器,提高系统的性能

索引的缺点:
(1)创建索引和维护索引要耗费时间,时间随着数据量的增加而增加
(2)索引需要占用物理空间和数据空间
(3)表中的数据操作插入、删除、修改, 维护数据速度下降

索引种类
(1)普通索引: 仅加速查询
(2)唯一索引: 加速查询 + 列值唯一(可以有null)
(3)主键索引: 加速查询 + 列值唯一(不可以有null)+ 表中只有一个
(4)组合索引: 多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
(5)全文索引: 对文本的内容进行分词,进行搜索 (注意:目前仅有MyISAM引擎支持)
コードをコピー
コードをコピー
/*创建表时直接指定索引*/
--创建主键索引
例如:create table student(
  id int(10) unsigned not null auto_increment comment 'id主键索引',
  name char(20) not null default '' comment '名字',
  class varchar(50) not null default '' comment '班级',
  seat_number smallint(5) not null default 0 comment '座位编号',
  primary key (id)
)engine=InnoDB default charset=utf8 comment='学生表';
コードをコピー

/*创建索引*/
create [unique唯一索引][clustered聚集索引] index <索引名>
on <表名>(<列名称>[<排序>],<列名称>[<排序>]…);

语法解析:其中unique和clustered为可选项. 注意:基本表上最多仅仅能建立一个聚集索引.
"列名称":规定需要索引的列. "排序":可选asc(升序)和desc(降序)缺省值为asc.
--创建唯一索引(unique key 简写 unique)
例如:create unique index number on student(seat_number desc);

--创建普通索引
例如:create index name_class on student(name asc,class desc);

/*删除索引*/
drop index <索引名> on 表名;
例如:drop index number on student;

 

外键

コードをコピー
/*外键约束: foreign key */
外键约束: foreign key 被约束的表叫做副表,外键设置在副表上面,外键引用主键字段所在的表叫做主表. (作用:约束两张表的数据)
外键定义语法: constraint 外键约束名称 foreign key(外键字段) references 主表名称(引用字段)
外键数据操作:
1.当有外键约束之后,添加数据的时候,先添加主表数据,再添加副表数据
2.当有了外键约束,修改数据的时候,先改副表的数据,在修改主表的数据
3.当有了外键约束,删除数据的时候,也是先删除副表的数据,再删除主表的数据
コードをコピー
外键注意事项:
1.外键约束只有InnoDB存储引擎才支持.
2.实际项目中往往会用到外键的设计思想,但往往不会真正的从语法上进行外键约束. 因为外键约束的级联操作可能会带来一些现实的逻辑问题. 另外使用外键会较低mysql的效率.

 

储存引擎

コードをコピー
/*储存引擎: engine*/
常见的引擎:Myisam InnoDB BDB Memory Archive 等

不同的引擎在保存表的结构和数据时采用不同的方式?
MyISAM表文件含义:.frm表定义,.MYD表数据,.MYI表索引
InnoDB表文件含义:.frm表定义,表数据空间文件(存放表的数据和索引)和日志文件
コードをコピー
注意:项目中一般用InnoDB引擎.
コードをコピー
MySQL中innodb与myisam的区别
(1):InnoDB支持事物,MyISAM不支持事物
(2):InnoDBは、行レベルのロックをサポートし、MyISAMテーブルは、テーブルレベルのロックをサポート
(3):InnoDBは(MVCC)スナップショットデータをサポートし、MyISAMテーブルはサポートしていません。
(4):InnoDBのサポート外部キー、MyISAMテーブルはサポートしていません。
(5):InnoDBは、フルテキストインデックス、MyISAMのサポートをサポートしていません。

行レベルロックを使用してInnoDBは:条件変更検索フィールドがインデックスに一致する場合にのみ、使用されるのInnoDB行ロック欠失(行レベルロック:フィールドインデックス整合条件を追加します)。
InnoDBのテーブルレベルのロックが使用されます。削除フィールドは検索がインデックスに変更されません条件に合致する場合は、InnoDBのテーブルレベルロック(テーブルレベルロックを使用します。表には、データベースを照会し、テーブル全体が、ロックする必要がありますそれがクエリ正確に一致することを確認するため)
トリガーロックを読む:lockコマンドを読んでは、選択によってトリガされます。
トリガーロックを書く:挿入、削除、更新を使用するときにロックがトリガされ、書き込み、このロックが解除され、使用のロールバック後、またはコミットされます
より良好な区別:読み取りと書き込みロックと読み取りテーブル・レベル・ロック行レベル・ロックと書き込み権限、ロックロックと呼ばれるテーブル・レベル・ロック行レベルのロックがオブジェクトロック(ロックする決定と呼ばれ、(ユーザがロック権限を持つどのアクションを判断します)。プラスの行または表全体で)

MVCC非ロック読み出し一貫性として知られているマルチバージョン同時実行制御、;それはマルチバージョンデータベース制御線によって、現在の行の実行時間からデータを読み取るためには、本質的に使用されるデータのスナップショットです。
なぜMVCCを使うのか?
ロックのオーバーヘッドを解消します(データの整合性を確保したい場合は、最も簡単な方法は、データのロックを動作させることであるが、ロックが避けられないオーバーヘッドをロックするので、MVCCを使用しないようになる並行性を改善し、道をロックすることができます。)
コードをコピー

 

三つのパラダイム

コードをコピー
/ *データベース3つのパラダイム* /
- テーブルの仕様を構築します
- 各テーブルは、エンティティに関する情報を保持しています
- 主キーフィールドとしてIDをそれぞれ有します
-  ID原子テーブルの主キー+

- 第1正規形
フィールドは、アトミック性を保証するために、各列を分割することができません。

- 第2正規形
第1正規形に基づいて、それはいくつかに依存することはできません。
消去単一キーワードは依存部分的に回避することができ、主キーの組み合わせ(A、B)と一致する。増やし。

- 第3正規形
第二のパラダイムを満たすに基づいて、パスに依存することはできません。
主キーに依存しますが、フィールドに依存する他のフィールドがあるフィールド。これは推移的な依存です。
達成するために、テーブルに置かれたデータエンティティ情報
コードをコピー

 

文法が収集およびソートのMySQLの基本(B)

おすすめ

転載: www.cnblogs.com/c-x-a/p/11057869.html