mysql
2020-06-22 10:29:36 2 举报
AI智能生成
登录查看完整内容
mysql个人总结
作者其他创作
大纲/内容
mysql
DDL对数据库和表的操作
对数据库的操作
增加
创建数据库:create database 数据库名;
删除
删除数据库:drop database 数据库名;
修改
修改数据库的字符集:alter database 数据库名 character set utf8;
查看
使用数据库: use 数据库名;
当前正在使用的数据库:select database();
查看数据库的定义结构:show create database 数据名;
查看所有的数据库:show databases;
对表的操作
增加一列:alter table 表 add 字段 类型 约束;
添加索引:create index 索引名 on 表名(列,列,列);
删除一列: alter table 表名 drop 列名;
删除表: drop table 表名;
删除表:drop table if exists 表名;
删除索引:alter table 表名 drop index 索引名
修改表名: rename table 旧表名 to 新表名;
修改列的类型约束:alter table 表 modify 字段 类型 约束;
修改列的名:alter table 表 change 旧列 新列 类型 约束;
查看表:
查看数据库有哪些表:show tables;
查看表结构:desc 表名
查看表的创建结构:show create table 表名
MySql常见的类型
数值类型
tinyint---byte
smallint----shrot
int----int
bigint----long
float----float
double----double
bool,boolean---boolean
字符串类型
char(固定长度)/varchar----String
文本
text
longtext
时间日期
date
datetime
TimeStamp
char和varchar的区别
约束
主键约束primary key
非空(not null)+唯一(uinque) auto_increment主键自增
唯一约束
非空约束
非空(not null)列不能有null值
DML对表的数据增删改
对表数据的增删改
insert into 表名 values(值,值,值);
insert into 表(列,列..) values(值,值..)
delete from 表 [where 条件]
delete和truncate的区别
truncate 删除是把表直接drop掉,然后再创建一个同样的新表。删除的数据不能找回。执行速 度比delete快
注意事项
DQL对表数据查询操作
对表数据查询操作
查询所有的列的记
select * form 表
查询某张表特定列的记
去重查询
select distinct price from 表名
别名查询
条件查询
区间查询
select ... from 表 where 列 between...and...
模糊查询
select ... from 表 where 列 like '张_' --查询姓张的用户 并且名字是两个的字的
多条件查询
select ... from 表 where 条件1 and 条件2 and 条件3
任意条件查询
select ... from 表 where 条件1 or 条件2 or 条件3
排序查询
单列排序
组合排序
select 字段名 from 表名 [where 条件] order by 字段名 [asc|desc]; //asc: 升序,默认 值; desc: 降序
分组查询
语法
分组的目的就是为了统计,一般分组会跟聚合函数一起使用
聚合函数
语法
select 聚合函数(列) from 表名;
函数
max() 最大值
min() 最小值
sum() 求和
avg() 平均值
count() 统计数量
分页查询
a起始行数,从0开始计数,如果省略,默认就是0; a=(当前页码-1)*b;
b: 返回的行数
分页算法
where字句和having字句的区别
对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据, 即先过滤再分组。where后面不可以使用聚合函数
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤having后面可以使用聚合函数
条件查询小结
select...from...where...
select...from...where...order by...
select...from...where...limit...
select...from...where...order by...limit...
select...from...where...group by...order by...limit
多表的关系
一对多
在多的一方添加外键,指向少的一方的主键
多对多
新建一张中间表,至少包含两个列,都作为外键,分别指向各自的主键
一对一
一张表建立唯一约束,并作为外键指向另一张表的主键
一张表就可以体现一对一的关系
外键
alter table 表名 add foreign key(列) references 表名 (列)
作用
外键的这个列的类型必须和参照列的类型一致 参照列必须是主键
多表查询
连接查询
内连接
隐式内连接
显示内连接
select ... from 表名1 join 表名2 on 表名1.列 = 表名2.列
外连接
左外连接
select ... from 表名1 left join 表名2 on 表名1.列 = 表名2.列
右外连接
select ... from 表名1 right join 表名2 on 表名1.列 = 表名2.列
内连接和外连接的区别
子查询
单行单列
select ... from ... where 列 = (子查询)
单行多列
select ... from ... where 列 in (子查询)
多行多列(虚表,加别名)
select ... from (子查询) as 别名
DCL
对数据库的权限进行分配
事务
概念
逻辑上的一组操作,组成这组操作的单元要么全部成功,要么全部失败
保证一组操作全部成功或者失败
事务管理
mysql默认开启事务
一条sql语句就是一个事务
手动开启事务
方式一
rollback;回滚
commit;提交
start transaction;开启事务
方式二
回滚点
在某些成功的操作完成之后,后续的操作有可能成功有可能失败,但是不管成功还是失败,前面操作 都已经成功,可以在当前成功的位置设置一个回滚点。可以供后续失败操作返回到该位置,而不是返回 所有操作,这个点称之为回滚点。
回滚点的操作语句
设置回滚点:savepoint 名字
回到回滚点:rollback to 名字
总结
设置回滚点可以让我们在失败的时候回到回滚点,而不是回到事务开启的时候
应用场景
事务的特性
原子性A
事务是一组不可分割的工作单位,事务中的操作要么全部成功,要么全部失败
一致性C
事务前后的数据的完整性必须保持一致
隔离性I
多个并发事务之间数据要相互隔离,不会相互影响,事务之间互不干扰
持久性D
一旦事务提交之后,对数据库的数据改变是永久性的,接下来即使数据库发生故障,也不会受影响
事务的隔离级别
不考虑隔离级别会现3中情况
脏读
一个事务读取另一个事务未提交的数据
不可重复读
在一个事务中多次读取数据内容不一致,而我们要求读取的结果一致。一般由update更新导致的
幻读
在一个事务中多次读取数据的数量不相同,而我们要求读取的数量相同。insert和delete导致的
隔离级别
读未提交 read uncommitted
会出现脏读、不可重复读和幻读
设置隔离级别读已提交解决脏读、但不能解决不可重复读和幻读
读已提交 read committed
会出现不可重复读和幻读
设置隔离级别为可重复读解决可重复读,但不能解决幻读
可重复读
repeatable read
会出现幻读
设置隔离级别为串行化解决幻读
串行化
类似单线程操作,其他事务挂起
备份和还原
备份
备份数据库
mysqldump -u root - p 密码 数据库名 >路径
备份表
mysqldump - u root - p 密码 数据库名 表名 >路径
还原
登录数据库 mysql -u root - p 密码source 文件路径
开启binlog日志
常见函数
upper(str)
lower(str)
trim(str) 移除两侧空格
substr()
current_date()
current_time()
now()
#随机函数select rand()
#向下取整select floor(3.14)
#向上取整select ceil(3.1)
0 条评论
回复 删除
下一页