MySQL常见命令

net start msyql; #启动mysql
net stop mysql; #停止mysql
show databases;   #查看所有库
use 库名; #打开指定的库
show tables; #查看当前库内的所有表
show tables from mysql;
select database(); #查看当前库
create table 表名(列名 列类型,name varchar(20)); #创建表
desc 表名; #查看表结构
select * from 表名; #查看表内数据
insert into 表名(id,name) values(序号,'rose'); #向表中插入数据
update 表名 set name='' where id=序号(id); #修改表中数据
delete from 表名 where id=序号; #删除指定数据
select version();  mysql --version  mysql -V #查看当前mysql版本

mysql不区分大小写

去重

select distinct department_id from 表名 #去重

+号的作用

只能数值相加,如果一边为字符型,那么会试图转换为数值型.

如果一边为null 那么一定为null

concat('a','b','c'); #输出abc

条件查询

语法:
	select 
			查询列表
	from
    		表名
   	where
   			筛选条件

模糊查询

like
between and 
in
is null | is not null
#安全等于
<=>

like用法

#案例 查询员工名中第二个字符为_的员工名
select 
		last_name
from  
		employees(数据库名);
where
		last_name like '';

between and

select 
   	*
from
   	employees数据库名;
where
   	employees_id between 100 and 120;

排序查询

 select 查询列表
 from  表
【where 筛选条件】
 order by 排序列表 【asc|desc】
# asc代表升序 desc代表降序

常见函数

select 函数名(实参列表)【from表】

分类

1.单行函数

如 concat、length、ifnull等

2.分组函数

功能:做统计使用,又称为统计函数、聚合函数、组函数

单行函数

字符函数

#length 获取参数值的字节个数
select length('');
#concat 拼接字符串
select concat(,'',);
from 表名;
#upper、lower
select upper('');
#substr、substring
select substr('',索引,'');
#instr 返回字串第一次出现的索引,如果找不到返回0
select instr('','');
#trim 去前后空格
select trim('');
#lpad 用指定的字符左填充指定长度
select lpad('',指定长度,'指定的字符');
#replace 替换
select replace('');

示例 将姓变大写,名变小写,然后拼接

select concat(upper(last_name),lower(first_name)) from 表名;

示例

select trim('a' from 'aaaaa张aaaa三aaaa');

数学函数

#round 四舍五入
select round(1.45);
#ceil 向上取整,返回>=该参数的最小数
select ceil(1.00);
#floor 向下取整,返回<=该参数的最大整数
select floor(9.99);
#truncate 截断
select truncate(1.69999,1);
#mod 取余
select mod(-10,-3);

日期函数

#now 返回当前系统日期+时间
select now();
#curdate 返回当前系统日期,不包括时间
#curtime 返回当前时间,不包括日期
#str_to_date 将字符通过指定的格式转换成日期
#date_format 将日期转换成字符

图片

Mysql总结-桃李博客
Mysql总结-桃李博客

其他函数

# version
# database
# user

流程控制函数

# if 函数  if else效果
# 1 case 函数 switch case
case 要判断的字段或表达式
when 常量1 then 要显示的值1或者语句1;
when 常量2 then 要显示的值2或者语句2;
...
else 要显示的值n或者语句n;
end
# 2
case 
when 条件1 then 要显示的值1或语句1
when 条件2 then 要显示的值2或语句2
...
else 要显示的值n或者语句n
end
分组函数
select 分组函数,分组后的字段
from 表
【where 筛选条件】
group by 分组的字段
【having 分组后的筛选】
【order 不要 排序列表】
Mysql总结-桃李博客

1.都忽略null值

2.sum,avg一般用于处理数值型,max min count可以处理任何类型

3.可以和distinct搭配实现去重

4.一般使用count(*)用作统计行数

5.和分组函数一同查询的字段要求是group by后的字段

#sum 求和
#avg 平均值
#max 最大值
#min 最小值
#count 计算非空值的个数

分组查询

select 分组函数,列(要求出现在group by的后面)
from 表
【where 筛选条件】
group by 分组的列表
【order by 子句】
# 按多个字段分组

多表连接

select 字段1,字段2
from 表1,表2,...;

笛卡尔乘积

select name,boyName from beauty,boys;
SQL92语法

等值连接

①多表等值连接的结果为多表的交集部分

②n表连接,至少需要n-1个连接条件

③多表的顺序没有要求

④一般需要为表起别名

⑤可以搭配前面介绍的所有子句使用,比如排序、分组、筛选

select e.last_name,e.job_id,j.job_title #select 查询列表
from 数据库名 e,表名 j #from 表1 别名,表2 别名
where e.'job.id' = j.'job_id'; #where 表1.key = 表2.key;

非等值连接

Mysql总结-桃李博客

自连接

#select 查询列表
#from 表 别名1,表 别名2
#where 等值连接;
SQL99语法

语法

select 查询列表
from 表1 别名 【连接类型】
join 表2 别名
on 连接条件
where 筛选条件

分类

内连接: inner

外连接: left【outer】

​			左外: left【outer】

​			右外: right【outer】

​			全外: full【outer】

交叉连接:cross

内连接

Mysql总结-桃李博客

外连接

Mysql总结-桃李博客

全外

Mysql总结-桃李博客

交叉连接

select 查询列表
from 表1 别名
cross join 表2 别名;

子查询

Mysql总结-桃李博客

分页查询

Mysql总结-桃李博客
Mysql总结-桃李博客

union联合查询

语法

查询语句1
union
查询语句2
union
...

DML语言

插入语句

#①
insert into 表名(列名,...)
values(值1,....);
#②
insert into 表名
set 列名=值,列名=值....

修改语句

update 表名
set 列=新值,列=新值...
where 筛选条件

删除语句

#① 单表删除
delete from 表名 where 筛选条件
#② 
truncate table 表名;

Sql192语法

# 多表删除
delete 表1的别名,表2的别名
from 表1 别名。表2 别名
where 连接条件
and 筛选条件

Sql199语法

# 多表删除
delete 表1的别名,表2的别名
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件;

DDL

创建:create
修改:alter
删除:drop
库的管理
create database [if not exists] 库名;

#更改库的字符集
alter database books character set 编码;
库的删除
drop database [if exists] books;
表的创建
create table 表名{
		别名 列的类型[(长度) 约束],
		别名 列的类型[(长度) 约束],
		别名 列的类型[(长度) 约束],
		...
		别名 列的类型[(长度) 约束],
}
表的修改

修改列名

alter table book change column 旧列名 新列名 datetime;

修改列的类型或约束

alter table book modify column 列名 timestamp;

添加新列

alter table author add column 列名 double;

删除列

alter table author drop column 列名;

修改表名

alter table author rename to 表名;
表的删除
drop table [if exists]表名;

表的复制

#仅仅只复制表的结构
create table copy like 表名;
#复制表的结构+数据
create table copy2
select * from 表名;
#只复制部分数据
create table copy3
select id,name 
from 表名
where nation = 中国;
# 仅仅复制某些字段
create table 表名
select id,au_name
from author
where 1=2;

常见的数据类型

数值型:
		整数
		小数:
				定点数
				浮点数
字符型:
		较短的文本:char、varchar
		较长的文本:text、blob(较长的二进制数据)
日期型
整型
Mysql总结-桃李博客
浮点型
Mysql总结-桃李博客
Mysql总结-桃李博客
字符型
Mysql总结-桃李博客
日期型
Mysql总结-桃李博客

常见约束

create table 表名(
	字段名 字段类型 约束
)
Mysql总结-桃李博客
Mysql总结-桃李博客
创建表时添加约束

直接在字段名和类型后面追加 约束类型即可

create table stuinfo(
		id INT PRIMARY KEY,
    	stuName VARCHAR() NOT NULL,
    	gender CHAR(1) CHECK(gender='男' OR gender='女'),检查
    	seat INT UNIQUE,#唯一
    	age INT DEFAULT 18,#默认约束
)
添加表级约束
#表级约束加在最后
create table stuinfo(
		id INT ,
    	stuName VARCHAR(),
    	gender CHAR(1),
    	seat INT ,
    	age INT,
        CONSTRAINT A PRIMARY KEY(id), #id约束
);

主键和唯一的对比

Mysql总结-桃李博客

外键的特点

  1. 要求在从表设置外键关系
  2. 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
  3. 主表的关联列必须时一个key(一般是主键或者唯一)
  4. 插入数据时,先插入主表,再插入从表,删数据时,先删从表,再删主表
修改表时添加约束
Mysql总结-桃李博客
#添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
#添加默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
#添加主键
#①列级约束
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
#②表级约束
ALTER TABLE stuinfo ADD PRIMARY KEY(id);
#添加唯一
#①列级约束
ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
#②表级约束
ALTER TABLE stuinfo ADD UNIQUE(seat);
#添加外键
ALTER TABLE stuinfo ADD FOREIGN KEY(majorid) REFERENCES major(id);
修改表时删除约束
#删除非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
#删除默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT ;
#删除主键
ALTER TABLE stuinfo DROP PRIMARY KEY;
#删除唯一
ALTER TABLE stuinfo DROP INDEX seat;
#删除外键
ALTER TABLE stuinfo DROP FOREIGN KEY majorid;

标识列

创建表时设置标识列
CREATE TABLE 表名(
		id INT PRIMARY KEY AUTO_INCREMENT,#添加表示列
		NAME VARCHAR(20)
);
Mysql总结-桃李博客
修改表时设置标识列
ALTER TABLE tab_identity MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;
修改表时删除标识列
ALTER TABLE tab_identity MODIFY COLUMN id INT ;

TCL语言(Transaction 事务控制语言)

Mysql总结-桃李博客
事务的创建

隐式事务

事务没有明显的开始和结束标记

比如:insert update delete语句

delete from 表 where id = 1;

显示事务

事务具有明显的开启和结束标记

**前提:**必须先设置自动提交功能为禁用 set autocommit=0;

步骤1:开启事务

set autocommit=0;
start transaction; #可选的
# 步骤2:编写事务中的SQL语句(select insert update delete)
# 步骤3:结束事务
commit; #提交事务
rollback; #回滚事务

例子:

#开启事务的语句:
update 表 set zs的余额=500 where name='zs'
#结束事务的语句:
update 表 set gx的余额=1500 where name='gx'
事务的隔离级别

事务的隔离级别

Mysql总结-桃李博客
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 a;

MySQL中默认 从第三个隔离级别repeatable read

Mysql总结-桃李博客
Mysql总结-桃李博客

视图

创建视图
create view 视图名
as
# 查询语句;
视图的修改
#方法一
create or replace view 视图名
as
查询语句;
#方法二
alter view 视图名
as
查询语句;
删除视图
drop view 视图名,视图名,...;
查看视图
desc 视图名;
show create view 视图名;
视图的更新
create or replace view 视图名;
as
select last_name,email,salary*12*(1+ifnull(commission_pct,0)) "annual salary"
from employees;
Mysql总结-桃李博客

变量

系统变量
#查看所有的系统变量
show global| [session] variables;
#查看满足条件的部分系统变量
show global| [session] variables like '%char%';
#查看指定的某个系统变量的值
select @@global| [session].系统变量名;
#为某个系统变量赋值
1. set global| [session] 系统变量名=值;
2. set @@global| [session].系统变量名=值;
会话变量
#查看所有的会话变量
show session variables;
#查看满足条件的部分会话变量
show [session] variables like '%char%';
#查看指定的某个会话变量的值
select @@session.会话变量名;
select @@会话变量名
#为某个会话变量赋值
1. set session 会话变量名=值;
2. set @@session.会话变量名=值;
自定义变量

用户变量

赋值的操作符:=或:=

# 声明并初始化
set @用户变量名=值;或
set @用户变量名:=值;或
set @用户变量名:=值;
# 赋值
1.通过set或select
set @用户变量名=值;或
set @用户变量名:=值;或
select @用户变量名:=值;

2.通过select into
select 字段 into 变量名
from 表;
局部变量
# 声明
declare 变量名 类型;
declare 变量名 类型 default 值;
# 赋值
1.通过set或select
set 用户变量名=值;或
set 用户变量名:=值;或
select @用户变量名:=值;

2.通过select into
select 字段 into 变量名
from 表;
# 使用
select 局部变量名;

储存过程语法

空参列表存储过程

结束标记 $

# 创建语法
create procedure 储存过程名(参数列表)
begin
		存储过程体(一组合法的SQL语句)
end $
# 调用语法
call 存储过程名(实参列表);
# 查看
show create procedure 存储过程名;

参数模式:in out inout

删除存储过程
# 语法:
drop procedure 存储过程名;

函数

创建语法

create function 函数名(参数列表) returns 返回类型
begin
		函数体
end

使用delimiter语句设置结束标记 delimiter $;

调用语法

select 函数名(参数列表)
查看函数
show create function 函数名;
删除函数
drop function 函数名;

流程控制结构

Mysql总结-桃李博客
分支结构

if函数 功能:实现简单的双分支

# 语法
if(表达式1,表达式2,表达式3)

case结构

case 变量|表达式|字段
when 要判断的值 then 返回的值1
when 要判断的值 then 返回的值2
...
else 要返回的值n
end

if结构 功能:实现多重分支

if 条件1 then 语句1;
elseif 条件2 then 语句2;
...

[else 语句n;]

end if; # 应用场合:在begin end中

循环结构

分类

while loop repeat 

循环控制

iterate类似于 continue 继续,结束本次循环,继续下一次
leave类似于 break 跳出,结束当前所在的循环
# while
while 循环条件 do
		循环体;
end while [标签];
#loop
[标签] loop
		循环体;
end loop [标签];
#repeat
[标签]repeat
		循环体;
until 结束循环的条件
end repeat [标签];
Mysql总结-桃李博客