Mysql简述

Mysql(mysql是最流行的关系型数据库管理系统,在web应用方面mysql是最好的应用软件之一)

首先,到底什么是数据库DBM?数据库是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助
于集合代数等数学概念和方法来处理数据库中的数据,RDBMS即关系数据库管理系,其特点有:
1.数据以表格的形式出现
2.每行为各种记录名称
3.每列为记录名称所对应的数据域
4.许多的行和列组成一张表单
5.若干的表单组成database

一、mysql 启动与停止

在终端中输入net start mysql启动mysql;输入net stop mysql停止mysql

二、mysql 的登陆与退出

登陆:mysql -uroot -p 或 -h主机名 -p端口号 -u用户名 -p密码
退出:quit/exit

三、常见命令

1,查看当前所有的数据库

show databases

2,打开指定的库

use 库名

3,查看当前的所有表

show tables

4,查看其他库的所有表

show tables from 库名;

5,创建表

create table 表名(列名 列类型,列名 列类型,...

6,查看表结构

desc 表名

7,查看服务器的版本
方式一:登录到mysql服务器
select version()
方式二:没有登录到mysql服务器
mysqld --version 或 mysql --V
注:
mysql不区分大小写;每条命令用分号结尾;每条命令根据需要,可以进行缩进和换行;注释:单行注释用#或者’'加一个空格
多行注释用/*

四、DQL查询(查询到表格是虚拟的)

1》select 查询列表 from 表名;
select * from 表名; #查询所有列表,
select 数值型常量值;
select '字符’型常量值;
select 表达式;
select 函数; #查询函数,得到函数的返回值
select 需要查询的数据 as或者空格 “别名”
例如:select 210
>>>2
10
起别名: select 210 as 公式
>>>公式
2
10
2》去重
select distinct 需要查询的列(数据) from 表名

3》mysql中的加号+不能完全用来连接。连接一般用concat( )

4》ifnull 判断是否为空,若是,则返回其后面的值。例如:ifnull (grade,0) 表示判断grade石佛为空,若是则返回0

5》条件查询 where
select 需要查询数据 from 表名 where 筛选条件

*逻辑运算符:and or not
*条件运算符:< > = != >= <= <>(不等于)
*模糊运算符:like between and in is null
(若要用到一些转义符,需要在转义符前面加 \ 或者随意加一个符号,然后在其后面写上escape ‘符号’)
like 查询指定模式,通常和通配符一起使用。%表示任意多个字符,包含0个字符 _表示任意单个字符
between and 查询在一定范围之内的数据,包含临界值
in 查询表中,in后面指定列中的数据,in列表的值类型必须一致或兼容,不支持使用通配符
is null =或!=不能判断null

6》安全等于 <=> 判断是否等于,可以判断NULL值

7》排序查询 order by
select 需要查询的数据 from 表名 (where 筛选条件) order by 排序列表 asc升序/desc降序

order by 一般是放在查询语句的最后,limit子句除外

五、常见函数

【1】字符函数
length() 获取字符长度(其中注意uft8中一个中文占3个字节长度,一个英文字母占1占一个字节长度)
concat(…,…) 拼接字符串
upper() 将小写变成大写; lower() 将大写变成小写
substr(…,索引,长度) 根据索引截取相对应的长度,mysql中索引从1开始
instr(‘…’,‘…’) 返回子串第一次出现的索引
trim(’ ‘) 去掉空格;trim(‘要去掉的元素’ from ‘…’)
lpad(’…‘, 指定是长度 ,’…') 用指定的字符实现左填充指定长度;rpad实现右填充
replace 替换

【2】数学函数
round( ) 四舍五入
cell( ) 向上取整,返回大于等于该参数的最小整数;floor( ) 向下取整,返回小于等于该参数的最大整数
truncate( ) 截断
mod( ) 取余 mod(a,b)==> a-a/b*b

【3】日期函数
now() 返回当前系统的日期和时间
curdate() 返回当前系统日期,不包含时间
curtime() 返回当前时间,不包含日期
str_to_data( ) 将日期格式的字符转换成指定格式的日期
data_format( ) 将日期转换成字符

【4】流程控制函数
case函数使用:
1、switch case的效果: 对于一个值的
case 要判断的字段或表达式
when 常量1 then 要显示的值1或语句1
when 常量2 then 要显示的值2或语句2

else 要显示的值n或语句n;
2、多重if: 对于范围的
case
when 条件1 then 要显示的值1或语句1

else 要显示的值n或语句1;

【5】分组函数:sum avg min max count
特点:sum avg 一般用于处理数值型
min max count 可以处理任何类型
以上分组函数都忽略null值

【6】count函数:count(*)用于统计行数

【7】和分组函数一同查询的字段要求是group by后的字段

【8】group by 将表中的数据分成若干组 select 分组函数,列(要求出现在group by后面)from 表 where 筛选条件 group by 分组的列表 order by 子句

分组前筛选 原始表 group by子句前面 where
分组后筛选 分组后的结果集 group by子句后面 having
分组函数做条件肯定是放在having子句中

【9】sql92标准
1、等值连接:多表等值连接的结果为多表的交集部分;n表连接,至少许哟啊n-1个连接条件;多表的顺序没有要求;一般需要为表起别名;可以搭配前面介绍的所有子句使用,比如筛选、分组等等
2、非等值连接
3、自连接:自己连接自己
【10】sql99连接
语法:select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
【where 筛选条件 】
【group by 分组】
【having 筛选条件】
分类:内连接:inner 外连接:左外 left 右外 right 全外 full 交叉连接:cross

1、内连接
语法:select 查询列表
from 表1 别名
inner join 表2 别名
on 连接条件
1>等值连接:添加排序、分组、筛选;inner可以省略;筛选条件放在where后面,连接条件放在on后面,提高分离性,便于阅读;inner join连接和sql92语法中的等值连接效果是一样的,都是查询多表的交集
2>非等值连接
3>自连接

2、外连接的查询结果为主表中的所有记录。如果从表中有和它匹配的,则显示匹配的值。如果从表中没有和它匹配的,则显示null。外连接查询结果=内连接结果+主表中有而从表中没有的记录
1>左外连接:left join左边的是主表
2>右外连接:right join右边的是主表
3>全外连接=内连接的结果+表1中有但表2中没有的+表2中有但表1中没有的

【11】子查询:出现在其他语句中的select语句,称为子查询或内查询
一、where或having后面
1、标量子查询(单行子查询)
2、列子查询(多行查询)
3、行子查询(多行多列)
特点:
1、子查询放在小括号内
2、子查询一般放在条件的右侧
3、标量子查询,一般搭配着单行操作符使用,如:< > = >= <>
列子查询,一般搭配着多行操作符使用,如:in any all
4、子查询的执行优先于主查询执行,主查询的条件用到了子查询的结果

二、select后面:里面只支持标量子查询
三、exists后面(相关子查询,先进行外查询)
语法:exists (完整的查询语句)
结果:
1或0
【12】分页查询:当需要显示数据,一页显示不全,需要分页提交sql请求
语法:select 查询列表
from 表
【join type】join 表2
on 连接条件
where 筛选条件
group by 分组字段
having 分组的筛选
order by 排序的字段

imit offset,size:offset要显示条目的起始索引;size要显示的条目个数
特点: imit语句放在查询语句的最后
要显示的页数page,每页的条目数size,语法公式:select 查询列表
from 表
limit (page-1)*size,size;

【13】联合查询 union联合,合并:将多条查询语句的结果合并成一个结果
语法:查询语句1
union
查询语句2
特点:要求多条查询语句的查询列数是一致的
要求多条查询语句的查询的每一列的类型和顺序最好一致
union关键字默认是去重的,若使用union all可以包含重复项

六、DML语言(对于数据的管理与操作)

【1】插入语句
方一:语法:insert into 表名(列名…)
values(值…)
方二:语法:insert into 表名
set 列名=值,列名=值…
区别:方1支持插入多行,支持子查询

【2】修改语句
1、修改单表的记录
语法:update 表名
set 列=新值,列=新值…
where 筛选条件
2、修改多表的记录
sql92语法:update 表1 别名,表2 别名
set 列=值…
where 连接条件
and 筛选条件
sql99语法:update 表1 别名
inner/left/right join 表2 别名
on 连接条件
set 列=值
where 筛选条件

【3】删除语句
方一:delete
语法:单表的删除:delete from 表名 where 筛选条件
多表的删除:delete 别名
from 表1 别名,表2 别名
where 连接条件
and 筛选条件
方二:truncate
语法:truncate table 表名
区别:truncate不能加where,假如要删除的表中的自增长列,若用delete删除后,再插入数据,自增长列的值
从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始,truncate删除没有返回值,delete删除有返回值

七、DDL语言(对于库和表的操作)

【1】库的创建
语法:create database (if not exists)库名;

【2】更改库的字符集
语法:alter database 库名 character set gbk;

【3】库的删除
语法:drop database if exists 库名;

【4】表的创建
语法:create table 表名(列名 列的类型【(长度) 约束】,
列名 列的类型【(长度) 约束】,
…)

【5】表的修改
1、修改列名
alter table 表名 change column 旧列名 新列名 新列名的类型
2、修改列的类型
alter table 表名 modify column 列名 新类型
3、添加新列
alter table 表名 add column 新列名 新类型
4、删除列
alter table 表名 drop column 列名
5、修改表名
alter table 表名 rename to 新表名

【6】表的删除
drop table if exist 表名

【7】表的复制
只复制表的结构:create table 要复制的表名 like 被复制的表名
复制表的结构+数据:ccreate table 新表表名 select * from 旧表表名

八、数据类型

1、整型:Tinyint Smallint Mediumint Int/Integer Bigint
2、小数:float double DEC
语法:类型(M,D) M表示整数部位加上小数部位的位数;D表示小数点后的位数,四舍五入
若是Decimal,则M默认为10,D默认为0
3、字符型:较短的字符串:char varchar
4、日期型:date保存日期 datetime保存日期+时间 timestamp保存日期+时间 time保存时间 year保存年

九、常见约束

语法:create table 表名(字段名 字段类型 约束)
约束分类:not null用于保证该字段的值不能为空
default用于保证该字段有默认值
primary用于保证该字段的值具有唯一性,并且非空
unique用于保证该字段的值具有唯一性,可以为空
foreing外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
添加约束的时机:创建表时,修改表时
约束的添加分类:列级约束(以上约束都可以,但是外键约束没有效果),表级约束(除了非空,默认,其他的都支持)

1、列级约束:直接在字段名和类型后面追加约束类型即可,只支持默认,非空,主键,唯一
2、表级约束:在各个字段的最下面添加 【constraint 约束名】 约束类型(字段名)
3、外键:要求在从表设置外键关系; 从表的外键列的类型和主表的关联列的要求一致或兼容;主表的关联列必须是一个key(key一般指主键或唯一);插入数据时,先插入主表,再插入主表;删除数据时,先
删除从表,再删除主表
4、修改表时添加约束:alter table 表名 modlfy column 列名 列类型 约束类型
5、修改表时删除约束:alter table 表名 drop 约束类型

十、标识列(又称自增长列,不用手动插入,系统提供默认的平均值)

语法(在创建表时列的后面添加):auto_increment
标识列不一定和主键搭配,但要求是一个key;一个表可以有最多一个标识列;标识列类型只能是数值型;标识列可以通过 set auto_increment_increment=3 设置步长

十一、transaction control language事务控制语言

事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行
属性:1、原子性:指事务是一个不可分割的工作单位;2、一致性:使数据库从一个一致性状态变换到另一个一致性状态;3、隔离性:一个事务的执行不能被其他事务干扰,即各个事务不相互影响;持久性:一个事务一旦提交,则会永久的改变数据库的数据
1、事务的创建
隐式事务:事务没有明显的开启和结束的标记,比如insert update delete语句
显示事务:事务具有明显的开启和结束的标记。前提:必须先设置自动提交功能为禁用set autocommit=0
语法:
开启事务:
set autocommit=0;
start transaction;可选的
编写事务中的sql语句(select insert update delect):
语句1,
语句2,

结束事务:
commit;提交事务
rollback;回滚事务
savepoint 节点名;设置保存点

2、对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题

3、演示savepoint的使用:savepoint+节点名 用于设置保存点 搭配着rollback使用

4、delete from和truncate table在事务中的区别:truncate在操作完后,不能回滚;而delete可以回滚

十二、视图:虚拟表,和普通表一样使用,没有真实的保存数据

1、创建视图
语法:create view 表名 as 查询语句
2、视图的修改
语法:create or replace view 视图名 as 查询语句 或 alter view 表名 as 查询语句
3、删除视图
语法:drop view 视图名,视图名…
4、查看视图
语法:decs 视图名 或 show create view 视图名
5、视图的更新
*插入数据:insert into 视图名 values 值
*修改数据:update 视图名 set 新数据 where 旧数据
*删除数据:delete from 视图名 where 数据名

注:一下特点的视图是不允许更新的:
1、包含以下关键字的sql语句,分组函数、distinct、group by、having、union或者union all
2、常量视图
3、select中包含子查询
4、有join的
5、from一个不能更新的视图
6、where子句的子查询引用了from子句中的表

区别:视图 create view 没有占用物理空间,只是保存了sql逻辑 增删改查,一般不能增删改
表 create table 占用了空间,保存了数据 可以增删改查

十三、变量

1、系统变量:变量是由系统定义的,不能用户定义的,属于服务器层面、
语法:
查看所有的系统变量 show global(全局变量) / [session(会话变量)] variables
查看满足条件的部分系统变量 show global / [session] variable like 要查看的变量
查看指定的某个系统变量的值 select @@global | [session] . 系统变量名(默认是会话变量)
为某个系统变量赋值 set global | [session] 系统变量名=值

*全局变量:服务器每次启动将为所有全局变量赋初始值,针对于所有的会话(连接)有效,但不能跨重启
查看所有的全局变量:show global variables
查看部分的全局变量:show global variables like 要查看的变量
查看的指定的全局变量的值:select @@
为某个指定的全局变量赋值:set @@

*会话变量:仅仅针对当前会话(连接)有效
查看所有的会话变量:show variables | show session variables
查看部分的会话变量:show variables like 要查看的变量 或 show session variable like 要查看的变量
查看指定的某个会话变量:select @@
为某个会话变量赋值:set @@会话变量名=值 或 set session 会话变量名=值

2、自定义变量
*用户变量:针对当前会话(连接)有效
声明并初始化:set @用户变量名=值; 或 set @用户变量名:=值; 或 select @用户变量名:=值;
赋值或更新用户变量的值:方一:set @用户变量名=值; 或 set @用户变量名:=值; 或 select @用户变量名:=值;
方二:select 字段 into 变量名 from 表;

*局部变量:仅仅在定义它的begin end中有效,且只能在第一句话
声明:declare 变量名 类型; delcare 变量名 类型 default 值
赋值:方一:声明并初始化:set @用户变量名=值; 或 set @用户变量名:=值; 或 select @用户变量名:=值;
方二:select 字段 into 局部变量名 from 表

十四、存储过程:一组预先编译好的sql语句的集合

1、创建语法:create procedure 存储过程名(参数列表)
begin 存储过程体(一组合体的sql语句) end
注:*参数列表包含三部分:参数模式,参数名,参数类型。参数模式有in(该参数可以作为输入,即需要调用方传入值)、out(该参数可以作为输出,即可以作为返回值)、inout(该参数即需要传入值也需要返回值)
*如果存储过程体仅仅只有一句话,begin end可以省略。存储过程体中的每条sql语句的结尾要求必须加分号,存储过程的结尾可以使用delimiter重新设置
2、调用语法:call 存储过程(实参列表)
3、删除存储过程语法:drop procedure 存储过程名
4、查看存储过程的信息:show create procedure 存储过程名

十五、函数:有且只有一个返回值

1、创建语法:create function 函数名(参数列表) returns 返回类型
begin 函数体 end
注:*参数列表包含两部分:参数名,参数类型
*函数体肯定会有return语句,如果没有也不会报错、
*当函数体中只有一句话时,可以省略begin end
*需要delimiter语句去设置结合标记
2、调用函数:select 函数名(参数列表)
3、查看函数:show create function 函数名
4、删除函数:drop function 函数名

十六、流程控制结构:顺序结构,分支结构,循环结构

1、分支结构
if函数 实现简单的双分支
语法:if(表达式1,表达式2,表达式3)
执行顺序:若表达式1成立,则返回表达式2的值,反之,则返回表达式3的值

case结构 *一般用于实现等值判断:case 变量|表达式|字段
when 要判断的值 then 返回值1
when 要判断的值 then 返回值2

else 要返回的值n
end
*一般用于实现区间的判断:case
when 要判断的值 then 返回值1
when 要判断的值 then 返回值2

else 要返回的值n
end
if结构:实现多重分支
语法:if 条件一 then 语句1;
elseif 条件2 then 语句2;

else 语句n;
end if;
2、循环结构
while 语法:【标签:】while 循环条件 do 循环体;end while 【标签】;
loop 语法(可以来模拟简单的死循环):【标签:】loop 循环体;end loop 【标签】;
repeat 语法:【标签:】repeat 循环体;until 结束循环的条件 end repeat 【标签】;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值