ストロークの崩壊後、一部の学生を含む小肉部門、たくさんのはMySQLを使用して、私は私のノートが再び新しい学生を支援することを望んで、多くのことを終了する前に行って置かれていない来ました!
DML、DDL、DCLは何ですか?
DML(データ操作言語):
その名の通り、彼らは、DELETE、SELECT、UPDATE、INSERT、あり、これら4つのコマンドはされて動作させるために、データベース内のデータの言語に使用します
DDL(データ定義言語):主なコマンドは、CREATEなどALTER、DROP、ある、DDLは主に定義で使用したり、テーブル(表)、データの種類、作業の初期化テーブルと制約との間のリンクの構造を変化させているそれらのほとんどテーブルを作成するときに使用
DCL(データ制御言語):あるデータベース制御機能が。これは、セットに使用されるか、または(助成金、拒否、REVOKEなど)の文を含むデータベース・ユーザーまたはロールの権限ステートメントを、変更されます。デフォルトでは、唯一のシステム管理者、dbcreatorの、db_ownerロールまたはdb_securityadminのや他のスタッフによってDCLを実行する力を持っています
TCL(トランザクション制御言語):トランザクション制御言語を含め、:セットトランザクション\ロールバック\ savepoin
MySQLの一般的に使用されるコマンド
DDL
データベースを作成します。
create database 数据库名;
データベースのリストを見ます
show databases;
使用データベース
use 数据库名;
[データベースの削除
drop database 数据库名;
データテーブルを作成します。
CREATE TABLE IF NOT EXISTS `codes_user`(
-> `user_id` INT UNSIGNED AUTO_INCREMENT,
-> `user_title` VARCHAR(100) NOT NULL,
-> `user_author` VARCHAR(40) NOT NULL,
-> `submission_date` DATE,
-> PRIMARY KEY ( `user_id` )
-> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
ビューのデータテーブルの設計
この方法の一つ
desc 表名
方法二
show create table 表名
削除データシート
drop table 表名;
空のテーブル
truncate table 表名;
若しくは
delete from 表名;
削除フィールド
ALTER TABLE 表名 DROP 字段名;
新しいフィールド
ALTER TABLE 表名 ADD 字段名 INT; # INT 是字段类型
フィールドタイプを変更します。
ALTER TABLE 表名 MODIFY 字段名 CHAR(10); # 修改字段类型
フィールドを変更します。
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 BIGINT; # BIGINRT 是新字段的数据类型
インデックスを作成します
# 方法一
alter table 表名 add index 索引名(字段1,字段2...); # 创建普通索引
alter table 表名 add unique 索引名(字段1,字段2...); # 创建unique索引
alter table 表名 add primary 索引名(字段1,字段2...); # 创建主键索引
# 方法二
create index 索引名 on 表名 (字段1,字段2...); # 创建普通索引
ビューのインデックス情報
SHOW INDEX FROM 表名\G;
インデックスの削除
ALTER TABLE 表名 DROP INDEX 索引名
DROP INDEX 索引名 ON 表名
DQLとDML
お問い合わせ
クエリ結果の重複除外
select distinct 字段名 from 表名;
制限事項制限し、オフセット
select * from 表名 limit 5; # 只检索5条数据
select * from 表名 limit 5 offset 10; # 从第5条数据开始,取10条数据
並べ替え順
select * from 表名 order by id; # ASC 默认是升序排列
select * from 表名 order by id desc; # DESC 默认是升序排列
データのフィルタリング
または与と
select * from TB_User where ( score=100 or score=200) and age>18; # or 的优先级小于 and,需要加括号
で与ないで
select * from TB_User where age in (20, 21)
between..and
select * from TB_User where age between 18 and 20
以下のようなあいまい一致キーワード
# “%” 表示任意多个字符
# 完全匹配张三
select * from TB_User where name like '张三';
# 以张三结尾
select * from TB_User where name like '%张三';
# 以张三开头
select * from TB_User where name like '张三%';
# 结果包含张三
select * from TB_User where name like '%张三%';
# “_” 表示任意单个字符
select * from TB_User where name like '_张三';
select * from TB_User where name like '张三_';
定期的なキーワードマッチする正規表現
# 以张三开头
select * from TB_User where name regexp '^张三';
# 以张三结尾
select * from TB_User where name regexp '张三$';
# “.” 匹配任意一个字符
select * from TB_User where name regexp '.三';
# 匹配以姓是张、赵的学生
SELECT * FROM tb_student WHERE `name` REGEXP '^[张赵]';
# 匹配“张张张三”
SELECT * FROM tb_student WHERE `name` REGEXP '张{3}';
スプライシングフィールド
select Concat(name, '(', age, ')') from user order by age;
内蔵機能
select AVG(price) AS avg_price from TB_Order where orderID='100'; # 返回某列的平均值
select Count(*) from TB_User # 返回user表行数 count(*) 不省略null值
select Max(score) from TB_Student # 返回最大值
select Min(score) from TB_Student # 返回最小值
select SUM(score) from TB_Student where name='老王'; # 返回求和
パケット
フィールドにグループ別にグループ
select name, AVG(score) as avg_score from TB_Student group_by name; # 统计每个学生的平均分
一般的に使用した集約関数の背後に、パケットフィルタリングを有する、及び複合体の使用を必要とし、グループによって
select name, AVG(score) as avg_score from TB_Student group_by name having avg_score>90; # 统计每个学生的平均分,并且过滤出平均分大于90的记录
SELECT句の順序
> GROUP BY>有する>順序>から>限界によって>選択
クエリのリンクを登録しよう
インラインクエリ
# 假设 TB_A 与 TB_B 有公共字段 a
# 写法一
select a, b from TB_A, TB_B where TB_A.a = TB_B.a
# 写法二
select a, b from TB_A inner join TB_B on TB_A.a = TB_B.a
自己結合
select student, score from TB_Student where tag = (select tag from TB_StudentTag where tag = '优秀' );
外部リンク(左と右の接続リンク)
# 假设 TB_A 与 TB_B 有公共字段 a
select TB_A.a, TB_b.b from TB_A left outer JOIN TB_B ON TB_A.a = TB_B.a;
完全なリンク
select TB_A.a, TB_B.b from TB_A full join TB_B on TB_A.a=TB_B.a;
アタッチSQLクエリは、さまざまなリンクを示しています
複合クエリーUNION
# 使用场景:
# 1、单表执行多个查询,按单个查询返回数据
# 2、在单个查询中,从不同的表返回类似结构的数据
# 数据去重 union
select A.key1 from A union select B.key1 from B;
# 数据不去重 union all
select A.key1 from A union all select B.key1 from B;
追加
INSERT INTO 表名 VALUES(值1,值2...);
INSERT INTO 表名(字段1,字段2...) VALUES(值1,值2...);
INSERT INTO 表名(字段1,字段2...) select 字段1,字段2... from 表名(可以是其他表);
修正
update 表名 set 字段名 = 新值 where id = '100';
[削除]
# 删除 id 为 '100' 的数据
delete from 表名 where id = '100';
DCL
データベース認証
grant all privileges on *.* to root@'%' identified by "root_pwd";
MySQLのレプリケーションテーブル
構文:mysqldumpを-uユーザ名-pパスワード-dデータベース名時計>スクリプト名。
# 导出整个数据库结构和数据
mysqldump -h localhost -uroot -p123456 database > dump.sql
# 导出单个数据表结构和数据
mysqldump -h localhost -uroot -p123456 database table > dump.sql
# 导出整个数据库结构(不包含数据)
mysqldump -h localhost -uroot -p123456 -d database > dump.sql
# 导出单个数据表结构(不包含数据)
mysqldump -h localhost -uroot -p123456 -d database table > dump.sql
どのようにスロークエリ分析
explain select sql语句
分析の結果
タイプ(最良から最悪まで):CONST> eq_reg>参照>範囲>インデックス>すべての
キー:それはnullの場合、インデックスが使用されていません
key_lenに:インデックス長、短いよりよいです
SQLの最適化手法
1. 索引优化,添加复合索引
2. 分表,大表拆小表
3. 尽量避免 select *,杜绝 select * from tb_name
4. 尽量避免 select * from tb_name where name like 'xxx'
5. 避免在大表上的 group by,order by,offset 操作
6. WHERE查询条件,尽量按照添加的索引顺序来写
非リレーショナルデータベースとリレーショナルデータベースの比較
リレーショナルデータベース:MySQLの、SQL ServerやOracle、 PostgreSQLの、SQLiteの
利点:
1. 查询能力高,可以操作很复杂的查询
2. 一致性高。在数据同步时,一般采用锁来保证数据的可靠性,在处理数据时,对表进行封锁来保证操作的时候其他操作不能改变查询范围的数据
3. 表具有逻辑性,易于理解
短所:
1. 不适用高并发读写
2. 不适用海量数据高效读写
3. 层次多,扩展性低
4. 维护一致性开销大
5. 涉及联表查询,复杂,慢
非リレーショナルデータベース: HBaseの、Redisを、MongoDBの、memcachedの
利点:
1. 由于数据之间没有关系,所以易扩展,也易于查询
2. 数据结构灵活,每个数据都可以有不同的结构
3. 由于降低了一致性的要求,所以查询速度更快
短所:
1. 数据准确度没有那么高
重要なのは、4つの主要な特性でありますか?
特徴:原子性、一貫性、分離性、耐久性(ACID)
ダーティリード、反復不能読み取り、ファントム読み取りは何ですか?
ダーティー読み取り
ダーティリードトランザクションがデータにアクセスしているときに参照し、データが変更されており、この変更はデータベースに提出されていない、そして、他のトランザクションは、データにアクセスし、このデータを使用しています。(コミット読み取り)
非反復可能読み取り
これは、同じデータを複数回読んで、取引を指します。この取引が終わっていない場合は、別のトランザクションは、同じデータにアクセスします。したがって、第2のトランザクションの変形に起因する最初のトランザクション内の2つのリードデータ、間、その後、最初の二つのトランザクションは、データが異なっていてもよい読み取ります。これは、二つの読み出しデータが同じ、(非反復可能読み取り)されないトランザクションで発生しました
マジック読書
例えば、テーブル内の最初のトランザクションデータが変更されたトランザクションは、独立して実行されたときに発生する現象ではないことを意味し、この変形は、テーブル内のすべてのデータ行を含みます。また同時に、このテーブルのデータを変更する第2のトランザクションで、本変形例は、テーブルに新しい行を挿入することです。そして、ユーザは、最初のトランザクションがデータラインの修正は、同じ起こった幻覚かのように、存在しないテーブルの発見後に発生します動作します。
どのように、ダーティリード反復不能読み取り、ファントム読み取りを避けるために?
分離レベル:シリアライズ(直列化)ロック・テーブル[]
トランザクション分離レベルは何ですか?
上から下、レベルの増加に
1. 读未提交(read uncommited)【隔离级别最低,并发性能高】(脏读、不可重复读、幻读)
2. 读已提交(read commited)【锁定正在读取的行】(不可重复读、幻读)
3. 可重复读(repeatable read)【锁定所读区的所有行】(幻读)4. 可串行化(serializable)【锁表】
▼▼▼
観察力の鋭い学生は、大文字のSQL文キーワードの例を参照し、そこに小文字があります。もちろん、関係なく、大文字または小文字の、それは成功し、実装することができますが、この記事の最後、全員に与えるための2つのサプリメントがあります。
1. SQL语句关键字尽量用大写书写
2. 千万不要在同一条SQL语句中出现关键字既有大写也有小写的情况
押して世間の注目Fanger魏コード識別番号の下
マイクロチャネル公共番号[ガイド]テスト開発で私に従ってください、
お使いのJavaプログラミングとあなたが得ることができるJavaの古典学習教材(私が買いに200元を費やした)、簡単スタート:「ジャワ」に返信します。
「パイソン」への返信:無料アクセス「のpythonエントリ」スコアブック、密かに退縮スペアチェンジ。
「インタビュー」への返信:24の一般的なテストの顔の質問に、あなたが欠場するとは思わないだろう。