(少なくとも5:00)の一般的な違いMySQLの3つのストレージエンジン(InnoDBは、MyISAMテーブル、MEMORY)?
1)InnoDB的优势在于提供了良好的事务处理、崩溃修复能力和并发控制。缺点是读写效率较差,占用的数据空间相对较大。(磁盘表,支持事务处理,InnoDB还支持外键)
2)MyISAM是MySQL中常见的存储引擎,曾经是MySQL的默认存储引擎。MyISAM的表存储成3个文件。文件的名字与表名相同。拓展名为frm、MYD、MYI。(MyISAM:磁盘表,不支持事务,支持表级锁,B+Tree索引)
3) MEMORY是MySQL中一类特殊的存储引擎。它使用存储在内存中的内容来创建表,而且数据全部放在内存中。每个基于MEMORY存储引擎的表实际对应一个磁盘文件。该文件的文件名与表名相同,类型为frm类型。该文件中只存储表的结构。而其数据文件,都是存储在内存中,因为它是把数据存到内存中,如果内存出现异常就会影响数据。如果重启或者关机,所有数据都会消失。因此,基于MEMORY的表的生命周期很短,一般是一次性的。(MEMORY内存表,不支持事务,表级锁,Hash索引)
データベーストランザクションと意味の4つの特徴
図1は、アトミック(原子性):トランザクションのすべての操作は、いずれかの実行完了したか否かを積分するデータベースです。
2.一貫性(整合性):いくつかの同時トランザクションの実行の結果は、シリアル実行の特定の順序と一致しなければなりません。
図3は、分離(単離):透明であるように、他のトランザクションが実行される、他のトランザクションからの干渉なしにトランザクションの中間結果をトランザクションを実行します。
4、(耐久性)永続:すべてのコミットされたトランザクションの場合、トランザクションシステムは、データベースに障害が発生した場合でも、データベースへの変更が失われないことを確認する必要があります。
注:分離レベルは、シングルスレッドのデータベースとして設計され、並行処理の設定に基づいてする必要があり、それは、スレッドの安全性の問題のすべてを防ぐ自然に分離された問題であることを確認しますが、そうならば、効率は非常に低くなりますことができます。2つのスレッドが同時に変更した場合、その後、あなたが複数のスレッドの同時変更を防ぐためにロック機構を使用する必要があり、お互いに迷惑を行います。同時クエリの場合、2つのスレッド、無スレッドの安全性の問題。
どのようなデータベース3つのパラダイム?
对于设计数据库提出了一些规范,这些规范被称为范式:
第一范式(1NF):列不可拆分 , 即无重复的域。
指数据库表的每一列都是不可分割的基本数据项。
符合第一范式的特点就有:有主关键字、主键不能为空、主键不能重复,字段不可以再分。
第二范式(2NF):唯一标识 ,即拥有实体的唯一标识(eg: 身份证、id号等)。
指每个表必须有且仅有一个数据元素为主关键字(Primary key),其他数据元素与主关 键字一一对应。这种关系为函数依赖。
符合第二范式的特点就有:满足第一范式的前提下,消除部分函数依赖。
第三范式(3NF):引用主键 ,即每列数据都与主键直接相关。
符合第三范式的特点就有:不存在非主属性对码的传递性依赖以及部分性依赖
note:三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。(需求>性能>表结构)
共通データベースは、SQLのデータ型がありますサポートしていますか?
varchar型のSQLデータ型との違い、およびCHAR?
1)char是指固定长度的变量类型,char类型在查询时比varchar更有效率
2)varchar是长度不固定的变量类型,varchar储存数据时不会浪费空间
SQLどのような制約があり、意味を説明する(例:NOT NULL、UNIQUE、など)?
でも、テーブルが、でもテーブルを左右にもデータベーステーブル内の違いは何ですか?
クエリにSQL文でページングを実装する方法?
TABLE_NAME LIMIT START、COUNT SELECT * FROM
SQLインジェクションとは何ですか?
用户提交带有恶意的数据与SQL语句进行字符串方式的拼接,从而影响了SQL语句的语义,最终产生数据泄露的现象
如何防止SQL注入?
SQL语句参数化(使用%s占位符来传递参数)
データベース照会効率を最適化する方法(解説参照)?
1). 储存引擎选择:如果数据表需要事务处理,应该考虑使用 InnoDB,因为它完全符合 ACID 特性。如果不需要事务处理,使用默认存储引擎 MyISAM 是比较明智的
2). 对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引
3). 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
4). 应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描
5). 应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描6). Update 语句,如果只更改 1、2 个字段,不要 Update 全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志7). 对于多张大数据量(这里几百条就算大了)的表 JOIN,要先分页再 JOIN,否则逻辑读会很高,性能很差。
SQLクエリステートメント