关系型数据库介绍

顾名思义,关系型数据库就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多)。
关系型数据库中,我们的数据都被存放在了各种表中(比如用户表),表中的每一列就存放着一条数据(比如一个用户的信息)。
MySQL-01 - 图1
大部分关系型数据库都使用 SQL 来操作数据库中的数据。并且,大部分关系型数据库都支持事务的四大特性(ACID)。
有哪些常见的关系型数据库呢?
MySQL、PostgreSQL、Oracle、SQL Server、SQLite(微信本地的聊天记录的存储就是用的 SQLite) ……。

MySQL 介绍

image.png
MySQL 是一种关系型数据库,主要用于持久化存储我们的系统中的一些数据比如用户信息。
由于 MySQL 是开源免费并且比较成熟的数据库,因此,MySQL 被大量使用在各种系统中。任何人都可以在 GPL(General Public License) 的许可下下载并根据个性化的需要对其进行修改。MySQL 的默认端口号是3306

MySQL的基本使用见https://www.bilibili.com/video/BV12b411K7Zu?from=search&seid=17717326232052030182

数据库操作

  1. /* 数据库操作 */ ------------------
  2. -- 查看当前数据库
  3. SELECT DATABASE();
  4. -- 显示当前时间、用户名、数据库版本
  5. SELECT now(), user(), version();
  6. -- 创建库
  7. CREATE DATABASE 数据库名;
  8. -- 查看已有库
  9. SHOW DATABASES[ LIKE 'PATTERN']
  10. -- 查看当前库信息
  11. SHOW CREATE DATABASE 数据库名
  12. -- 修改库的选项信息
  13. ALTER DATABASE 库名 选项信息
  14. -- 删除库
  15. DROP DATABASE[ IF EXISTS] 数据库名
  16. 同时删除该数据库相关的目录及其目录内容

MySQL 创建数据表

创建MySQL数据表需要以下信息:

  • 表名
  • 表字段名
  • 定义每个表字段

    语法

    以下为创建MySQL数据表的SQL通用语法:
    CREATE TABLE table_name (column_name column_type); ```java 以下例子中我们将在 RUNOOB 数据库中创建数据表runoob_tbl:

CREATE TABLE IF NOT EXISTS runoob_tbl( runoob_id INT UNSIGNED AUTO_INCREMENT, runoob_title VARCHAR(100) NOT NULL, runoob_author VARCHAR(40) NOT NULL, submission_date DATE, PRIMARY KEY ( runoob_id ) )ENGINE=InnoDB DEFAULT CHARSET=utf8;

  1. 实例解析:
  2. - 如果你不想字段为 **NULL** 可以设置字段的属性为 **NOT NULL**, 在操作数据库时如果输入该字段的数据为**NULL** ,就会报错。
  3. - AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1
  4. - PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
  5. - ENGINE 设置存储引擎,CHARSET 设置编码。
  6. <a name="ClvDQ"></a>
  7. # MySQL 删除数据表
  8. MySQL中删除数据表是非常容易操作的,但是你在进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。
  9. <a name="tCGXL"></a>
  10. ### 语法
  11. 以下为删除MySQL数据表的通用语法:<br />DROP TABLE table_name ;
  12. <a name="ZZgsn"></a>
  13. # MySQL 插入数据
  14. MySQL 表中使用** INSERT INTO **SQL语句来插入数据。
  15. <a name="utP0Q"></a>
  16. ### 语法
  17. ```java
  18. INSERT INTO table_name ( field1, field2,...fieldN )
  19. VALUES
  20. ( value1, value2,...valueN );
  21. eg:
  22. INSERT INTO runoob_tbl
  23. (runoob_title, runoob_author, submission_date)
  24. VALUES
  25. ("学习 MySQL", "Wizz工作室", NOW());

如果数据是字符型,必须使用单引号或者双引号,如:”value”。

MySQL 查询数据

MySQL 数据库使用SQL SELECT语句来查询数据。
你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据。

语法

以下为在MySQL数据库中查询数据通用的 SELECT 语法:

  1. SELECT column_name,column_name
  2. FROM table_name
  3. [WHERE Clause]
  4. [LIMIT N][ OFFSET M]
  • 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
  • SELECT 命令可以读取一条或者多条记录。
  • 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
  • 你可以使用 WHERE 语句来包含任何条件。
  • 你可以使用 LIMIT 属性来设定返回的记录数。
  • 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0

以上皆是命令行节面操作MySQL,推荐一个图形化客户端Navicat给大家使用

CRUD:

C:insert into tableName(field1,field2…) values(value1,value2…)
如果省略了 field这部分括号的内容 那么默认是全部字段都要传值
R:select columnName1,columnName2 from tableName

  • 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
  • SELECT 命令可以读取一条或者多条记录。
  • 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
  • 你可以使用 WHERE 语句来包含任何条件。
  • 你可以使用 LIMIT 属性来设定返回的记录数。
  • 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。

以上常用的有where子句:select columnName1,columnName2 from tableName where condition1 and/or condition2 (不加and/or的话表示单条件查询)

= 等号,检测两个值是否相等,如果相等返回true (A = B) 返回false。
<>, != 不等于,检测两个值是否相等,如果不相等返回true (A != B) 返回 true。
> 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true (A > B) 返回false。
< 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true (A < B) 返回 true。
>= 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true (A >= B) 返回false。
<= 小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true (A <= B) 返回 true。

U:update tableName set field1=newValue1,field2=newValue2 where…
D:delete from tableName where…

Like子句:
SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 **
如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。
这个语句其实文字没代码好说明
下面之间上代码大家肯定就会用了
select
from tableName where field1 like ‘%czr%’; 查询所有field1带czr的
select from tableName where field2 like ‘%czr’; 查询以czr结尾的
select
from tableName where field3 like ‘czr%’; 查询以czr开头的
union操作符:
这个语句我用的不是很多 但是根据网上来的例子可以

  1. SELECT country FROM Websites
  2. UNION
  3. SELECT country FROM apps
  4. ORDER BY country;

这样可以获取两表中不同的country值 比如一个表有多个CN(China) 查出来的时候只会打印一个
如果想要答应多个 将union改为 union all 即可.
带有where的union all
下面的 SQL 语句使用 UNION ALL 从 “Websites” 和 “apps” 表中选取所有的中国(CN)的数据(也有重复的值):

  1. SELECT country, name FROM Websites
  2. WHERE country='CN'
  3. UNION ALL
  4. SELECT country, app_name FROM apps
  5. WHERE country='CN'
  6. ORDER BY country;

order by 排序语句

  • 你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
  • 你可以设定多个字段来排序。
  • 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
  • 你可以添加 WHERE…LIKE 子句来设置条件。

默认asc升序排序 当然你也可以加上asc desc是降序排列
select from czrTb order by czr_id asc
select
from czrTb order by czr_id desc –>降序
group by 分组语句:
GROUP BY 语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

  1. SELECT column_name, function(column_name)
  2. FROM table_name
  3. WHERE column_name operator value
  4. GROUP BY column_name;