MySQL

数据库概念

数据库是“按照数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。

数据库分类

网状结构数据库:美国通用电气公司IDS(Integrated Data Store),以节点形式存储和访问。

层次结构数据库:IBM公司IMS(Information Management System)定向有序的树状结构实现存储和访问。

关系结构数据库:Oracle、DB2、MySQL、SQL Server,MariaDB以表格(Table)存储,多表间建立关联关系,通过分类、合并、连接、选取等运算实现访问。

非关系型数据库:ElastecSearch、MongoDB、Redis,多数使用哈希表,表中以键值(key-value)的方式实现特定的键和一个指针指向的特定数据。

常见的数据库管理系统

Oracle,DB2,SQL Server,SQLLite,MySQL,MariaDB

MySQL下载与安装

官方网站 MySQL

一直next不需要任何操作

安装完成,finish

配置环境变量

系统属性,环境变量,系统变量找到path,编辑,添加,C:\Program Files\MySQL\MySQL Server 8.0\bin 完成,退出即可

客户端登陆:mysql -u root -p

SQL语言

约束

主键约束(primary key)

外键约束(foreign key)

自增约束(auto_increment)

唯一约束(unique)

非空约束(not null)

默认值(default)

DDL

数据库操作(熟悉即可)

SHOW DATABASES; #显示当前MySQL中包含的所有数据库

CREATE DATABASE mydb1; #创建mydb数据库

CREATE DATABASE mydb2 CHARACTER SET gbk; #创建数据库并设置编码格式为gbk

CREATE DATABASE IF NOT EXISTS mydb4; #如果mydb4数据库不存在,则创建;如果存在,则不创建。

SHOW CREATE DATABASE mydb2; #查看创建数据库时的基本信息

ALTER DATABASE mydb2 CHARACTER SET gbk; #修改数据库的字符集

DROP DATABASE mydb1; #删除数据库mydb1

select database(); #查看当前使用的数据库

USE mydb1; #使用mydb1数据库

数据表操作(熟悉即可)

show tables;-- 在mydb1中展示一下所有表

创建表(重要)

CREATE TABLE 表名(

列名 数据类型(长度) [约束],

列名 数据类型(长度) [约束],

....

列名 数据类型 [约束] //最后一列的末尾不加逗号

);

desc stu;查看表结构

ALTER TABLE subject ADD gradeId int;#在课程表基础上添加gradeId 列

ALTER TABLE subject DROP gradeId;#删除课程表中 gradeId 列

ALTER TABLE subject CHANGE subjectHours classHours int ;#修改课程表中 subjectHours 列为 classHours

ALTER TABLE subject rename sub;#修改课程表的subject 为 sub

DROP TABLE sub;#删除学生表

DML

插入

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

insert into 表名 values (值1,值2,...);

更新/修改

update 表名 set 字段 = 新值 [, 字段2 = 新值2, ... ] [where 字段 = 值];

删除

delete from 表名 where 字段 = 值; -- 只删除符合条件的数据

DQL

单表查询

基本查询

select 字段1,字段2,... from 表名;

条件查询

select 字段1,字段2,... from 表名 where 字段 条件 值;

模糊查询

select 字段1,字段2,... from 表名 where 字段 like '_值%';

排序查询

select 字段1,字段2,... from 表名 order by 字段 [desc|asc];

聚合查询

count(expr) max(expr) min(expr) avg(expr) sum(expr)

去重查询

select count(distinct age) from stu;

分组查询

select 字段1,字段2,... from 表名 [where 字段 条件 值] group by 字段 having 字段 条件值;

多表联查

内连接

select 字段列表 from 表1 inner join 表2 on 表1.字段 = 表2.字段

外连接

select 字段列表 from 表1 left|right outer join 表2 on 表1.字段 = 表2.字段

子查询

将sql语句当表,写在from后面

将sql语句当条件,写在where后面

函数

字符串函数

函数

解释

CONCAT (string2 [,... ])

连接字串

LENGTH (string )

string长度

REPLACE (str ,search_str ,replace_str )

在str中用replace_str替换search_str

SUBSTRING (str , position [,length ])

从str的position开始,取length个字符

LTRIM (string2 ) RTRIM (string2 ) trim

去除前端空格或后端空格

数学函数

CEILING (number2 )

向上取整

FLOOR (number2 )

向下取整

FORMAT (number,decimal_places )

保留小数位数,格式化format(x,y),对x保留y位小数,会四舍五入

RAND([seed])

RAND([seed]),seed是种子,可不写.写了随机数固定

ROUND(x,[d])

将x四舍五入,d是保留的位数,可不写

TRUNCATE(X,D)

截取

日期函数

函数

解释

SYSDATE()

当前时间

CURRENT_DATE ( )

当前日期

CURRENT_TIME ( )

当前时间

CURRENT_TIMESTAMP ( )

当前时间戳

DATE (datetime )

返回datetime的日期部分

DATEDIFF (date1 ,date2 )

两个日期差

NOW ( )

当前时间

YEAR|MONTH|DATE (datetime )

年月日

日期字符串转换函数

函数

解释

说明

date_format(日期,模板)(8版本已经移除)

日期 --> 字符串

格式化

str_to_date(字符串,模板)

字符串 --> 日期

解析

流程函数

函数

解释

IF(expr1,expr2,expr3)

如果expr1为真,则返回expr2,否则返回expr3,相对于是三目运算

IFNULL(expr1,expr2)

如果 expr1不是NULL,则返回expr1,否则返回expr2; 一般用来替换NULL值,因为NULL值是不能参加运算的

CASE WHEN [expr1] THEN [result1]… ELSE [default] END

如果expr是真, 返回result1,否则返回default

事务

事务的概念

事务是一个原子操作。是一个最小执行单元。可以由一个或多个SQL语句组成,在同一个事务当中,所有的SQL语句都成功执行时,整个事务成功,有一个SQL语句执行失败,整个事务都执行失败。

事务的操作

开启事务 start transaction 或者 begin

提交事务 commit

回滚事务 rollback

事务的特性(ACID)

原子性

(Atomicity):指事务的整个操作是一个整体,要么都成功,要么都失败

一致性

(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态。转账前和转账后的总金额不变。

隔离性

(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一 个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

持久性

(Durability):指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。回滚不了的

事务的隔离级别

读未提交

-READ UNCOMMITTED: 赃读、不可重复读、虚读都有可能发生。

读已提交

-READ COMMITTED: 避免赃读。不可重复读、虚读都有可能发生。

(oracle 默认的)

可重复读-

REPEATABLE READ:避免赃读、不可重复读。虚读有可能发生。

(mysql 默认),行锁

串行化-

SERIALIZABLE: 避免赃读、不可重复读、虚读。

串行化,其实是表锁

隔离级别产生的问题

赃读:指一个事务读取了另一个事务未提交的数据。

不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同。一个事务读取到了另一个事务提交后的数据。(update)

虚读(幻读):是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。 (insert)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值