1 基础操作

1.1 登录

在完成mysql软件的安装后,通常会提醒设置用户名以及密码等信息。 其次,初次使用,可以使用具有视图的软件登录数据库,如navicat for mysql。 最后,在熟悉基本的情况后,可直接在命令行中登录,当然了,在最初安装的时候,大概也是在命令行中操作的。 前提是保证mysql被设置到了环境变量中,否则命令行终端无法识别mysql的命令。 命令行登录:

即可

密码通常可以不直接写在命令中,只需要-p,回车后,自会要求输入密码。端口号一般默认为3306。

1.2 基本操作

mysql会保存多个数据库 database,每个数据库中又会保存多个表 table 登录后,通过 show语句可查看对应的列表,不过要注意是复数形式。

若要查看对应数据库中的表,则用 use 选择,

很明显,除了复数外,每个语句后面要加上分号 ; 若是没有数据库和表,可以通过 create语句创建,

最后,mysql 语句是不区分大小写的。

2 查表

2.1 列出数据

看到表的列表后,需要查看一下表里有什么内容,表就是一个表格,包含各个列,每个列记录着对应的数据,首先需要查看列名都是什么,可用 describe

该语句将列出该表内全部的列名,以及列的信息,如整数性质,字符串性质。

然后,需要列出某一个列的数据,如人员的姓名,商品的名称,使用 select

2.2 选择数据与排序

2.2.1 指定条件

在商品信息的表中,通常记录着各商品名称及价格,为了提取出价格较便宜的商品,需要设定一个容忍值,要求价格低于此,则用 where 语句,

通过 where过滤掉不符合要求的数据。后面的 order by,顾名思义时指定排序依据,将商品名按照价格的大小顺序输出,没有 desc时默认从小到大,desc则指定为逆序排列。

2.2.2 分组

有时给出商品的生产商名称,我们需要统计各个生产商有多少商品,则用到 group by

group by将表按照生产商分组,即生产商变成一个被合并的行。count()统计数量的函数,给出每个生产商产生的新的行中对应的商品的数量,用 as 命名一个新的列名作为输出,当然并不会在原表中产生这个列,只是临时的。

3 操作表

3.1 表

上述语句,给表创建了几个列, auto_increment指每次插入行时,该行的id自动增1,同时规定了它不能为NULL,为它之后称为主键primary key奠定必要基础。char() 语句指定该列的值为字符串,有的可以为空,有的则不行。其中,类型括号中的数值表示能够显示的字符个数。 最后,指出该表的引擎为InnoDB。

  1. 此外,主键的要求是唯一性,可以使用多个列共同组成主键,只要这个组合保证唯一性,且不为空。
  2. 对于自增的id值,可以使用 last_insert_id()函数给出最后一个 auto_increment的值。
  3. 在设定列名时,可以用 default指定默认值。

上述语句,表明删除数据库可以使用同样的语法。

  1. 重命名表,
  1. 修改表结构 使用 alter语句,

上述同样表明 --是mysql中的注释符号。

3.2 行

set后可跟多个列的操作

4 多表查询

上述的操作基本上就是日常的基础操作了,但实际工作中,由于记录的东西复杂又大,如前面提到的商品信息,每个商品都需要记录一个生产商,生产商又具有自己的地址等信息,如果每个商品后面都附带这么多的信息,则浪费资源。于是,我们需要将信息分开,商品通过id在其它表中可以找到自己的生产商,而这样的操作则变成了多个表的查询,以及外键,联结等知识。

上述实际就是一个联结操作,所谓的联结就是多表查询。

4.1 联结

多表联结,就是以此查询多个表,比对列的值。只不过,稍微特殊的是,两个表的查询。其次,不要添加无用的表进行查询,会极大降低查找效率。

left表示 outer join左边的表对应的列需要全部列出,无论是否满足条件。

虽然联结语句只有左右两个表,但一条语句可并列多个联结语句。

4.2 组合

有时多个 select语句可能要求展示的结果是相同的列,此时可用 union 将两个 select语句结合在连在一起,共同输出

须注意的是,union会自动删除重复的行,如果需要显示,可用 union all替代。

4.3 视图

视图不是一个表,但可以看作一个临时的悬浮表使用。如果一次查询的结果对我而言还有可用的价值,可以将其保存在视图中,并赋予一个表名,在之后的查询操作中使用它。 所谓悬浮,主要指视图有表的样子,但并没有表的底层结构。

视图可以更新数据,或删行增行,但尽量别做。

5 文本匹配与函数

5.1 文本匹配

假设在商品的表中,希望提取出包含某个字符串的商品名,以及它的价格时,则需要,匹配商品名,如包含‘糖’字的零食。mysql给出了自己的 like语句,也支持正则表达式,用 regexp语句。

匹配模式,利用 %表示任意个数的任意字符,利用 _表示一个字符。 需注意的是,这里不支持大小写,也无法匹配对应的大小写。

5.2 函数

mysql中包含大量函数,支持字符串,数值以及时间的操作,如 upper()将字符串转为大写,length()给出字符串的长度,trim()去掉字符串两端的空格。其它的诸如数值的平均值,总和的函数均可自行查询,日期注意格式须有 -连接年月日,:连接时分秒,通过year()等函数可提出出对应的时间信息。

5.3 全文本搜索

全文本搜索首先需要列支持,再创建表时,须声明,

这样每次加入新数据都会对其进行索引,但不要一次加入过多数据。

上述语句将提取出包含对应文本的信息,并按照重要度排序,即越靠前,匹配越多,越重要

新列名则是对应重要度的数值

  1. 扩展查询 against()中后加上 with query expansion,将在已有的结果中提取出重要度的关键词,再次查询一遍。
  2. 布尔文本搜索 against()中后加上 in boolean mode,在前面的文本中使用类似文本匹配的语法
布尔操作符功能
“”定义短语
-排除
+必须包含
*词尾通配符
>包含该词,且等级增加
<包含该词,但等级减小
()组合表达式

6 引擎简介

特性InnoDBMemoryMyISAM
存储限制64TBRAM256TB
事务安全支持
空间利用率
插入数据速度
外键支持支持
哈希索引支持
集群索引支持
数据索引支持支持
数据压缩支持
全文索引支持

7 事务与小编程

7.1 事务

为此,在执行事务时,首先声明开始执行事务,完成一列语句输入后,出现失败,则回滚至之前的状态,或中途设置了保留点,回滚到对应的保留点,若一切无误,则提交所有的命令,完成事务。

7.2 触发器

触发器是当出现某一活动时,自动执行一系列命令,如插入行前,插入行后,都属于活动。相应的活动只有(insert,delete,update)的前后,也因此,每个表只有6个触发器。 下面主要通过实际编写分析创建与使用,

7.3 存储过程

有时,存储一个信息,可能涉及到其它数据的更改,并要求这些更改必须作为一个事务处理,要么全部更新,要么别动,为了简化操作,需要将这些步骤整合在一起,于是,有了这个存储过程,下面,也是通过编写的代码介绍,

7.4 游标

游标是查询结果的一个结果集,使用就像迭代器从中输出数据,且需要在上述的存储过程中使用。下面同样,通过编写代码分析,