mysql数据库基础知识总结

MyISAM和InnoDB区别
MyISAM是MySQL的默认数据库引擎(5.5版之前)。虽然性能极佳,而且提供了大量的特性,包括全文索引、压缩、空间函数等,但MyISAM不支持事务和行级锁,而且最大的缺陷就是崩溃后无法安全恢复。
两者的对比:

是否支持行级锁 : MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。
是否支持事务和崩溃后的安全恢复: MyISAM 强调的是性能,每次查询具有原子性,其执行速度比InnoDB类型更快,但是不提供事务支持。但是InnoDB 提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
是否支持外键: MyISAM不支持,而InnoDB支持。
是否支持MVCC :仅 InnoDB 支持。应对高并发事务, MVCC比单纯的加锁更高效;MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作;MVCC可以使用 乐观(optimistic)锁 和 悲观(pessimistic)锁来实现;各数据库中MVCC实现并不统一。

大表优化

  1. 限定数据的范围
    务必禁止不带任何限制数据范围条件的查询语句。

  2. 读/写分离
    经典的数据库拆分方案,主库负责写,从库负责读;

  3. 垂直分区
    根据数据库里面数据表的相关性进行拆分。 例如,用户表中既有用户的登录信息又有用户的基本信息,可以将用户表拆分成两个单独的表,甚至放到单独的库做分库。
    垂直拆分的优点: 可以使得列数据变小,在查询时减少读取的Block数,减少I/O次数。此外,垂直分区可以简化表的结构,易于维护。
    垂直拆分的缺点: 主键会出现冗余,需要管理冗余列,并会引起Join操作,可以通过在应用层进行Join来解决。此外,垂直分区会让事务变得更加复杂;

简单来说垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表
4. 水平分区
保持数据表结构不变,通过某种策略存

摘自:http://c.biancheng.net/view/2361.html

1.创建 MySQL 数据库时指定字符集和校对规则

使用 MySQL 命令行工具创建一个测试数据库,命名为 test_db_char,指定其默认字符集为 utf8,默认校对规则为 utf8_chinese_ci(简体中文,不区分大小写),输入的 SQL 语句与执行结果如下所示:
mysql数据库基础知识总结_第1张图片

2.查看所有数据库

SHOW DATABASES;

  1. 使用 LIKE 从句,查看与 test_db 完全匹配的数据库:
    SHOW DATABASES LIKE ‘test_db’;
  2. 使用 LIKE 从句,查看名字中包含 test 的数据库:
    SHOW DATABASES LIKE ‘%test%’;
  3. 使用 LIKE 从句,查看名字以 db 开头的数据库:
    SHOW DATABASES LIKE ‘db%’;
  4. 使用 LIKE 从句,查看名字以 db 结尾的数据库:
    SHOW DATABASES LIKE ‘%db’;

3.删除数据库

DROP DATABASE [ IF EXISTS ] <数据库名>

4.选择数据库

USE <数据库名>

5.数值型数据类型

mysql数据库基础知识总结_第2张图片
在这里插入图片描述
mysql数据库基础知识总结_第3张图片
mysql数据库基础知识总结_第4张图片

6.创建数据表

CREATE TABLE <表名> ([表定义选项])[表选项][分区选项];
mysql数据库基础知识总结_第5张图片
DESCRIBE/DESC 语句可以查看表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等.

7.修改数据表

mysql数据库基础知识总结_第6张图片
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
mysql数据库基础知识总结_第7张图片
mysql数据库基础知识总结_第8张图片
mysql数据库基础知识总结_第9张图片

8.删除数据表

DROP TABLE [IF EXISTS] 表名1 [ ,表名2, 表名3 …]

9.主键

主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则:
每个表只能定义一个主键。
主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。
一个列名只能在复合主键列表中出现一次。
复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。这是最小化原则。
在 CREATE TABLE 语句中,主键是通过 PRIMARY KEY 关键字来指定的。

10.外键约束(FOREIGN KEY)

外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键的值必须等于另一个表中主键的某个值。
外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有关联关系的行。
主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。
从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。mysql数据库基础知识总结_第10张图片
在数据表中创建外键使用 FOREIGN KEY 关键字,具体的语法规则如下:[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]

在修改数据表时添加外键约束的语法规则为:
ALTER TABLE <数据表名> ADD CONSTRAINT <索引名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);

对于数据库中定义的外键,如果不再需要,可以将其删除。外键一旦删除,就会解除主表和从表间的关联关系,MySQL 中删除外键的语法格式如下:
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;

11.唯一约束

MySQL唯一约束(Unique Key)要求该列唯一,允许为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。
在修改表时添加唯一约束的语法格式为:
ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>);
在 MySQL 中删除唯一约束的语法格式如下:
ALTER TABLE <表名> DROP INDEX <唯一约束名>;

12.检查约束(CHECK)

检查约束使用 CHECK 关键字,具体的语法格式如下:
CHECK <表达式>
其中:<表达式>指的就是 SQL 表达式,用于指定需要检查的限定条件。
mysql数据库基础知识总结_第11张图片
修改表时设置检查约束的语法规则如下:
ALTER TABLE tb_emp7 ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)
修改表时删除检查约束的语法规则如下:
ALTER TABLE <数据表名> DROP CONSTRAINT <检查约束名>;

13.默认值(DEFAULT)

<字段名> <数据类型> DEFAULT <默认值>;

修改表时添加默认值约束的语法规则如下:
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <数据类型> DEFAULT <默认值>;
修改表时删除默认值约束的语法规则如下:
ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> DEFAULT NULL;

14.非空约束

创建表时可以使用 NOT NULL 关键字设置非空约束,具体的语法规则如下:
<字段名> <数据类型> NOT NULL;

15.SELECT:数据表查询语句

mysql数据库基础知识总结_第12张图片

16.DISTINCT:去重(过滤重复数据)

SELECT DISTINCT <字段名> FROM <表名>;

17.AS:设置别名

18.LIMIT:限制查询结果的记录条数

[<位置偏移量>,] <行数>

19.ORDER BY:对查询结果进行排序

ORDER BY {<列名> | <表达式> | <位置>} [ASC|DESC]
使用 ORDER BY 子句应该注意以下几个方面:
ORDER BY 子句中可以包含子查询。
当排序的值中存在空值时,ORDER BY 子句会将该空值作为最小值来对待。
当在 ORDER BY 子句中指定多个列进行排序时,MySQL 会按照列的顺序从左到右依次进行排序。
查询的数据并没有以一种特定的顺序显示,如果没有对它们进行排序,则将根据插入到数据表中的顺序显示。使用 ORDER BY 子句对指定的列数据进行排序。

20.WHERE:条件查询

mysql数据库基础知识总结_第13张图片
使用 LIKE 的模糊查询

  1. 百分号(%)
    百分号是 MySQL 中常用的一种通配符,在过滤条件中,百分号可以表示任何字符串,并且该字符串可以出现任意次。
    使用百分号通配符要注意以下几点:
    MySQL 默认是不区分大小写的,若要区分大小写,则需要更换字符集的校对规则。
    百分号不匹配空值。
    百分号可以代表搜索模式中给定位置的 0 个、1 个或多个字符。
    尾空格可能会干扰通配符的匹配,一般可以在搜索模式的最后附加一个百分号。
  2. 下划线(_)
    下划线通配符和百分号通配符的用途一样,下画线只匹配单个字符,而不是多个字符,也不是 0 个字符。

21.常用运算符详解

mysql数据库基础知识总结_第14张图片

22.INNER JOIN:内连接查询

语法格式如下:
SELECT <列名1,列名2 …>
FROM <表名1> INNER JOIN <表名2> [ ON子句]

语法说明如下。
<列名1,列名2…>:需要检索的列名。
<表名1><表名2>:进行内连接的两张表的表名。
内连接是系统默认的表连接,所以在 FROM 子句后可以省略 INNER 关键字,只用关键字 JOIN。使用内连接后,FROM 子句中的 ON 子句可用来设置连接表的条件。

23LEFT/RIGHT JOIN:外连接查询

24.子查询详解

mysql数据库基础知识总结_第15张图片
mysql数据库基础知识总结_第16张图片

25.GROUP BY:分组查询

mysql数据库基础知识总结_第17张图片

26.HAVING:指定过滤条件

mysql数据库基础知识总结_第18张图片
mysql数据库基础知识总结_第19张图片

27.REGEXP:正则表达式查询

mysql数据库基础知识总结_第20张图片
在这里插入图片描述

28.INSERT:插入数据(添加数据)

  1. INSERT…VALUES语句
    INSERT VALUES 的语法格式为:
    INSERT INTO <表名> [ <列名1> [ , … <列名n>] ]
    VALUES (值1) [… , (值n) ];
  2. INSERT…SET语句
    语法格式为:
    INSERT INTO <表名>
    SET <列名1> = <值1>,
    <列名2> = <值2>,

    INSERT INTO…SELECT…FROM 语句用于快速地从一个或多个表中取出数据,并将这些数据作为行数据插入另一个表中。
    SELECT 子句返回的是一个查询到的结果集,INSERT 语句将这个结果集插入指定表中,结果集中的每行数据的字段数、字段的数据类型都必须与被操作的表完全一致。mysql数据库基础知识总结_第21张图片

29 .UPDATE:修改数据(更新数据)

mysql数据库基础知识总结_第22张图片

30.DELETE:删除数据

mysql数据库基础知识总结_第23张图片

31.自定义函数(CREATE FUNCTION)

语法格式如下:
CREATE FUNCTION <函数名> ( [ <参数1> <类型1> [ , <参数2> <类型2>] ] … )
RETURNS <类型>
<函数主体>
mysql数据库基础知识总结_第24张图片
mysql数据库基础知识总结_第25张图片
删除自定义函数
DROP FUNCTION [ IF EXISTS ] <自定义函数名>

32.创建存储过程(CREATE PROCEDURE)

存储过程是一些 SQL 语句的集合,比如有的时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中还需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程。
语法格式如下:
CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>
[过程参数[,…] ] 格式
[ IN | OUT | INOUT ] <参数名> <类型>
在这里插入图片描述
mysql数据库基础知识总结_第26张图片
mysql数据库基础知识总结_第27张图片
删除存储过程
DROP { PROCEDURE | FUNCTION } [ IF EXISTS ] <过程名>

33.索引

B-树索引可以进行全键值、键值范围和键值前缀查询,也可以对查询结果进行 ORDER BY 排序。但 B-树索引必须遵循左边前缀原则,要考虑以下几点约束:
查询必须从索引的最左边的列开始。
查询不能跳过某一索引列,必须按照从左到右的顺序进行匹配。
存储引擎不能使用索引中范围条件右边的列。
HASH 索引不是基于树形的数据结构查找数据,而是根据索引列对应的哈希值的方法获取表的记录行。哈希索引的最大特点是访问速度快,但也存在下面的一些缺点:
MySQL 需要读取表中索引列的值来参与散列计算,散列计算是一个比较耗时的操作。也就是说,相对于 B- 树索引来说,建立哈希索引会耗费更多的时间。
不能使用 HASH 索引排序。
HASH 索引只支持等值比较,如“=”“IN()”或“<=>”。
HASH 索引不支持键的部分匹配,因为在计算 HASH 值的时候是通过整个索引值来计算的。
全文索引
全文索引只能在 VARCHAR 或 TEXT 类型的列上创建,并且只能在 MyISAM 表中创建.mysql数据库基础知识总结_第28张图片

34.创建索引(CREATE INDEX)

  1. 使用 CREATE INDEX 语句
    可以使用专门用于创建索引的 CREATE INDEX 语句在一个已有的表上创建索引,但该语句不能创建主键。
    语法格式:
    CREATE <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC])
  2. 使用 CREATE TABLE 语句
    索引也可以在创建表(CREATE TABLE)的同时创建。在 CREATE TABLE 语句中添加以下语句。语法格式:
    CONSTRAINT PRIMARY KEY [索引类型] (<列名>,…)
  3. 使用 ALTER TABLE 语句
    在使用 ALTER TABLE 语句修改表的同时,可以向已有的表添加索引。
    ADD INDEX [<索引名>] [<索引类型>] (<列名>,…)
    mysql数据库基础知识总结_第29张图片
    查看索引
    SHOW INDEX FROM <表名> [ FROM <数据库名>]

35.修改和删除索引(DROP INDEX)

  1. 使用 DROP INDEX 语句
    语法格式:
    DROP INDEX <索引名> ON <表名>

36.创建用户(CREATE USER)

为了避免用户恶意冒名使用 root 账号控制数据库,通常需要创建一系列具备适当权限的账号,应该尽可能地不用或少用 root 账号登录系统,以此来确保数据的安全访问。
CREATE USER <用户名> [ IDENTIFIED ] BY [ PASSWORD ] <口令>
在这里插入图片描述
修改用户(RENAME USER)
RENAME USER <旧用户> TO <新用户>
可以使用 SET PASSWORD 语句修改一个用户的登录口令。

语法格式:
SET PASSWORD [ FOR <用户名> ] =
{
PASSWORD(‘新明文口令’)
| OLD_PASSWORD(‘旧明文口令’)
| ‘加密口令值’
}
mysql> SET PASSWORD FOR ‘jack’@‘localhost’=
-> PASSWORD(‘lion’);
删除用户(DROP USER)
DROP USER <用户名1> [ , <用户名2> ]…
用户授权(GRANT)

37.事务(TRANSACTION)

事务具有 4 个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。
开始事务
BEGIN TRANSACTION <事务名称> |@<事务变量名称>
提交事务
COMMIT TRANSACTION <事务名称> |@<事务变量名称>
撤销事务
ROLLBACK [TRANSACTION]
[<事务名称>| @<事务变量名称> | <存储点名称>| @ <含有存储点名称的变量名>

38.数据库备份(INTO OUTFILE)

数据库备份是指通过导出数据或者复制表文件的方式来制作数据库的副本。当数据库出现故障或遭到破坏时,将备份的数据库加载到系统,从而使数据库从错误状态恢复到备份时的正确状态。
mysql数据库基础知识总结_第30张图片

39.数据库恢复(LOAD DATA)

数据库恢复是指以备份为基础,与备份相对应的系统维护和管理操作。
可使用 LOAD DATA…INFILE 语句来恢复先前备份的数据。
mysql数据库基础知识总结_第31张图片

你可能感兴趣的:(mysql数据库基础知识总结)