mysql:2022

#博学谷IT学习技术支持#

个人笔记后续会进行内容改进

Mysql:

Mongodb:

Elasticsearch:

数据库

存储和管理数据的仓库,数据是有组织的进行存储。==

数据库英文名是 DataBase,简称DB。

数据库就是将数据存储在硬盘上,可以达到持久化存储的效果

Mysql:

mysql:

关系型数据库是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的 二维表 组成的数据库

Sql:

* 英文:Structured Query Language,简称 SQL,结构化查询语言

* 操作关系型数据库的编程语言

语法:

SQL 语句可以单行或多行书写,以分号结尾。

MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。

单行注释: -- 注释内容 或 #注释内容(MySQL 特有)

多行注释: /* 注释 */

Sql分类:

DDL(Data Definition Language) : 数据定义语言,用来定义数据库对象:数据库,表,列等

DDL简单理解就是用来操作数据库,表等

命令:

SHOW DATABASES; 查询所有的数据库

CREATE DATABASE 数据库名称;  【新增】

CREATE DATABASE IF NOT EXISTS 数据库名称;  【新增前进行判断】

DROP DATABASE 数据库名称; 【删除数据库】

USE 数据库名称; 【使用数据库,进入】

SELECT DATABASE();  【查看当前使用的数据库

SHOW TABLES; 【查询当前数据库下所有表名称

DESC 表名称; 【查询表结构

=======================================================================

【创建表】

CREATE TABLE 表名 (

字段名1  数据类型1,

字段名2  数据类型2,

字段名n  数据类型n

);

create table tb_user (

id int,

    username varchar(20),

    password varchar(32)

);

=======================================================================

DROP TABLE 表名; 【删除表】

DROP TABLE IF EXISTS 表名; 【删除前进行判断】

=======================================================================

【修改表名】

ALTER TABLE 表名 RENAME TO 新的表名;

-- 将表名student修改为stu

alter table student rename to stu;

=======================================================================

【表添加一列】

ALTER TABLE 表名 ADD 列名 数据类型;

-- 给stu表添加一列address,该字段类型是varchar(50)

alter table stu add address varchar(50);

=======================================================================

【修改数据类型】

ALTER TABLE 表名 MODIFY 列名 新数据类型;

-- 将stu表中的address字段的类型改为 char(50)

alter table stu modify address char(50);

=======================================================================

修改列名和数据类型

ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;

-- 将stu表中的address字段名改为 addr,类型改为varchar(50)

alter table stu change address addr varchar(50);

=======================================================================

【删除列】

ALTER TABLE 表名 DROP 列名;

-- 将stu表中的addr字段 删除

alter table stu drop addr;

=======================================================================

DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改

DML简单理解就对表中数据进行增删改

操作表也就是对表进行增(Create)删(Retrieve)改(Update)查(Delete)

命令:

=======================================================================

【添加数据】

INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…); 【给指定列添加数据

INSERT INTO 表名 VALUES(值1,值2,…); 【给全部列添加数据】

INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;

INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…; 【批量添加】

实例:

-- 给指定列添加数据

INSERT INTO stu (id, NAME) VALUES (1, '张三');

-- 给所有列添加数据,列名的列表可以省略的

INSERT INTO stu (id,NAME,sex,birthday,score,email,tel,STATUS) VALUES (2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1);

INSERT INTO stu VALUES (2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1);

-- 批量添加数据

INSERT INTO stu VALUES

(2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1),

(2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1),

(2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1);

=======================================================================

【修改数据】

UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 条件] ; 【修改表数据】

注意:

1. 修改语句中如果不加条件,则将所有数据都修改!

2. 像上面的语句中的中括号,表示在写sql语句中可以省略这部分

=======================================================================

【删除数据】

DELETE FROM 表名 [WHERE 条件] ;

=======================================================================

DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据)

DQL简单理解就是对数据进行查询操作。从数据库表中查询到我们想要的数据。

完整:

SELECT

    字段列表

FROM

    表名列表

WHERE

    条件列表

GROUP BY

    分组字段

HAVING

    分组后条件

ORDER BY

    排序字段

LIMIT

分页限定

命令:

查询多个字段

SELECT 字段列表 FROM 表名;

SELECT * FROM 表名; -- 查询所有数据

【去重查询】

SELECT DISTINCT 字段列表 FROM 表名;

【起别名】

AS: AS 也可以省略

【条件查询】

SELECT 字段列表 FROM 表名 WHERE 条件列表;

【排序查询】

SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;

* ASC : 升序排列 **(默认值)**

* DESC : 降序排列

【聚合函数】:将一列数据作为一个整体,进行纵向计算

| 函数名      | 功能                             |

| count(列名) | 统计数量(一般选用不为null的列) |

| max(列名)   | 最大值                           |

| min(列名)   | 最小值                           |

| sum(列名)   | 求和                             |

| avg(列名)   | 平均值                           |

【分组查询】

SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];

分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义

实例:

查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的

select sex, avg(math),count(*) from stu where math > 70 group by sex having count(*)  > 2;

where 和 having 区别:

* 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。

* 可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。

【分页查询】

SELECT 字段列表 FROM 表名 LIMIT  起始索引 , 查询条目数;

起始索引公式:

起始索引 = (当前页码 - 1) * 每页显示的条数 (page-1)*pagesize

DCL(Data Control Language) 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户

DML简单理解就是对数据库进行权限控制。比如我让某一个数据库表只能让某一个用户进行操作等。

约束分类

* **非空约束: 关键字是 NOT NULL**

  保证列中所有的数据不能有null值。

  例如:id列在添加 `马花疼` 这条数据时就不能添加成功。

* **唯一约束:关键字是  UNIQUE**

  保证列中所有数据各不相同。

  例如:id列中三条数据的值都是1,这样的数据在添加时是绝对不允许的。

* **主键约束: 关键字是  PRIMARY KEY**

  主键是一行数据的唯一标识,要求非空且唯一。一般我们都会给没张表添加一个主键列用来唯一标识数据。

  例如:上图表中id就可以作为主键,来标识每条数据。那么这样就要求数据中id的值不能重复,不能为null值。

* **检查约束: 关键字是  CHECK**

  保证列中的值满足某一条件。

  例如:我们可以给age列添加一个范围,最低年龄可以设置为1,最大年龄就可以设置为300,这样的数据才更合理些。

  > 注意:MySQL不支持检查约束。

  >

  > 这样是不是就没办法保证年龄在指定的范围内了?从数据库层面不能保证,以后可以在java代码中进行限制,一样也可以实现要求。

* **默认约束: 关键字是   DEFAULT**

  保存数据时,未指定值则采用默认值。

  例如:我们在给english列添加该约束,指定默认值是0,这样在添加数据时没有指定具体值时就会采用默认给定的0。

* **外键约束: 关键字是  FOREIGN KEY**

  外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。

  外键约束现在可能还不太好理解,后面我们会重点进行讲解。

【多表查询】

-- 左外连接。展示左边全部数据,右边匹配上展示,否则为null

SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;

-- 右外连接。展示右全部数据,左边匹配上展示,否则为null

SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;

【事务】

事务:

1、数据库的事务(Transaction)是一种机制、一个操作序列,包含了一组数据库操作命令。

2、事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败。

3、事务是一个不可分割的工作逻辑单元。

开启事务:BEGIN;

提交事务:commit;

回滚事务:rollback;

案例:

-- 开启事务

BEGIN;

-- 转账操作

-- 1. 查询李四账户金额是否大于500

-- 2. 李四账户 -500

UPDATE account set money = money - 500 where name = '李四';

出现异常了...  -- 此处不是注释,在整体执行时会出问题,后面的sql则不执行

-- 3. 张三账户 +500

UPDATE account set money = money + 500 where name = '张三';

-- 提交事务

COMMIT;

-- 回滚事务

ROLLBACK;

事务的四大特征

* 原子性(Atomicity): 事务是不可分割的最小操作单位,要么同时成功,要么同时失败

* 一致性(Consistency) :事务完成时,必须使所有的数据都保持一致状态

* 隔离性(Isolation) :多个事务之间,操作的可见性

* 持久性(Durability) :事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

查询默认提交方式

SELECT @@autocommit; 

查询到的结果是1 则表示自动提交,结果是0表示手动提交。当然也可以通过下面语句修改提交方式

set @@autocommit = 0;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值