Java学习Day27:Mysql第一章:陨落的天才

陨落天才之猛猛奋起!

1. MySQL 基本指令

显示数据库

show datadases;

创建数据库

create database 数据库名;

选择数据库

ues 数据库名:

查看数据库中存在的表

show tables; #要求前面有use语句

创建表

create table 表名(字段名1 数据类型,字段名2 数据类型...); #要求前面有use语句

查看某表中的数据

select * from 表名;

查看数据库的创建信息

show create database 数据库名;

查看表的创建信息

show create table 表名;

向表中插入数据

insert into 表名 values(字段名1,字段名2...)

若插入字符串、日期时间类型的变量,则需使用 ' ' 表示

2. SQL 分类

SQL 语言在功能上主要分为 3 大类:

2.1 DDL(数据定义语言)

这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。 主要的语句关键字包括CREATE 、 DROP 、 ALTER等。

2.2 DML(数据操作语言)

用于添加、删除、更新和查询数据库记录,并检查数据完整性。 主要的语句关键字包括 INSERT 、 DELETE 、 UPDATE 、 SELECT 等。

2.3 DCL(数据控制语言)

用于定义数据库、表、字段、用户的访问权限安全级别 。 主要的语句关键字包括 GRANT 、 REVOKE 、 COMMIT 、 ROLLBACK 、 SAVEPOINT等。

2.4 DQL(数据控制语言)

1.order

select * from 表名 orderbye 列名 ASC / DESC;

单例排序------只按照某一个字段排序

select 字段名 from 表名 [where 字段 = 值 ] order by 字段名[ ASC / DESC]

组合排序------同时对多个字段排序

如果第一个字段相同就按照第二个字段 以此类推

select 字段名 from 表名 [where 字段 = 值 ] order by 字段名1[ ASC / DESC] , 字段名2[ ASC / DESC] ;

SELECT ename FROM emp WHERE salary IS NOT NULL AND ename IS NOT NULL ORDER BY salary DESC;

对工资降序其次id 升序进行排序 SELECT * FROM emp ORDER BY salary DESC, eid ASC

2 聚合函数

聚合函数查询是纵 向查询,它是对某一列的值进行计算,然后返回一个单一的值(另外聚合函数会忽略null空值。);

SELECT 聚合函数(字段名) FROM 表名;

SELECT SUM(salary) AS '总薪水', MIN(salary) AS '最少', MAX(salary) AS '最多' FROM emp;

3 分组------GROUP BY

分组查询指的是使用 GROUP BY 语句,对查询的信息进行分组,相同数据作为一组

select 分组字段/聚合函数 from 表名 group by 分组字段 [having 条件]

注意:单独的分组是没有意义的,一般与聚合函数搭配使用

例如查询 通过性别分组列出平均薪资

SELECT sex,AVG(salary) FROM emp GROUP BY sex;

#1.查询每个部门有多少个员工

SELECT depa_name,COUNT(depa_name) FROM emp GROUP BY depa_name;

#2.查询每个部门的平均薪资

SELECT depa_name,AVG(salary) FROM emp GROUP BY depa_name

#3.查询每个部门的平均薪资, 部门名称不能为null

SELECT depa_name,AVG(salary) FROM emp GROUP BY depa_name HAVING depa_name IS NOT NULL;

查询平均薪资大于6000的部门

SELECT depa_name FROM emp WHERE depa_name IS NOT NULL GROUP BY depa_name HAVING AVG(salary)>6000

SELECT dept_name,AVG(salary) FROM emp WHERE dept_name IS NOT NULL AND dept_name!='' GROUP BY dept_name;

where 与 having的区别
  1. where
    1. where 进行分组前的过滤
    2. where 后面不能写 聚合函数
  2. having
    1. having 是分组后的过滤
    2. having 后面可以写 聚合函数

4. SQL 语言的规则与规范

3.1 基本规则

① SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进

② 每条命令以 ; 或**\g** 或 \G结束

③ 关键字不能被缩写也不能分行

④ 关于标点符号:(1) 必须保证所有的()、单引号、双引号是成对结束的

(2) 必须使用英文状态下的半角输入方式

(3) 字符串型日期时间类型的数据可以使用单引号(' ')表示

(4) 列的别名,尽量使用双引号(" "),而且不建议省略as

3.2 大小写规范(推荐)
数据库名、表名、表别名、字段名、字段别名等都小写;

SQL 关键字函数名绑定变量等都大写。

3.3 注释

单行注释:**#**注释文字(MySQL特有的方式)

单行注释:-- 注释文字(--后面必须包含一个空格)

多行注释:/* 注释文字 */

4 SQL约束

约束的作用

对表中的数据进行进一步限制,从而保证数据的正确性,有效性,完整性。违反约束的不正确数据,将无法插入到表中

常见的约束
  1. 主键 ------ primary key
  2. 唯一 ------ unique
  3. 非空 ------ not null
  4. 外键 ------ foreign key

各种约束

1主键约束

特点------ 不可重复 唯一 非空

作用------用来表示数据中的每一条记录

语法格式

字段名 字段类型 primary key

方式1 在创建表中,创建字段时设置主键

CREATE TABLE 表名(

字段名1 数据类型 ,

字段名2 数据类型 PRIMARY KEY

字段名2 数据类型

);

方式2 在创建表中,创建所有字段后设置主键

CREATE TABLE 表名(

字段名1 数据类型 ,

字段名2 数据类型 ,

字段名2 数据类型 ,

PRIMARY KEY(字段名2)

);

方式3 通过DDL语句进行设置

alter table 表名 add primary key(字段名)

#在创建表中,创建字段时设置主键

CREATE TABLE test( tid INT PRIMARY KEY, tname VARCHAR(20), TDATE DATE )

#在创建表中,创建所有字段后设置主键

CREATE TABLE test( tid INT, tname VARCHAR(20), tdate DATE, PRIMARY KEY(tid) )

#通过DDL语句进行设置

CREATE TABLE test( tid INT, tname VARCHAR(20), tdate DATE ) ALTER TABLE test ADD

PRIMARY KEY(tid);

测试主键唯一性

INSERT INTO test VALUES(1,'jack','2005-8-9');

测试主键非空性

INSERT INTO test(tname,tdate) VALUES('jack','2005-8-9'); INSERT INTO test

VALUES(NULL,'jack','2005-8-9');

删除主键约束(了解)

alter table 表名 drop primary key

主键自增------auto_increment 字段类型必须是 整数类型

数据库自动生成主键字段的值.

CREATE TABLE test( tid INT PRIMARY KEY AUTO_INCREMENT, tname VARCHAR(20), tdate DATE ) INSERT INTO test(tname,tdate) VALUES('jack','2000-2-2') INSERT INTO test VALUES(NULL,'tom','2003-5-6')

注意:主键自增只能在创建表时设置

修改主键自增的起始值

默认情况下 起始值为1,可以进行设置

CREATE TABLE test( tid INT PRIMARY KEY AUTO_INCREMENT, tname VARCHAR(20), tdate DATE )AUTO_INCREMENT=100; INSERT INTO test(tname,tdate) VALUES('jack','2000-2-2'); INSERT INTO test VALUES(NULL,'tom','2003-5-6'); SELECT * FROM test;

delete 和 truncate 对自增的影响

delete 只是删除表中的数据,对自增没有任何影响

truncate 是将整个表删除,然后重新创建,重新从起始值开始

2非空约束

特点: 某一列不可为空

字段名 字段类型 not null

添加方式:在创建表中,创建字段时设置主键

3唯一约束

特点:表中的某一列值不能有重复值

字段名 字段类型 unique

添加方式:在创建表中,创建字段时设置主键

主键约束与唯一约束的区别:

  1. 主键约束 唯一且不能够为空
  2. 唯一约束,唯一 但是可以为空
  3. 一个表中只能有一个主键 , 但是可以有多个唯一约束
4外键约束
5默认值

用来指定某列的默认值

字段名 字段类型 default 默认值

#将日期设置为默认值 2001-1-1 CREATE TABLE test( tid INT, tname VARCHAR(20), tdate DATE DEFAULT '2001-1-1' ) # 不添加日期,观察默认值 INSERT INTO test(tid,tname) VALUES(1,'jack'); #将日期添加为null INSERT INTO test VALUES(1,'jack',NULL); # 添加日期,观察 INSERT INTO test VALUES(1,'jack','2008-12-26'); SELECT * FROM test;

5数据库事务

5.1事务的概述

事务

事务是一个整体,由一条或者多条SQL 语句组成,这些SQL语句要么都执行成功,要么都执行失败, 只要有一条SQL出现异常,整个操作就会回滚,整个业务执行失败

回滚

即在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成 的操作全部撤销,滚回到事务开始时的状态。(在提交之前执行)

MYSQL 中可以有两种方式进行事务的操作:

  1. 查看提交事务的状态: SHOW VARIABLES LIKE 'autocommit'
  2. 手动提交事务 set @@autocommit = on (默认)/off
  3. 自动提交事务

5.2 事务的基本操作

  1. start transaction / begin ------开始一个事务
  2. savepoint 保存点名------设置保存点
  3. rollback to 保存点名------回滚事务
  4. rollback ------回滚全部事务
  5. commit------提交事务,所有的操作生效,无法在回滚

5.3 事务的四大特性

  1. 原子性: 事务是一个不可拆分的整体,要么全部成功要么全部失败
  2. 一致性: 数据的状态,在执行前后保持一致
  3. 隔离性:事务与事务之间互不影响,执行保持隔离状态
  4. 持久性:执行成功,对数据库的修改是永久性的
  5. 事务机制需要 innodb的存储引擎, myisam不太兼容

5.4事务隔离级别(了解)

5.4.1数据库并发访问

一个数据库被多个客户端并发访问,相同的数据被多个事务同时访问,若没有隔离措施,会导致各种问题

5.4.2产生的问题

脏读: 一个事务读取到另一个事务尚未提交的数据

不可重复读:同一个事务多次读取同一条数据时,数据不一致

幻读: 一个事务内,多次查询同一数据时,数据量不一致

5.4.3四种隔离级别

查看隔离级别 select @@tx_isolation;

修改隔离级别:set global transaction isolation level 级别名称

修改完成后需要重新启动数据库

相关推荐
_r0bin_27 分钟前
前端面试准备-7
开发语言·前端·javascript·fetch·跨域·class
zhang988000028 分钟前
JavaScript 核心原理深度解析-不停留于表面的VUE等的使用!
开发语言·javascript·vue.js
计信金边罗1 小时前
是否存在路径(FIFOBB算法)
算法·蓝桥杯·图论
MZWeiei1 小时前
KMP 算法中 next 数组的构建函数 get_next
算法·kmp
硅的褶皱2 小时前
对比分析LinkedBlockingQueue和SynchronousQueue
java·并发编程
MoFe12 小时前
【.net core】天地图坐标转换为高德地图坐标(WGS84 坐标转 GCJ02 坐标)
java·前端·.netcore
潘yi.2 小时前
NoSQL之Redis配置与优化
数据库·redis·nosql
zdkdchao2 小时前
hbase资源和数据权限控制
大数据·数据库·hbase
伤不起bb2 小时前
NoSQL 之 Redis 配置与优化
linux·运维·数据库·redis·nosql
leo__5202 小时前
PostgreSQL配置文件修改及启用方法
数据库·postgresql