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 级别名称

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

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值