mysql基础知识点回顾(精简,不包含存储过程等)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24499745/article/details/88652626

数据库的基础知识

数据分类
结构化数据
能够使用统一的结构表示的数据,如数字,字符等

半结构化数据
介于完全结构化和完全无结构化之间,如xml和html等

非机构化数据
长度可变,不能使用统一的结构表示的数据,如图像,音频
数据库的分类
关系型数据库:
使用二维表格存储结构化数据

非关系型数据库
存放半结构化和非结构化数据
三范式
# 第一范式
列不可拆分

# 第二范式
唯一标识,都和主键有关,每个表都只描述一件事情,间接依赖主键

# 第三范式
引用主键,除了主键以外的其他列,直接依赖该主键

mysql常用的命令

# 连接数据库
mysql -u用户名 -p密码 

# 连接远程数据库(-h后边写要连接的主机ip地址)
mysql -hip 地址 -u用户 -p密码

# 显示所有的数据库
show databases

# 使用某一个数据库
use 数据库名字

# 修改数据库的密码
在dos中:mysqladmin -u数据库名字 -p 密码  password 新密码
直接在mysql中: set password for用户名@localhost = password('新密码')

DCL 数据控制语言

# 创建用户:
create user '用户名'@'host' identified by '密码'
# 授权:
grant 权限(insert,delete,update,select,create | all)on 数据库名.数据表 to 用户名@‘host’
# 收回权限
revoke 权限 on 数据库名.数据表 from 用户名@‘host’

DDL 数据库的定义语言

对于数据库操作

# 创建数据库
create database 数据库名字 charset = utf8;
# 删除数据库
drop database
# 切换数据库
use 数据库名
# 查看当前选择的数据库	
select database()

对于表进行操作

# 查看表信息

# 查看当前数据库中所有的表
show tables

# 查看表结构
desc 表名

# 查看创建表的数据
show create table ‘表名’
#创建表

#创建表语法
create table 表名(
列名 类型(大小) 其他的,
列名 类型(大小) 其他的
)

# 创建表创建的修饰
NOT NULL 字段不能为空
AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
PRIMARY KEY关键字用于定义列为主键。 
修改表

修改表的名字
alter table 表名 rename 【to】 新表名
rename table 表名 to 新表名

添加表的字段
alter table 表名 add 列名 类型  位置(after 列 / first)
默认为最后

修改表的字段
alter table 表名 change 原列名  新列名 类型 位置(after列/first) 修饰

删除表列
alter table 表名 drop 列名
删除表

drop table 表名

清空表数据
delete table 表名
truncate table 表名

区别
delete 删除表数据,会将表中的数据清除,但是,自增编号的增值不会初始化
truncate 清除表数据,会将表中的数据清除,并且,自增编号也会初始化

DML 数据操作语言

增加数据

# 全列插入
insert into 表名 values(值1,值2,值3)
# 支持同时插入多条,在 values(值1,值2,值3),(值1,值2,值3)
# 缺省插入
insert into 表名 (列名1,列名2) values (值1,值2)
# 支持同时插入多条,在 values(值1,值2),(值1,值2)
# 表复制
insert into 表1(列1,列2) select 列1,列2 from 表2
#全列插入,如果有自动增长的列,就需要用0占位,要是用其他的数字占位,那自增从那个数字开始

修改数据

update 表名 set 列1 = 值1, 列2 = 值2 where 条件

删除数据

# 物理删除
delete from 表名 where 条件
# 逻辑删除
alter table 表名 add o、isdelete bit default 0;
update 表名 isdelete = 1 where 条件 
# 对于重要的函数,不希望物理删除,一旦删除,数据无法找回
# 所以,会设置一个isdelete的列,类型为 bit,表示逻辑删除

DQL 数据查询语言

了解基础语法(一)

select * from 表名 (固定)
where 条件(分组前过滤)
group by分组
having 条件(分组后过滤)
order by 字段   (排序)  默认是升序,然后可以降序,desc
limit  索引从哪开始,显示几条    分页显示
每页显示m条数据,当前显示第n页
limit (n-1)*m,m

# 查询语句的执行顺序
from 表名
where 
group  by
distinct
having
order by
limit

# 非空和不是空的字符串
is not null
!= ‘’

# 通过区间查询
between  从哪开始  and  结束

了解基础语法(二)

# 起别名
在表或者字段的后边 直接写或者 as 别名

# 去重复
在要去重复的字段名前边加  distinct
distinct只能放在最前边,要是多个字段,意味着多个字段同时去重复
就是说查询去除多个字段同时重复的数据

了解基础语法(模糊查询)

like  '过滤语句'
%代表着匹配0到多个字符
_代表匹配任意一个字符

了解基础语法(正则表达式)

mysql中的正则表达式是在where 的后边写  regexp 表达式
匹配每个字符串
^ 匹配输入字符串的开始位置
$ 匹配字符串的结束位置
. 匹配除 /n之外的任何单个字符
[。。。] 匹配所包含的的任意一个字符。
[^...] 匹配未包含里边的任意一个字符
| 或者的意思,匹配 |前边的后者 | 后边的字符
匹配次数
* 匹配前边的表达式 0次或者多次
+ 匹配前边的表达式1次或者多次
{n} n是一个非负整数。精确匹配n次
{n,m} 最少匹配n次,最多匹配m次

查询中常用函数

单行函数

# 数学函数

rand()#  随机数 ,从0,1之间
round(m,n)# 对于m,从小数点的后n位开始四舍五入,默认是直接取整数
abs() # 绝对值
ceil() # 向上取整
floor()# 向下 取整
truncate(m,n) # 将m中,小数点的后n位截掉,不要了
# 字符函数

concat(st1,st2,。。。) #将字符串连接
length() # 获取字符串长度
substr(str,pos,len)  #截取字符串str,从pos开始,位置1开始,len表示长度
replace(str,old,,new)# 表示在str中搜索old,用new来代替
# 日期函数

now()/sysdate()# 获取当前时间,年月日,时分秒
date_format( d,f)# 按照表达式f的要求,格式化日期d
datediff(d1,d2) # 计算日期d1 到d2之间的相隔的天数
day(date) # 获取天
month(date)# 获取月
year(date)# 获取年
date_add(时间,interval expr  type) # 函数向日期添加指定的时间间隔。
		date # 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔。
		type,可以是年月日,时分秒,周等
ADDDATE # 与date_add一模一样

聚合函数

avg()  平均值
sum()获取总数
max()获取最大值
min() 获取最小值
count() 统计数目

分组函数

group by 字段名  having 分组后过滤条件

加密函数

# 将内容转化为32位的十六进制的编码
md5(‘root’) 

# 将内容转化为40位的十六进制编码
SHA('root')

# 将内容转化为41位的十六进制编码
PASSWORD(‘root’)

# 将内容转化为16位十六进制的编码
old_password(‘root’)

# 以上都是不可逆的

# 可逆的 
encode(‘root’) 加密
decode(‘root’) 解密

高级查询

多表查询

# 笛卡尔积
俩张表的查询的结果为记录数的乘积
# 内连接查询(三种)

where子句
用多张表的关联键相等的方式
多个关联条件用and连接
多张表,号相隔

inner join  on
innner join连接表,on连接条件
也是多张表连接相等的方式

inner join using
inner join 连接表  using()直接写相同的关连键
# 自然连接
在from 表的后边加  natural join 另一张表
会自动去找相同的关键键
会去掉重复列
# 外链接

左连接
left join 表 on 条件关连键相等
会以左边的表的数据为主

右连接
right join 表 on 条件 关联键相等
会以右边的表的数据为主

子查询

即嵌套查询,将一个查询结果作为另一个查询条件或者组成部门的查询

多行子查询的时候,子查询中返回多个行,这个时候,可以用 any或者all来修饰
	* any就是任意一个
	* all 就是所有

in  和 exists
in适合A表的数据比B表多的情况
in是先将子查询中的数据检索出来放置在缓冲区,然后查询主查询,找到每一个和子查询中的数据对比
exists 适合 B表比A表多的情况
exists是先将主查询的数据检索,每检索一条都在子查询中找看有没有,有就返回True,就将当前这一条数据放置在结果集中

集合查询

union 
union all
就是将多个结果集合并在一起显示
	* 要求结果集的查询字段的数量和类型一致
	* 最好名字也用别名设置为一致的
union是过滤重复的
union all是全部显示

完整性约束(完整性约束即数据的准确性)

实体完整性,针对于行

# 主键约束(保证记录是唯一的,不重复的)
	* 创建表的时候添加
		* 列名 类型 primary key
		* primary key(列名)
	* 修改表的时候添加约束
		* alter table 表名 add constraint 约束名(一般以pk_开头) parimary key(列名)
# 唯一约束(保证记录是唯一的)
	* 创建表的时候添加
		* 列名 类型 unique
		* unique(列名)
	* 修改表结构的时候添加唯一约束
		* alter table 表名 add constraint 约束名(一般以un_开头) unique(列名)
# 主键自增
# 在创建表的时候添加
auto_increment

域完整性,保证列的数据正确性

非空约束
在创建表的时候:列名 类型 not null
默认值约束
在创建表的时候,在字段名的类型后边跟着写  default ‘值’

域完整性,保证引用关系的正确性

在创建表的时候添加
foreign key(列名) references 被引用的表(被引用表中的引用列)

在修改表的时候添加
alter table 表名 add constraint 约束名(一般fk_开头) foreign key(列名) references 被引用的表(被引用表中的引用列)

删除约束

alter table 表名 drop primary key   # 删除主键约束
alter table  表名 drop foreign key 约束名    # 删除外建约束
alter table  表名 drop index 约束名   # 删除唯一约束

事务

什么是事务
事务用于保证数据的一致性,由一组DML操作组成,该组sql语句要么同时成功,要是同时失败
事务的ACID特性
A 原子性:事务是原子工作单元,要么同时执行,要么同时不执行
简单的讲: 就是将一组DML语句当做了一个不可再次分隔的原子,一个整体
C 一致性: 符合约束规则,执行之前的整体状态和执行后的数据一致
I  隔离性,并发事务之间相互不影响
行级锁的概念,就和死锁一样,要是俩个窗口同时对于一个资源修改,在一个未提交之前,另一个处于等待状态,超出等待延时,就会报错
D 持久性,事务完成之后,对数据库的影响是永久的
事务的定义
# 开始事务
set Autocommit = 0
设置自动提交关闭状态
start TRANSACTION
begin
savepoint a
设置保存点,回滚未提交事务的时候,可以选择回滚到这个地方
rollback to a
事务回滚到保存点的位置
commit
提交事务,,提交事务所有的保存点全部失效
rollback
回滚所有没有提交的sql

猜你喜欢

转载自blog.csdn.net/qq_24499745/article/details/88652626
今日推荐