Mysqlは、これまでにメモやMysql 5.5と8.0の違い、およびインストール中の間違ったレコードを学習したことがありません。

MYISAMとINNODBの違い

ここに画像の説明を挿入します
一部の従来の操作
MYISAMはスペースを節約し、より高速です
。INNODBは、高いセキュリティ、トランザクション処理、マルチテーブルおよびマルチユーザー操作を備えています。
削除と切り捨て違い。
同じ点:データは削除できますが、テーブル構造は削除されません。
違い:
切り捨てがリセットされます。列をインクリメントするため、カウンターはゼロにリセットされます。
切り捨てはトランザクションに影響しません。
問題を削除すると、データベースを再起動します。現象。
エンジンがInnoDBの場合、自動インクリメント列は1から始まります(メモリに存在するため)。
エンジンがMyISAMの場合は、前のから続行します。増分から開始します(ファイルに保存されているものは失われません)。重複するキーワードを削除します。

select distinct '字段名' from 表名 

Mysqlで一般的に使用される関数

-- 常用的函数
-- 数学的
SELECT ABS(8)  --绝对值
SELECT CEILING(0.1) --向上取整
SELECT FLOOR(8.1)--向下取整
SELECT RAND() --返回一个0~1 之间的随机数
SELECT SIGN(10) --判断一个数的符号 0就是0 负数时-1  正数是 1
-- 字符串函数
SELECT CHAR_LENGTH('我爱憨憨')  --字符串的长度
SELECT CONCAT('我','爱','憨憨')  --拼接字符串
SELECT INSERT('I am  meinv',1,2'very')  --查询加替代
SELECT LOWER('ssssssss')  --小写字母
SELECT UPPER('SSSSSSSSSSSS'--大写字母)
SELECT INSTR('fjj','f') --返回第一次出现的字符串的索引
SELECT REPLACE('我爱憨憨','我','爱','憨憨')  -替换
SELECT SUBSTR(''','','憨憨'',4,6) --返回指定的字符串
SELECT REVERSE('我','爱','憨憨') --反转
--查询某个字段后替换
select replace(字段,'替换前的值','替换后的值') from 表名 where 字段 like '字段%'
-- 时间和日期函数
SELECT CURRENT_DATE --获取当前日期
SELECT CURDATE()--获取当前日期
SELECT NOW() --获取当前的时间
SELECT LOCALTIME() --本地时间
SELECT SYSDATE() --系统时间

集計関数

count(字段)  --求总和的
count(*),count(1) --之间的区别?
--如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。 
--因为count(*),自动会优化指定到那一个字段。所以没必要去count(1),用count(*),sql会帮你完成优化的 因此:count(1)和count(*)基本没有差别! 
--count(1) and count(字段)
--两者的主要区别是
--(1) count(1) 会统计表中的所有的记录数,包含字段为null 的记录。
--(2) count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。
--执行效果上:  
--count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL  
--count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL  
--count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,
--统计。
--执行效率上:  
--列名为主键,count(列名)会比count(1)快  
--列名不为主键,count(1)会比count(列名)快  
--如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)  
--如果有主键,则 select count(主键)的执行效率是最优的  
--如果表只有一个字段,则 select count(*)最优。
avg() --平均值
sum() --求总和
max() --最大值
min() --最小值
order by  排序 配合having 使用

MD 5暗号化
MD5とは何ですか?
主にアルゴリズムの複雑さと不可逆性を強化します
。MD5は不可逆的です。MD5の特定の値は
データベース特性と同じです。
原子性:すべてが成功するか、両方が失敗します。
一貫性:トランザクションの前後のデータの整合性は一貫している必要があります。
永続性:トランザクションのコミット、トランザクションがコミットされると、テストは元に戻せず、データベースに保持されます。
分離:トランザクションの分離レベルは、複数のユーザーがデータベースに同時にアクセスし、データベースが各ユーザーのトランザクションを開き、操作が行われる場合です。他のトランザクションのデータは相互に干渉できません。分離と
分離のレベル
コミットされていない読み取り:ダーティ読み取り現象、トランザクションAはトランザクションBのコミットされていないデータを読み取ります。

送信された読み取り:繰り返し不可能な読み取り現象。ダーティ読み取り現象を解決するには、同じトランザクションで2つのSelect操作を実行し、最初に再度読み取り、次に別のトランザクションが読み取ったデータを更新するため、2つの異なるデータを取得する前後に2回読み取ります。 ;

反復可能読み取り:非反復性、ファントム読み取り、トランザクションAupdateデータベースの後に取得されたデータ、トランザクションBInsertがトランザクションAのクエリ条件を満たす多くのデータを追加し、トランザクションAが再度読み取られたときに読み取ることができるという現象を解決します。独自の更新条件を満たすが更新されるデータ。

シリアル化:すべての問題を解決するために、他のトランザクションがこのデータに対して操作を実行するためのデータ操作は許可されていません。同期ロック。
インデックス作成
は、Mysqlがデータのデータ構造を効率的に取得するのに役立ちます。
インデックスはデータ構造
インデックスの分類です
。テーブル内のプライマリキーインデックスは1つだけで、一意のインデックスには複数の
プライマリキーインデックスを含めることができます。
一意の識別。プライマリキーを繰り返すことはできません。列の重複

避けるために、プライマリキーの一意のインデックスとして使用できるのは1つの列だけです。。一意のインデックスを繰り返すことができます。複数の列を識別して一意にすることができます。インデックス一般
インデックス
デフォルトでは、インデックスとキーキーワードによって設定された
フルテキストインデックス
は特定のデータベースエンジンでのみ使用でき、MyISAm
はデータをすばやく見つけます

--索引的使用
--1,在创建表的时候给字段增加索引
--2,创建完毕后,增加索引
--显示所有的所有信息
show index from 表名
--增加一个全文索引
alter table 表名  add fulltext index '字段名'(‘索引名’)
explain select * from 表名 --分析sql 执行的状况 

インデックスの役割
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します

ここに画像の説明を挿入します
ここに画像の説明を挿入します

インデックスを追加すると、クエリ速度が大幅に向上します。
私のテーブル構造

CREATE TABLE `test`.`Untitled`  (
  `id` bigint(0) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '用户昵称',
  `email` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户邮箱',
  `phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '' COMMENT '手机号',
  `gender` tinyint(0) UNSIGNED NULL DEFAULT 0 COMMENT '性别(0:男;1:女)',
  `password` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
  `age` tinyint(0) NULL DEFAULT 0 COMMENT '年龄',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP(0),
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = 'app用户表' ROW_FORMAT = Dynamic;
-- --查看数据库有多少数据
select count(1) from app_user
-- 当我们查询一个手机号的时候
SELECT * FROM app_user WHERE phone  ='13817917100';
-- --查看
EXPLAIN select * from app_user WHERE phone ='13817917100'
-- 给phone 字段添加一行索引
CREATE INDEX id_app_user_phone ON app_user(phone)
-- --查看
EXPLAIN select * from app_user WHERE phone ='13817917100'

Mysql5.5とMysql8.0の違い
これが今日の午後に発見したものです。5.5を使用していることがわかりました。タイムスタンプについて書いていると、5.5はこのように書くことができないことがわかりました。ここに画像の説明を挿入します
大丈夫です。Baiduには少しあります。差。ちなみに、
インストール中に発生した最新バージョンのmysql /エラーをインストールしました
ここに画像の説明を挿入します
。my.iniを変更します
ここに画像の説明を挿入します
。2番目のエラーは、管理者としてcmdを開かなかったため、mysqlのダウンロード時にエラーが発生したためです。
最後に、次のことを覚えておいてくださいデフォルトで生成されます。ビジュアルツールで開くと、新しいパスワードを変更するように求められます。
インストールが完了した後、テーブルを作成するときに最初にこれを確認
ここに画像の説明を挿入します
しましたが、彼が直接ジャンプしたことがわかりました。 5.7から8.0に。パフォーマンスが大幅に向上したと言われています。わかりません。以下の点のみを要約してください
ここに画像の説明を挿入します


コマンドのアカウントセキュリティの古いバージョン

grant all privileges on *.* to '用户名'@'主机' identified by '密码';

新しいバージョンは個別に実行する必要があります

create user '用户名'@'主机' identified by '密码';
grant all privileges on *.* to '用户名'@'主机';

前の
インデックスを使用すると、オプティマイザインデックス
1にエラーが報告されます。つまり、表示されている非表示のインデックス(非表示のインデックス)
はオプティマイザによって使用されません。

アプリケーションシナリオ
ソフト削除
はインデックスを削除します。間違ったインデックスを削除した場合、インデックスを介してのみ追加し直すことができます。一部の大規模なデータベースでは、パフォーマンスが低下します。間違いの削除を回避するために、最初に次のように設定できます。いいえ現時点ではオプティマイザは使用しないことがわかりますが、バックグラウンドは維持されています。確認後、削除してください。
グレーリリースは
ソフト削除に似ています。一部のインデックス関数をテストする場合、または後でこのインデックスを使用する場合は、最初に非表示インデックスとして設定できます。これにより、既存のクエリには影響しません。テスト後、これが必要であると判断できます。 index。表示されているインデックスに設定されます。
コマンド

--如果是不隐藏,则不需要后面的invisible关键字
create index 索引名称 on 表名(字段名) invisible;
--查询某一张表的索引,执行如下命令:
show index from 表名
--使用explain语句查看查询优化器对索引的使用情况
explain select * from 表名 where 条件;
--设置已经存在的索引为可见或者隐藏 
alter table 表名 alter index 索引名 visible;
alter table 表名 alter index 索引名 invisible;

主キーを非表示に設定することはできません
。2。降順インデックス
Mysql8.0は降順インデックスをサポートし始めました。InnoDBエンジンのみが降順をサポートするため、BTREE降順インデックスである必要があります。Mysql8.0は、グループごとの操作で暗黙的な並べ替えを実行しません。3
。機能
indexは機能インデックスインデックスで使用されます。式
はjsonをサポートします。データノードのインデックスは、仮想列の
機能に基づくウィンドウ関数です
。1アトミックddl操作
MySQL5.7は、dropコマンドdrop table t1、t2を実行します。 t1が存在し、t2が存在せず、t2テーブルが存在しないことを確認しますが、t1テーブルは削除されます。
MySQL8.0は同じdropコマンドを実行し、t2テーブルが存在しないことを要求し、t1テーブルは削除されず、原子性が保証されます。
2.自己
  増分列の永続性MySQL5.7およびその以前のバージョン、MySQLサーバーが再起動し、id = 100のデータが以前に削除された場合、テーブルの主キーの最大値を再スキャンしますが、最大値はテーブル内の現在のレコードの値は99であり、スキャン後、次のレコードのIDは101ではなく100になります。
  
  MySQL8.0は、インクリメントカウンターの最大値を、変更されるたびにREDOログに書き込み、各チェックポイントでエンジンのプライベートシステムテーブルに書き込みます。主キーの自動インクリメントの問題は繰り返されません。   インデックス作成
  の原則
インデックスはできるだけ多くあり
  ませんプロセス変更データ
  にインデックスを付けない小さなデータ量のテーブルにインデックスを付ける必要はありません
  インデックスは通常、一般的に使用されるクエリフィールドに追加されます

おすすめ

転載: blog.csdn.net/m0_46937429/article/details/113462632