MySQL(1)


前言

MySQL是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。MySQL作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O操作。如果反复频繁的访问数据库,(1)会在反复链接数据库上花费大量时间,从而导致运行效率过慢;(2)反复的访问数据库也会导致数据库的负载过高

MySQL(1)

准备阶段

开启(关闭)MySQL服务器

#linux下
service mysql start
service mysql stop
#windows下
net start mysql
net stop mysql

登录

mysql -u username -p #本地登录
mysql -u username -p -P 端口号(默认:3306)#指定端口登录
mysql -h ip地址 -u username -p -P 端口号 #指定IP地址和端口号

SQL基础语句

SQL语句分为四类,分别是:

1、DDL(Data Definition Language),数据定义语言,对数据库和表的结构操作

2、DML(Data Manipulation Language),数据操作语言,对数据的增、删、改

3、DQL(Data Query Language),数据查询语言(重难点

4、DCL(Data Control Language),数据控制语言,对用户的创建及授权

DDL

1、对数据库的操作

show databases; #查看所有数据库
use <数据库名>; #切换(选择)数据库
create database [if not exists] <数据库名> [charset = utf8]; #创建数据库,安装时默认选了编码方式
drop database [if exists] <数据库名>; # 删除
alter database <数据库名> character set utf8; #修改数据库编码

2、对表的操作

create table [if not exists] <表名>(
	<列名> <列类型>,
    ...
    <列名> <列类型>
);  # 创建表
show tables; #查看表
desc <表名>; #查看表结构
drop table <表名>; #删除表
alter table <表名> add( ); #添加列
alter table <表名> modify <列名> <列类型>; #修改列类型
alter table <表名> change <原列名> <新列名> <列类型>; #修改列名
alter table <表名> drop <列名>; #删除列
alter table <原表名> rename to <新表名>; #修改表名称

DML

insert into <表名>(1,2,...) values(1,2,...); # 插入数据,列-值一一对应,没有插入的列值默认为NULL
insert into <表名> values(1,2,...); #表示插入所有列
update <表名> set <1>=<1>,<2>=<2>,...[where <条件>] # 修改数据
delete from <表名> [where <条件>]; # 删除数据,注意:不加where会删除所有数据
truncate table <表名>; #先删除该表(drop table <表名>),再创建该表(create table <表名>),无法回滚

DQL

1、字段(列)控制

select * from <表名>; # *表示查询所有列
select <1>,<2>, ... from <表名>; #查询指定列
select distinct * <1>,<2>, ... from <表名>; #不显示重复行
select <>*<> from <表名>; #对<列>所有值乘<值>,数据类型的列可加减乘除
select concat( <1>,<2>) from <表名>; #字符串类型可做连续运算(拼接)
select ifnull(<>,0) + <> from <表名>; #如果列中存在NULL值,那么当成0来运算
select <> as <列别名> from <表名>; #给列起别名,as可省略

2、条件控制

(1)条件查询

select <1>,<2>, ... from <表名> where <条件>;# 若where子句中包含了>=3个条件,且使用了and和or操作符,就需要用圆括号来明确意图

(2)模糊查询

select * from <表名> where <列名> like '___'; #通配符:下划线匹配一个字符,‘%’匹配[0,N]个任意字符

(3)条件类型

相等条件:=

不等条件:!=、<>

范围条件:<,<=,>,>=,between,in

:使用字符串范围时,需要知道所使用的字符集中各字符的次序(字符集内各字符的次序被称为排序顺序,即比较大小的先后次序)。

(4)正则表达式构造搜索表达式

将关键字like换为regexp,它告诉mysql后面为正则表达式。

注意like和regexp之间的一个重要差别:like需要列置完全匹配,如果被匹配的文本只是在列值中出现,并不会返回相应的行。而regexp则只要被匹配的文本在列值中出现了,就会返回相应的行。

在这里插入图片描述

mysql只支持正则表达式实现的一个很小的子集,并不是全部。

常用正则表达式:

'.xxx'   #匹配任意一个字符
'|'   #匹配其中之一
'[123]'  #[]定义or语句查找什么,匹配123中任意一个
'[1-5]'  #匹配1-5中任意一个
#匹配特殊字符时,字符要以\\为前导
#定位元字符:^(文本的开始),$(文本的结尾),[[:<:]](词的开始),[[:>:]](词的结尾)

3、排序

select * from <表名> order by <> ASC; #按<列>升序
select * from <表名> order by <> DESC; #按<列>降序
select * from <表名> order by <1>(ASC/DESC),<2>(ASC/DESC),...;

4、聚合函数

(1)count

select count(*) from <表名>; #计算表中所有列都不为NULL的记录的行数
select count(<>) from <表名>; #计算表中该列不为NULL的记录的行数

(2)max/min

select max(<>) from <表名>; #列中最大值
select min(<>) from <表名>; #列中最小值

(3)sum/avg

select sum(<>) from <表名>; #列中元素之和
select avg(<>) from <表名>; #列中元素之平均值

5、分组查询

把记录使用某一列进行分组,然后查询组信息。

select <> <组信息> from <表名> group by <>;
select <> <组信息> from <表名> where <条件> group by <>; #分组前条件
select <> <组信息> from <表名> group by <> having <条件>; #分组后条件

6、limit子句(mysql特有)

用于限定查询结果的起始行,以及总行数。

select * from <表名> limit 4,3; #查询起始行为第5行,一共查询3行记录
# 10条记录/页,查询第3页
select * from <表名> limit 20,10;

DCL

一般情况下,一个项目创建一个用户,一个项目对应的数据库只有一个。

1、创建用户

create user username@ipaddress identified by 'password'; #用户只能在指定的IP地址上登录
create user username@'%' identified by 'password'; #用户可以在任意IP地址上访问

2、给用户授权/撤销授权

grant <权限1>,<权限2>,... on <数据库名> to username@ipaddress;revoke <权限1>,<权限2>,... on <数据库名> from username@ipaddress;#权限包括create、select等,使用all表示所有权限 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值