MySQL基础--sql基础一篇就够了

 

DQL

基础查询

select * from 表名;

条件查询

select * from 表明

where 条件

排序查询

select * from table

where 条件 

order by 字段名 desc/asc;

常见函数

分组查询

select* from 表名

where 条件

group by 字段名

having 组筛选条件

连接查询

select * from a 【inner/left/right】join b

on 连接条件

子查询

select * from

(select * from a)

where 条件

分页查询

select * from 表名

limit 起始下标,数量

联合查询

select * from a 

union 

select * from 

b

DML

插入:

insert into 表名

(字段名1,字段名2)

values(值1,值2)

,(值11,值22)

修改:

updata 表名

set 字段名1=值,

字段名2=值

where 筛选条件

删除:

delect from 表名

where 筛选条件

      

DDL

库的管理

(1)创建库
create database 库名

[ character set 字符集名] 

(2)修改库
alter database 库名character set 字符集名;


(3)删除库
drop database

[ if exists] 库名;

表的管理:

(1)创建:

1.create table 表名

(
 字段名字段类型[约束] ,
 字段名字段类型[约束] ,
 字段名字段类型[约束]
    )

(2)修改:

  1.添加列
alter table 表名
add 列名 列名类型

[ first| after 字段名] ;


  2.修改列的类型或约束
alter table 表名

modify column

列名新类型[ 新约束] ;


  3.修改列名
alter table
表名change colun 旧列名

新列名类型;


  4.删除列
alter table 表名

drop colnmn 列名;


  5.修改表名
alter table 表名
rename [to] 新表名;

(3)删除

drop table 表名;

 

(4)复制表

1、复制表的结构
create table 表名like 旧表;


2、复制表的结构+数据
create table 表名
select 查询列表 from 旧表[where筛选] ;

数据类型

 

常见的约束 

通用写法: 

create table stuinfo(
id int(5) primary key,
stu_name varchar(5) not null,
gender char(1) check(gender='男' or gender='女'),
seat int(2) unique,
gae int(2) default 18,
major_id int(2),
constraint fk_stuinfo_major foreign key(major_id) references major(id)
);

外键约束写入表级约束,其他约束写入列级约束

查看表结构:desc 表名;

查看索引:show index from 表名;

索引包括;主键,外键,唯一

添加表的非空约束:alter table stuinfo modify stu_name varchar(5) not null;

添加表的默认约束:alter table stuinfo modify age  default 18;

添加主键约束:alter table stuinfo modify id int(5) primary key;

alter table stuinfo add constraint pk_stuinfo_major primary key(id);

添加唯一约束:alter table stuinfo modify id int(5) unique;

alter table stuinfo add unique(id);

添加外键:alter table stuinfo add  foreign key(major_id) references major(id);

删除非空约束和默认约束:alter table stuinfo

modify 字段名 字段类型;

删除主键约束:alter table stuinfo

drop primary key;

alter table stuinfo modify id int(2);

删除唯一约束:

alter table stuinfo drop index 唯一键名;   

删除外键约束:alter table stuinfo 

drop foreign key 外键名;

 标识列

create table stuinfo(

id int(5) primary key auto_increment,

name varchar(5));

修改标识列:alter table 表名 modify id int(5)

primary key atuo_increment;

删除标识列:

alter table 表名 

modify id int(5)

primary key;

 

    

TCL

 事务

mysql 默认是开启事务自动提交的

关闭事物的自动提交:SET autocommit=0

开启事务的自动提交:SET autocommit=1

开启事务:START TRANSACTION (标记事务的开启,在这之后的sql语句都在同一个事务内 )

提交事务:COMMIT

回滚事务:ROLLBACK

 

保存点:

设置一个是事物的保存点:SAVEPOINT 保存点名称

回滚到某个保存点:ROLLBACK TO SAEPOINT  保存点名称

撤销保存点:RELEASE SAVEPOINT  保存点名称

 

一个事务的完整执行流程:

手动开启处理事务(关闭自动提交):SET sutocommit=0

开启事务:START TRANSATION

执行sql语句:select,delete,insert,update(不包含DDL语句)

提交事务或者回滚事务:commit/rollback

事务结束,开启自动提交:SET autocommit=1

  查看当时数据库的隔离级别:select @@tx_isolation

设置数据库的隔离级别:set 【global / session】  transaction isolation level (隔离名称)read uncommitted;

事务隔离级别:

read uncommitted 都可以发生

read committed  脏读不会发生

repeatable read; 脏数据和重复读不会发生

serializable  脏读不可重复的和幻读都不会发生

设置保存点:savepoint 保存点名称

 

保存点演示:

SET autocommit=0;
START TRANSACTION;
DELETE FROM account WHERE id=25;
SAVEPOINT a;#设置保存点
DELETE FROM account WHERE id=28;
ROLLBACK TO a;# 回滚到保存点

会发现id为25的数据并没有删除,是应为保存点回到了a。

 

 事务之转账实例:
  • drop database if exists model;   

  • create database springboot_model01 character set utf8 collate utf8_general_ci;

  • use model;

  • create table account(
    id int(3) not null primary key auto_increment,
    name varchar(30),
    money decimal(9,2)
    );

  • insert into account(name,money)
    values('one',500),('two',1000);

     

  • select * from account;

     

  • set autocommit=0;

  • start TRANSACTION;

  • update account set money=money+500 where name='two';

  • update account set money=money-500 where name='one';

  • commit;

  • rollback;

  • set autocommit=1;

脏读(更新):

事务一:开启事务,更新了数据(此时数据库表数据更新了),但未提交事务。

事务二:开启事务,读取数据,是事务一更新单位提交的数据。此为脏读

 

不可重复读(更新):

事务一:开启事务,更新新了数据,单位提交。

事务二:开启了事务,查询事务一更新的数据,是更新之后的数据。

事务一:执行回滚,提交事务。

事务二:第二次读取数据,数据变了。此为不可重读

 

幻读(针对插入):

事务一:开启事务,查询一下有5条数据,准备对这五条数据执行更新操作,但还未执行

事务二;开启事务,插入5数据,提交事务。

事务一:执行对5条数据的更新操作,会发现受影响行数为10,此为幻读。

 

 

 演示delete 和truncate的区别

set autocommit=0;
start transaction;
delete from user where id=1;
rollback;
set autocommit=1;


select * from user;

set autocommit=0;
start transaction;
truncate table user;
rollback;
set autocommit=1;

trunate删除表数据后,回滚不能将数据找回

而delete 可以将删除的数据找回

    

其他

 视图

create view 视图名

as 查询语句;

drop view 视图名;

create or replace 视图名 as

查询语句;

alter view 视图名 as 

查询语句;

desc 视图名;

show create view 视图名;

 使用:

insert into 视图名(字段名)

values(字段值);

delete from  视图 名

where 筛选条件;

update 视图名 set 字段名=值

where 筛选条件;

select * from 视图名

where 筛选条件;

变量 :

查看所有的系统变量:

show 【global | session】 variables;

查看指定条件的系统变量:

show 【global | session】

variables like '%char%'

查看某个系统变量:

select @@【globla | sesssion】.系统变量名

 

 

为某个系统变量赋值:

set 【global | session】

系统变量名=值

set @@【global | session】.系统变量名=值

用户变量名赋值和更新:

set @用户变量名=值;

set @用户变量名:=值;

select @用户变量名:=值;

 

select 字段名 into 用户变量名from 表名

查看用户变量名: 

select @用户变量名;

 

局部变量:

declare 变量名 类型

set 局部变量名=值

select 局部变量名

存储过程和函数:

创建:

delimiter $

create procedure  存储过程名(in 参数名1 参数类型)

begin

存储体,sql语句

end $

调用存储过程

call 存储构过程名(参数1);

   

 

 

DQL

基础查询

一、语法
select查询列表
from表名;
二、特点
1、查询列表可以是字段、常量、表达式、函数,也可以是多个
2、查询结果是- -个虚拟表
三、示例
1、查询单个字段
select字段名from 表名;
2、查询多个字段
select字段名,字段名from 表名;
3、查询所有字段
select * from表名

4、查询常量
select常量值;
注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要
5、查询函数
+
select函数名(实参列表);
6、查询表达式
select 100/1234;
7、起别名
①as
②空格
8、去重
select distinct 字段名 from 表名;
select distinct a,b from 表名;

9、+
作用:做加法运算
select数值+数值;直接运算
select字符+数值;先试图将字符转换成数值,如果转换成功,则继续运算;否则转换成0,再做运算
select nul1+值;结果都为null


10、[补充] concat函数
功能:拼接字符
select concat(字符1, 字符2,字符3...);


11、| [补充 ] ifnul1函数
功能:判断某字段或表达式是否为null,如果为null返回指定的值,否则返回原本的值
select ifnull (commission_ pct, 0) from employees;

12、[补充] isnul1函数
功能:判断某字段或表达式是否为nu1l,如果是,则返回1,否则返回0

条件查询

一、语法
select
查询列表
from表名
where
筛选条件
二、筛选条件的分类
1、简单条件运算符
> <= <> != >= <= <=>安全等于
2、逻辑运算符
&& and
||
or
! not
3、模糊查询

like:-般搭配通配符使用,可以判断字符型或数值型
通配符: %任意多个字符,_任意单个字符
be tween and
in

is null /is not null: 用于判断nul1值

排序查询

一、语法
select查询列表
from表
where
筛选条件
order by排序列表| [ asc} desc]
二、特点
1、asc :升序,如果不写默认升序
desc:降序
2、排序列表支持单个字段、多个字段、函数、表达式、别名
3、order by的位置一般放在查询语句的最后(除limit)

 READ UNCOMMITTEDREAD COMMITEDREPEATABLE READSERIALIZABLE

常见函数

字符串函数:

substr()截取
concat()连接
upper() lower()
replace()替换
length()获取字节长度
trim()去空格
lapd()左填充
rapd()右填充
instr():获取字串第一次出现的索引

数字函数:

ceil()向上取整
round()四舍五入
mod()取模
floor()向下取整
truncate()截断
rand()获取随机数,返回0-1之间的小数

日期函数:
now()当前日期+时间
year()当前的年
month()yuue
day()天
date_format()将日期转换为字符
curdate():返回当前日期
str_to_date()将字符转换为日期
curtime()返回当前时间
hour()小时
minute()分钟
second()秒
datediff()返回两个日期相差的天数
monthname()以英文形式返回月

其他函数:
version()放回当前版本
database 当前数据库
user当前用户
password(’字符‘):返回该字符的密码形式,自动加密
md5():返回MD5加密形式

流程控制函数:
if(条件表达式,表达式1,表达式2):如果表达式成立,则返回表示1 ,否则返回表达式2
case 表达式或变量
when 常量 then 表达式
else
end
case
when 条件 then 表达式
else 表达式
end

 视图表

分组查询

一、语法
select分组函数,分组后的字段
from表
[where筛选条件]
group by 分组的字段
[having分组后的筛选p]
|[orderby排序列表]

,连接查询

分类:内连接,外连接,自连接

内连接 : inner join
  等值连接

  非等值连接

  自连接 

内连接语句模板:
  select 查询列表
  from 表1 别名
  inner join 表2 别名
  on 连接条件 

外连接:
  左外 left join

  右外 right join

  全外 full join

  交叉连接 cross join 

外连接语句模板:
  select 查询列表 别名
  from 表 别名

 (left,right,cross)join 表2 别名

  on 连接条件

  where 筛选条件

  group by 列名

  having 组筛选条件

  order by 列名

子查询

一、含义
嵌套在其他语句内部的select语句称为子查询或内查询,
外面的语句可以是insert、update、delete、 select等, -般select作为外面语句较多
外面如果为select语句,则此语句称为外查询或主查询
二、分类
1、按出现位置
select后面
from后面
where或having后面
exists后面
2、按结果集的行列
标量子查询(单行予查询) :结果集为- -行- -列
列子查询(多行子查询) :结果集为多行一-列

行子查询:结果集为多行多列
表子查询:结果集为多行多列

分页查询

一、应用场景
当要查询的条目数太多,一页显示不全
二、语法
select
查询列表
from表
limit[ offset, ] size;
I
注意:
offset代表的是起始的条目索引,默认从0卡死
si ze代表的是显示的条目数

 用户变量局部变量

联合查询

一、含义
union:合并、联合,将多次查询结果合并成一个结果
二、语法
查询语句1
union
, [a11]
查询语句2
union
[ al1]

三、意义
1、将一条比较复杂的查询语句拆分成多条语句
2、适用于查询多个表的时候,查询的列基本是-致
四、特点
1、要求多条查询语句的查询列数必须一致
2、要求多条查询语句的查询的各列类型、顺序最好一-致
3、union 去重,union a11包含重复项

DML

 

插入:

一、方式一
语法:
insert into表名(字段名...) vale(....;
特点:
1、要求值的类型和字段的类型要一致或兼容
2、字段的个数和顺序不一-定 与原始表中的字段个数和顺序-致
但必须保证值和字段一- -对应
3、假如表中有可以为nu11的字段,注意可以通过以下两种方式插入nul1值
①字段和值都省略
I
②字段写上,值使用null
4、字段和值的个数必须- -致
5、字段名可以省略,默认所有列

 

二、方式二
语法:
insert into 表名set 字段=值,字段=值...;
两种万式的区别:
1.方式- -支持一次插入多行,语法如下:
insert into 表名[ (字段名...)] values(值, ..), (值,.....
2.方式一支持子查询,语法如下:
insert into 表名
查询语句;

 

修改:

一、修改单表的记录★
语法: update表名set 字段=值,字段=值[ where 筛选条件] ;
二、修改多表的记录[补充]
语法:
update表1别名
left |right | inner join 表2别名
on连接条件
set字段=值,字段=值
[where筛选条件] ;
I

 

删除:

方式一:使用delete
一、删除单表的记录★
  语法: delete from 表名( where筛选条件]
二、级联删除[补充]
语法:
delete别名1,别名2 from 表1别名
inner
|left|right join表2别名
on
连接条件
[where筛选条件]

 

方式二:使用truncate
语法: truncate table 表名

三、区别:

  1. truncate删除后,如果再插入,标识列从1开始
delete删除后,如果再插入,标识列从断点开始
  2. delete可以添加筛选条件
truncate不可以添加筛选条件
  3. truncate效率较高
  4. truncate没有返回值
delete可以返回受影响的行数

脏读×√√√ 关键字viewtable    作用域当前会话BEGIN END 中 

 

DDL

  

库的管理

(1)创建库
create databaseI [ if not exists] 库名[ character set 字符集名] ;


(2)修改库
alter database 库名character set 字符集名;


(3)删除库
drop database[ if exists] 库名;|

 

表的管理:

(1)创建:

  1.create table [if not exists]表名 (
 字段名字段类型[约束] ,
 字段名字段类型[约束] ,
 字段名字段类型[约束]
    )

(2)修改:

  1.添加列
alter table
表名add colun列名类型[ first| after 字段名] ;


  2.修改列的类型或约束
alter table表名modify column 列名新类型[ 新约束] ;


  3.修改列名
alter table
表名change colun旧列名新列名类型;


  4.删除列
alter table 表名drop colnmn 列名;


  5.修改表名
alter table
表名renane [to] 新表名;

(3)删除

drop table 表名;

 

(4)复制表

1、复制表的结构
create table 表名like 旧表;


2、复制表的结构+数据
create table 表名IT
select查询列表from旧表[where筛选] ;


数据类型

一。整型

整数型

浮点型

tinyint : 1、smallint : 2、mediunint : 3、

int/integer : 4、 bigint :8
特点:
①都可以设置无符号和有符号,默认有符号,

通过unsigne d设置无符号
②如果超出了范围,会报out or range异常,

插入临界值
③长度可以不指定,默认会有一-个长度
长度代表显示的最大宽度,如果不够则左边用

o填充,但需要搭配zerofill,并且默认变为无符

号整型

 

二。字符型

char和varchar的不同是,varchar的

长度是可变的,但是char的长度是不

可变的,char(10):

表示这个字段分配了10个字符的字段

,插入不到十个字符也会占用是个字符

的长度。 

较长的文本的用text和blob

  • 定点数: decimal (M, D)
    浮点数:
    float(m, D
    double (M, D)

  • 特点:

①M代表整数部位+小数部位的个

数,D代表小数部位
②如果超出范围,则报out or

range异常,并且插入临界值
③M和D都可以省略,但对于定

点数,嘿认为10, D默认为0
④如果精度要求较高,则优先考

虑使用定点数

 

三。日期型

year年
date日期
time时间
datetime日期+时间
timestamp日期+时间
4比较容易受时区下 语法模式

、版本的影响,更能反映当前时区的真实时间

不可重复读××√√

 常见约束:

(1)约束的分类:

not null:非空,用于保证该字段的值不

能为空,比如姓名,学号

default:默认,用于保证该字段的默

认值 ,如性别

primary key:主键,用于保证该字段具

有唯一性,非空,如学号

unique:唯一,用于该字段具有唯一性,

可以为空

check:检查约束(mysql不支持)

foreign key:外键约束,用于限制两个表的关系,用于保证

(2)添加约束的时机

  1.创建表时添加约束

  create table stuinfo(
  id int(5) primary key,
  stu_name varchar(5) not null,
  gender char(1)

check(gender='男' or gender='女'),
  seat int(2) unique,
  gae int(2) default 18,
  major_id int(2),
  constraint fk_stuinfo_major foreign

key(major_id) references major(id)
);

  2.修改表时添加约束

  alter table 表名 modify 列名 类型 约束类型

(3)约束添加的分类

  1.列级约束

      六大约束都支持,但是外键约束无效果

  2.表级约束

      除了非空和默认,其他都支持

 

主键和唯一
1、区别:
①、一个表至多有- -个主键,但可以有多个唯一
②、主键不允许为空,唯一-可以为空
2、相同点
都具有唯一-性
都支持组合键,但不推荐

 

外键:
1  要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要求一 致或兼容,名称无要求
3、主表的关联列必须是一个key (一般是主键或唯-一 )
4、插入数据时,先插入主表,再插入从表
删除数据时,先删除从表,再删除主表

 

#二、修改表时添加约束
1、添加列级约束
alter
table 表名 modify column 字段名 字段类型 新约束;
2、添加表级约束
alter
table 表名 add [ constraint 约束名] 约束类型 (字段名) [外键的引用] ;

是否占用内存占用较小,只保存sql逻辑保存实际数据

 标识列

又称为自增长列
含义:可以不用手动的插入值,系统提供默认的序列值
特点:
1、标识列必须和主键搭配吗?不一定,但要求是一个key
2、一个表可以有几个标识列?至多一个!
3、标识列的类型只能是数值型
4、标识列可以通过

SET auto_ increment_ increment=3;设置步长
可以通过手动插入值,设置起始值

 

列级约束

 create table stuinfo(
id int(5) primary key,#主键约束
stu_name varchar(5) not null,#非空约束
gender char(1) check(gender='男' or gender='女'),#检查约束
seat int(2) unique,#唯一约束
age int(2) default 18,#默认约束
major_id int(2) #外键约束
);

 

major_id int(2) foreign key references major(id) #外键约束(不支持)

表级约束:

create table stuinfo(
id int(5),
stu_name varchar(5),
gender char(1) ,
seat int(2),
age int(2),
major_id int(2),#外键约束
primary key(id),#主键
check(gender='男' or gender='女'),#检查
unique(seat),#唯一

constraint fk_stinfo_major

foreign key(major_id)

references major(id)#外键

);

 

对于有外键的表:

插入时我们先插入主表数据在差从表的数据

删除时先删从表的数据在删主表的数据

若有业务需求:我们需要直接删除主表的数据时,我们可以这样实现

1. 级联删除:(使用关键字on delete cascade)

alter table 从表名 add constraint 外键名 froeign key(添加外键的字段) refenences  主表名(字段名)

on delete cascade;

2.级联置空(使用关键字on delete set null):

alter table 从表名 add constraint 外键名 froeign key(添加外键的字段) refenences  主表名(字段名)

on delete set null;

 定义和使用的位置会话中的任何位置只能在BEGIN END 中,且只能是是第一句 

 

TCL

其他 

 

 

事务的原则:

* 原子性:一个事务要么全部

 

提交完成,要么全部回滚失败,不能执行其中的一部分操作,这就是事务的原子性(针对一个事务,要么一个

事务都完成,要么不开始,不能是执行一半的状态)。 

   * 一致性:事务的执行不能破坏数据的完整性和一致性,一个是事务在执行之前和执行之后,数据库都必须保持

一致的状态。(事务执行前后数据保持一致,不会增加也不会减少。)如果数据库系统在运行过程中发生故障,

有些事物尚未完成就被迫中断,这些未完成的事物对数据库所做的修改有一部分已经写入到物理数据库中,这是数据

库就处于一种不正确的状态,也就是不一致的状态。

  * 持久性:一单事务提交,那么他对数据库中数据的状态的变更就会永远的保存到数据库中,--即使发生系

统崩溃会机器宕机等故障,只要数据库能够重新启动,那么一定能恢复到十五成功结束的状态。(对于事物只

有提交前和提交后,若果是事务还未提交,系统发生故障,那这个事务会恢复到未执行的状态,如果发生故障

之前,事务提交了,那这个事务就会提交到数据库成为已经执行的状态,且不可逆。事务 一旦提交就不可逆。) 

    * 隔离性:事物的隔离性是指在并发环境中,并发的食物是相互隔离的,一个事务的执行不能背其他

的事物所干扰。不同的事务并发操作相同的数据时,每个事物都有各自完成的数据空间,即一个事务的

内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事

务之间不能相互干扰,(每个事物

之间都相互的隔离)。

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

➢脏读:对于两个事务T1, T2,T1读取了已经被T2更新但还没有被提交的字段.
之后,若T2回滚,T1读取的内容就是临时且无效的.
➢不可重复读:对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段.
之后,T1再次读取同一个字段,值就不同了.
➢幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插
入了一-些新的行.之后,如果T1再次读取同一个表,就会多出几行.
数据库事务的隔离性:数据库系统必须具有隔离并发运行各个事务的能力,
使它们不会相互影响,避免各种并发问题.
一-个事务与其他事务隔离的程度称为隔离级别.数据库规定了多种事务隔
离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一-致性 就
越好,但并发性越弱.

   * 隔离失败会产生一些问题:

    1.读脏字(读取未提交):指的是一个事务读取了另一个事务

未提交的事务。

      2.不可重复读:在一个事务内多次读取表中的某一行数据,多次读取的的数据不一样

(这不一定是错误,但是某些场

合下不对)。

      3.虚读(幻读):

是指在一个事务内读取到了别

的事务插入的数据,导致前

后读取的不一样(一般是行数

影响,多了一行数据)

 

  
 

隔离级别描述

READ UNCOMMITTED
允许事务读取未被其他事物提交的变更.脏读,不可重复读和幻读的问题都会出现
(读未提交数据}

READ COMMITED
只允许事务读取已经被其它事务提交的变更.可以避免脏读.但不可重复读和幻读问
(读已提交数据)
题仍然可能出现

REPEATABLE READ
确保事务可以多次从一个字段中读取相同的值.在这个事务持续期问,禁止其他事物
(可重复读)
对这个字段进行更新.可以避免脏读和不可重复读, 但幻读的问题仍然存在.

SERIALIZABLE(串 行化)
|确保事务可以从一个表中读取相同的行.在这个事务持续期间,禁止其他事务对该表
|执行插入,更新和删除操作.所有并发问题都可以避免,但性能十分低下.

 

Mysql支持4种事务隔离级别.Mysql默认的事务隔离级别

幻读
×
×
×

 

  

 其他:

视图

好处:

1.简化sql

2.提高了sql的重用性

3.保护基表的数据,提高了安全性

 

创建:

create view 视图名

as

查询语句

 

修改:

create or replace view 视图名

as

查询语句

 

删除:

drop view 视图名

 

查看:

show create view 视图名;

desc 视图名;

 

视图的使用:

插入数据:insert into 视图名(字段名)

value(字段值)

删除数据:delete from 视图名

更新数据:update 视图名 set 列名=值

where 筛选条件

查询数据:select * from 视图名

where 筛选条件

注意:视图是用来查询的,不是用来更新的,

查询语句中含有以下语句的不可进行更新:

①包含分组函数、group by、distinct、 having、 union、
②join .
③常量视图
④where后的子查询用到了from中的表
⑤用到了不可更新的视图

 

视图和表的对比:

使用
一般用查询
增删改

 

 

 

变量:   

#一、系统变量
3/*说明: 变量由系统提供的,不是用户定义,属于服务器层面
注意:
如果是全局级别,则需要加dOBAL,如果是会话级别,则需要加SESSION,如果不写,则默认SESSION

#1》全 局变量(globlal.*)
作用域:服务器每次启动将为所有的全局变量赋初始值,针对于所有的会话(连接)有效,但不能跨重启

会话变量作用域(session.)

variables系统变量,默认只能在本会话中起作用

自定义变量:

说明:变量是用户自定义的,不是由系统的
使用步骤:
声明
赋值
使用(查看、比较、运算等)
*/
#1、用户变量
/*
作用域:针对于当前会话(连接)|
*/

声明并初始化:

  set 用户变量名=值;

  set 用户变量名:=值;

  select 用户变量名:=值;

赋值(更新变量):

  set 用户变量名=值;

  set 用户变量名:=值;

  select 用户变量名:=值;

select 字段 into 变量名 from 表;

 

 局部变量

作用域:仅仅在定义他的begin end中有效

应该在begin end 中的第一句话!!

#①声明
DECLARE变量名类型;
DECLARE变量名类型DEFAULT 值;
#②赋值
方式一:通过SET或SELECT
SET局部变量名=值;或
SET局部变量名:=值;或
SELECT Q局部变量名:=值;
方式二:通过SELECT INTo
SELECT字段INTO 局部变量名
FROM表;
#③使用
SELECT局部变量名;

  
 
语法
必须加@符号,不用限定类型
一般不用加@符号,需要限定类型
  
#存储过程和函数

8
存储过程和函数:类似于java中 的方法
好处:
1、提高代码的重用性
2、简化操作
#存储过程
含义:一 组预先编译好的sQI语句的集合,理解成批处理语句
1、提高代码的重用性
2、简化操作
3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

  

#一、创建语法
CREATE PROCEDURE 存储过程名(参数列表)
BEGIN
存储过程体(一组合法的SQI语句)
END


注意:
1、参数列表包含三部分
参数模式参数名参 数类型
举例:
IN stuname VARCHAR(20)
参数模式:
IN:该参数可以作为输入,也就是该参数需要调用方传入值
OUT:该参数可以作为输出,也就是该参数可以作为返回值
INOUT:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

2、如果存储过程体仅仅只有一-句话,BEGIN END可以省略
存储过程体中的每条sQL语句的结尾要求必须加分号。
存储过程的结尾可以使用DELIMITER 重新设置
语法:
DELIMITER结束标记
案例:
DELIMITER $ 


#二、调用语法
CALL 存储过程名(实参列表) ;


select最全语法模板: 

      select [ all | distinct ] 字段名 别名            *********(8)

      from 表名1  别名                                                                *********(1)

      (inner,left,right,cross) join 表名2 别名              *********(2)

      on   连接条件                         *********(3)

      where 字段筛选条件                 *********(4)                  

      group by 以那个字段进行分组               *********(5)

         having 分组筛选                       *********(6)

      order by 字段名  【asc/desc】                *********(7)

      limit startindex,pagesize                     *********(9)

     

  1. 语法:
    • 语法:select 查询类表 from 表名 where 筛选条件
      分类:

      • 按条件表达式查询
        简单条件运算符:>< = != >= <= <>
        <>不等于

      • 逻辑表达式筛选:
        逻辑运算符:
        && || ! and or not

      • 模糊查询L
        like
        between and
        in
        is null

  2. 连接类型分类:
    • 分类:内连接,外连接,自连接
      • 内连接 : inner join
          等值连接

          非等值连接

          自连接

      • 内连接语句模板:
          select 查询列表
          from 表1 别名
          inner join 表2 别名
          on 连接条件

      • 外连接:
          左外 left join

          右外 right join

          全外 full join

          交叉连接 cross join

      • 外连接语句模板:
          select 查询列别 别名
          from 表 别名

         (left,right,cross)join 表2 别名

          on 连接条件

          where 筛选条件

          group by 列名

          having 组筛选条件

          order by 列名

          
  3. 常见函数:
    • 字符串函数:
      substr()截取
      concat()连接
      upper() lower()
      replace()替换
      length()获取字节长度
      trim()去空格
      lapd()左填充
      rapd()右填充
      instr():获取字串第一次出现的索引

    • 数字函数:
      ceil()向上取整
      round()四舍五入
      mod()取模
      floor()向下取整
      truncate()截断
      rand()获取随机数,返回0-1之间的小数

    • 日期函数:
      now()当前日期+时间
      year()当前的年
      month()yuue
      day()天
      date_format()将日期转换为字符
      curdate():返回当前日期
      str_to_date()将字符转换为日期
      curtime()返回当前时间
      hour()小时
      minute()分钟
      second()秒
      datediff()返回两个日期相差的天数
      monthname()以英文形式返回月

    • 其他函数:
      version()放回当前版本
      database 当前数据库
      user当前用户
      password(’字符‘):返回该字符的密码形式,自动加密
      md5():返回MD5加密形式

    • 流程控制函数:
      if(条件表达式,表达式1,表达式2):如果表达式成立,则返回表示1 ,否则返回表达式2
      case 表达式或变量
      when 常量 then 表达式
      else
      end
      case
      when 条件 then 表达式
      else 表达式
      end

  4. 分页查询:
    • 语法:

      select查询列表
      from表
      [join type join表2
      on
      连接条件
      where筛选条件
      group by分组字段
      having分组后的筛选_
      order by排序的字段]
      limit offset, size;
      offset要显示条目的起始索引( 起始索引从0开始)
      size 要显示的条目个数

    • 特点:
      limit 语句在查询的最后,

    • 公式:page size,index=(page-1)*size

  5. 数据类型
    • 整型
      • 浮点型
      • tinyint : 1、smallint : 2、mediunint : 3、 int/integer : 4、 bigint :8
        特点:
        ①都可以设置无符号和有符号,默认有符号,通过unsigne d设置无符号
        ②如果超出了范围,会报out or range异常,插入临界值
        ③长度可以不指定,默认会有一-个长度
        长度代表显示的最大宽度,如果不够则左边用o填充,但需要搭配zerofill,并且默认变为无符号整型

    • 字符型
      • char和varchar的不同是,varchar的长度是可变的,但是char的长度是不可变的,char(10):表示这个字段分配了10个字符的字段,插入不到十个字符也会占用是个字符的长度。 

      • 较长的文本的用text和blob 
      • 定点数: decimal (M, D)
        浮点数:
        float(m, D
        double (M, D)

      • 特点:
        ①M代表整数部位+小数部位的个数,D代表小数部位
        ②如果超出范围,则报out or range异常,并且插入临界值
        ③M和D都可以省略,但对于定点数,嘿认为10, D默认为0
        ④如果精度要求较高,则优先考虑使用定点数

    • 日期型
      • year年
        date日期
        time时间
        datetime日期+时间
        timestamp日期+时间
        4比较容易受时区下 语法模式、版本的影响,更能反映当前时区的真实时间

 

 

 

 

 

posted @ 2021-05-08 15:05  张紫韩  阅读(125)  评论(0编辑  收藏  举报