目录

1.DDL数据库操作(dataBase definition language(数据定义语言)

1.1.数据表操作

2.DML数据库操作(dataBase Manipulation language(数据操作语言)

3.DQL数据库操作(dataBase query language(数据查询语言))

3.1数据表的关联关系

3.2连接查询

3.3子查询/嵌套查询

4 存储过程

4.1存储过程的创建

4.2存储过程中流程控制

4.3存储过程管理

5 触发器(只有,insert/delete/update时才会触发)

6 视图(由数据库中一张表或者多张表根据特定的条件查询出的数据构造成的虚拟表

6.1 视图特性

6.2 视图操作

7 索引(B+Tree)

7.1创建索引

7.2索引的使用


1.DDL数据库操作(dataBase definition language(数据定义语言)

## 查看指定数据库创建时的sql指令

show databases

## 查看指定数据库创建时的sql指令

show create database graduation_wz

## 创建数据库

create database graduation_wz

## 创建数据库 如果不存在

create database if not exists graduation_wz

## 创建数据库 并设置编码

CREATE database if not exists graduation_wz character set utf8

##删除数据库

drop database if exists <dbname>

##使用数据库

use <dbname>

1.1.数据表操作

## 查看所有数据表

SHOW TABLES

## 查看表的详情

DESC <tableName>

## 删除表如果表存在

DROP table if exists <tableName>

## 修改表名

ALTER TABLE tb_store RENAME store

## 修改表的字符集,默认和数据库一样

alter table store character set utf8

## 添加字段

alter table store add store_type varchar(100)

## 删除字段

alter table store drop column store_type

## 修改字段的类型

alter table store modify store_states varchar(200)

## 修改字段的列名和类型

alter table store change store_states states varchar(2)

## 删除表的主键约束

alter table store drop primary key

## 删除表的外键约束 (删除需要带上外键名称)

alter table store drop foreign key PK_STUDENT_CLASS

## 添加表的主键约束

alter table store modify store_id varchar(32) primary key

# 常见约束?
# 1.非空约束(not null): 限制此列的值必须提供,不能为null
# 2.唯一约束(unique): 在表中该列的值不能重复
# 3.主键约束(primary key): 非空+唯一 能够唯一标识数据表中的一条数据
# 4.外键约束(foreign key): 建立不同表之间的关联关系

2.DML数据库操作(dataBase Manipulation language(数据操作语言)

## 插入语句
insert into test values('1','张三')
insert into test ( id ) values ('2')## 删除语句
delete from test## 修改语句
update test set id = '1',name = '李四' where id = '1'

3.DQL数据库操作(dataBase query language(数据查询语言))

## 多条件查询连接关键字(and, or,not(取反))
select * from test where id not between '1' and '2'## 模糊查询(%表示任意多个字符,_表示一个字符)
select * from test where name like '%李四'## 查询去重复
select distinct * from test## 排序asc(升序) desc(降序)先按照id进行排序,如果id相同的再通过name排序
select * from test order by id desc,name desc

## 日期函数
## 当我们向日期类型的列添加数据时,可以通过字符串类型赋值(字符串格式必须为yyyy-MM-dd hh:mm:ss)
## 获得当前时间 用 now() 或者 sysdate()

## 字符串函数

## upper()将字段的英文字母转化成大写 lower()将字段的英文字母转化成小写
select upper(name) from test
select lower(name) from test
## substring()截取字符串,concat(col,col)
select substring(name,1,1) from test
select concat(id,'-',name) from test

## 分组查询(group by)

## select 后使用 *,显示的是对分组查询后的每一组的第一条数据
## 只有出现 group by 时才可以使用 having(对分组后的数据进行过滤)
select type,sum(id),avg(id),count(*) from test where id >= 1 group by type having count(*) > 1 order by id desc

## 分页查询(limit) 0 表示 数据的索引,3 表示 显示的条数

select * from test limit 0 , 3

3.1数据表的关联关系

## 一对一关联
# 1.主键关联--两张数据表中主键相同的数据为相互对应的数据
# 2.唯一外键--在任意一张表中添加一个字段添加外键约束与另一张表主键关联,并将外键添加唯一约束。

## 一对多,多对一
# 1.设置外键--在多的一方表中添加一个字段添加外键约束与另一张表主键关联。

## 多对多
# 1.新建关系表--在关系表中定义两个外键,分别与两个数据表的主键相关联。

## 外键的创建
1.在创建表的时候创建

create table class(class_id int primary key auto_incremment,class_name varchar(32) not null unique,class_remark varchar(200)
)create table student(stu_num varchar(32) primary key,stu_name varchar(32) not null unique,cla_id int,constraint PK_STUDENT_CLASS foreign key(cla_id) references class(class_id)
)

2.创建好表后在给其添加外键

alter table student add constraint FK_STUDENT_CLASS foreign key(cla_id) references class(class_id)

3.外键约束-级联操作 在创建外键时 添加 级联操作

on update cascade(级联修改)
on delete cascade (级联删除)
alter table student add constraint FK_STUDENT_CLASS foreign key(cla_id) references class(class_id) on update cascade on delete cascade

3.2连接查询

内连接查询(inner join)
select * from student inner join class
# 笛卡尔积(A表&B表):使A表中的每条记录和B表中的每条记录关联,笛卡尔积的总数 = A表记录的数量*B表记录的数量
# 如果直接执行连接查询会生成两张表的笛卡尔积(即用student表中的每条记录去和class表中的每条记录相匹配)连接条件
1.where:是在两张表产生笛卡尔积后,在通过条件来对生成的笛卡尔积进行筛选的(效率不高)
select * from student inner join class where student.cls_id = class.class_id
2.on : 通过on设置两张表进行连接查询的匹配条件(效率高)
select * from student inner join class on student.cls_id = class.class_id 结果:只获取两张表中匹配条件成立的数据,任意一张表在另一张表,如果没有找到对应的匹配则不会出现在查询结果中#左连接 (left join)
#结果:显示左边表中的所有数据,如果在右表中有对应的匹配关系,则进行匹配,如果右表中不存在匹配数据,则显示为null
select * from student left join class on student.cla_id = class.class_id#右连接(right join)
# 结果:显示右边表中的所有数据,如果在左表中有对应的匹配关系,则进行匹配,如果左表中不存在匹配数据,则显示为null
select * from student right join class on student.cla_id = class.class_id

 3.3子查询/嵌套查询

# 单列多行(作为查询条件)//查询所有在Java班级的同学
select * from student where cla_id in (select class_id from class where class_name like 'java%')
# 多行多列(作为虚拟表)//查询所有在java班并且性别是男的同学
select * from (select * from student where cla_id in (select class_id from class where class_name like 'java%')) as t where t.stu_sex = '男'

4 存储过程

# 存储过程:将能够完成特定功能的SQL指令进行封装(SQL指令集),编译之后存储在数据库服务器上,并且为之取一个名字,客户端可以通过名字直接调用这个SQL指令集,获得执行结果。

# 存储过程优点:
 1.SQL指令无需客户端编写,通过网络传送,可以节省网络开销,同时避免SQL指令在网络传输过程中被恶意篡改保证安全性;
 2.存储过程经过编译创建并保存在数据库中,执行过程无需重复进行编译,对SQL执行过程进行了性能优化。
3.存储过程中多个SQL指令之间存在逻辑关系,支持流程控制语句,可以实现复杂的业务。

#存储过程的缺点
1.存储过程是根据不同的数据库进行编译,创建并存储在数据库中的,当我们需要更换数据库时,需要从新编写存储过程。
2.存储过程受限于数据库产品,如果需要高性能的优化会成为一个问题。
3.如果需要对数据库高并发访问,使用存储过程会增加数据库的连接执行时间(因为存储过程是把复杂的业务交给了数据库处理)

4.1存储过程的创建

# 创建一个加法的存储过程:
create procedure add_num (in a int,in b int,out c int)beginset c = a + b;end
# 调用存储过程
set @m = 0 ; -- 定义用户变量(全局变量) @m
call add_num(3,2,@m) -- 调用存储过程获得结果赋值给@m
select @m from dual; -- 参看变量值# 创建一个求输入值的 平方 和 一半相加的结果
create procedure add_test (in int a,out int b)begindeclare x int default 0; --定义局部变量declare y int default 0;set x = a * a;set y = a / 2;set b = x + y;end
set @n = 0; --定义用户变量
call add_test(6,@n);
select @n from dual;# 创建一个求学生数量的总和(把查询结果赋值给变量)
create procedure get_stuNum(out int c)beginselect count(*) into c from student;endset @num = 0;
call get_stuNum(@num)
select @num from student

# 局部变量:定义在存储过程中的变量,只能在存储过程内部使用。(必须定义在存储过程开始)
# 用户变量:相当于全局变量,存放在mysql数据库的数据字典中(dual),使用set关键字直接定义,变量名要以@开头

# 存储过程参数:in(入参),out(出参),inout(即可当入参,又可当出参)# 入参的用法 添加一名学生

create procedure add_student(in stuNum varchar(32),in stuName varchar(32),in claId int,in stuSex varchar(2))begininsert into student values(stuNum,stuName,claId,stuSex);endcall add_student('202202','李四','5','男')

4.2存储过程中流程控制

# 1.分支语句 if-then-else# 单分支语句
create procedure proce_test ( in a int ) beginifa = 1 theninsert into student    values    ( '202203', '王二', '5', '男' ) ;end if;end
call proce_test(1)# 双分支语句
create procedure proce_test2 ( in a int ) beginifa = 1 theninsert into student    values ( '202204', '小红', '5', '女' );else insert into class values ( '2', 'mysql2022', '很棒' );end if;end# 2.多分支 case when
create procedure proce_test2 (in a int) begincase awhen 1 theninsert into student    values ( '202204', '小红', '5', '女' );when 2 theninsert into class values ( '2', 'mysql2022', '很棒' );else --如果不符合上面的条件就执行else中的insert into class values ( '2', 'mysql2022', '很棒' );end case;
end;## 循环语句
# while循环 向class表中循环添加数据
create procedure add_class(in num int)begindeclare x int default 0;while x < num do insert into class(class_name,class_remark) values (concat('java',x),x);set x = x + 1;end while;end # repeat循环 向class表中循环添加数据
create procedure repeat_addClass(in num int)begindeclare x int default 0;repeat insert into class(class_name,class_remark) values (concat('c++',x),x);set x = x + 1;until i >= num     end repeat;end# loop循环 向class表中循环添加数据
create procedure loop_addClass(in num int)begindeclare x int default 0;myloop:loopinsert into class(class_name,class_remark) values(concat('html',x),x);set x = x + 1;if x >= num thenleave myloop;end if;end loop;end

4.3存储过程管理

# 查看存储过程
show procedure status where db = 'test'# 查看存储过程的创建细节
show create procedure test.add_class# 删除存储过程
drop procedure add_class;# 通过存储过程查询出一条数据
create procedure find_one(in a int,out b varchar(32))begindeclare id int default 0;declare name varchar(32) default '';declare remark varchar(32) default '';select class_id,class_name,class_remark into id,name,remark from class where class_id = a;set b = concat_ws('-',id,name,remark);end
set @m = '';
call find_one(1,@m);
select @m from dual;# 通过游标查询多个结果集
create procedure find_all(out result varchar(200))begindeclare id int default 0;declare name varchar(32) default '';declare remark varchar(32) default '';declare num int default 0;declare x int default 0;declare str varchar(32) default '';declare mycursor cursor for select * from class;select count(*) into num from class;open mycursor;while x < num dofetch mycursor into id,name,remark;set str = concat_ws('-',id,name,remark);set result = concat_ws(',',result,str);set x = x + 1;end while;close mycursor;endset @m = '';
call find_all(@m);
select @m from dual

5 触发器(只有,insert/delete/update时才会触发)

# 触发器,就是一种特殊的存储过程,触发器和存储过程一样是一个能够完成特定功能,存储在数据库服务器上的SQL片段,但是触发器无需调用,当对数据库中的数据执行DML操作时自动触发这个SQL片段的执行,无需手动调用。

# 触发器的定义
create trigger <trigger_name><before|after>           --定义触发时机<insert|delete|update>   --定义DML类型ON <table_name>          --监听那个表for each row             --声明为行级触发器(只要操作一条记录就触发触发器执行一次)sql_statement            --触发后要执行的操作# 创建一个触发器(当向学生表中添加信息时向日志表中插入一条日志)
create trigger insert_trigger before insert on student for each rowinsert into student_log values (now(),concat('添加',new.stu_name,'学生信息'));# 创建一个触发器(当向学生表中更新信息时向日志表中插入一条日志)
create trigger update_trigger before update on student for each rowinsert into student_log values (now(),concat('将',old.stu_name,'改为',new.stu_name))# 创建一个触发器(当向学生表中删除信息时向日志表中插入一条日志)
create trigger delete_trigger after delete on student for each row insert into student_log values (now(),concat('删除',old.stu_name,'学生信息'))# 查看触发器
show triggers# 删除触发器
drop trigger <trigger_name>

6 视图(由数据库中一张表或者多张表根据特定的条件查询出的数据构造成的虚拟表

## 视图的作用
# 1安全性:如果我们直接将数据库表授权给用户,那么用户可以CRUD数据表中的所有数据,我们可以把表中公开的部分数据生成视图,授权用户访问视图,用户通过访问视图,获得公开的数据,从而达到将数据库表中的部分数据对用户隐藏。
# 2简单性:如果我们需要查询的数据来源于多张数据表,可以使用多表连接查询来实现,通过视图将这些连表的查询结果对用户开放,用户可以通过查询视图获取多表数据,操作更便捷。# 创建视图

create view <view_name>asselect_statement# 创建一个查看所有学生信息和班级信息的视图
create view v_student asselect s.stu_num,s.stu_name,c.class_name,c.class_remark from student s left join class c on s.cla_id = c.class_id

6.1 视图特性 

1.如果视图是通过查询一个表产生的可以有(增删改查)
 2.如果视图是都过多张数据表产生的就只可以(查询)

单表视图时:在视图中添加数据,数据会被添加到源数据表,删除数据时,原表数据也会被删除,修改数据时,原表数据也会被修改。

视图使用建议:对复杂查询简化操作,并且不会对数据进行修改的情况下使用视图。

# 查看视图 desc <view_name>

6.2 视图操作

# 修改视图
# 方式一:create or replace view v_studentasselect * from student;
# 方式二:alter view v_studentasselect * from student;# 删除视图(删除视图时,不会删除原表数据)
drop view v_student

7 索引(B+Tree)

#索引:就是将数据表中的某一列/某几列的值取出来构造成便于查找的结构进行存储,生成数据表的目录当我们进行数据查询的时候,则先在(目录)中进行查找得到对应的数据地址,然后再到数据表中根据地址快速的获取数据记录,避免全表扫描。

mysql索引分类:
1.主键索引:在数据库表的主键字段创建的索引,这个字段必须被primary_key修饰,每张表只能有一个主键。
 2.唯一索引:在数据库表中的唯一列创建的索引(unique),此列的所有值只能出现一次,可以为null。
3.普通索引:在普通字段上创建的索引,没有唯一性的限制。
4.组合索引:两个及以上字段联合起来创建的索引。

--说明--
 1.在创建数据表时,将字段声明为主键(添加主键约束),会自动在主键字段创建主键索引。
2.在创建数据表时,将字段声明为唯一键(添加唯一约束),会自动在唯一字段创建唯一索引。 

7.1创建索引

# 1.唯一索引
-- 创建唯一索引:创建唯一索引列的值不能重复
-- create unique index <index_name> on 表名(列名)
create unique index index_stuName on student(stu_name)# 2.普通索引
--创建普通索引:不要求创建索引列值的唯一性
-- create index <index_name> on 表名(列名)
create index index_stuSex on student(stu_sex)# 3.组合索引
--创建组合索引
-- create index <index_name> on 表名(列名,列名)
create index indexStuNumOrStuName on student(stu_num,stu_name)# 4.全文索引
--create fulltext index <index_name> on 表明(字段名)

7.2索引的使用

使用:索引创建完成后无需调用,当根据创建索引的列进行数据查询时,会自动使用索引。
(重点):组合索引需要根据创建索引的所以字段进行查询时触发。

# 在命令行窗口查看查询语句的查询规划
explain select * from student where stu_num = '202201'\G;# 查看索引
# 1.命令行查看
show create table student\G;
# 2.查看数据库索引
show indexes from <table_name>;
# 3.查询索引
show keys from student;# 删除索引
drop index index_stuName on student;

# SQL的转义字符是:’(单引号)
# 再sql中查询 值为'5'的列
''5''等于 '5'
select * from student where name = '''5'''

MySql常用语句汇总相关推荐

  1. mysql 查询和修改组合_## 超详细MySQL常用语句,增删查改

    ## MySQL常用语句,增删查改,安装配置mysql服务 ***#新手博客,应届生,谢谢支持哟 记得点赞关注哟*** ***-----sql常见命令:--------*** 安装服务:mysqld ...

  2. Mysql常用语句帅哥特供版

    [TOC] Mysql常用语句帅哥特供版 没错,这里的帅哥指的就是我自己 limit命令 查询 # limit命令 有两个参数, 第一个代表起始,从第几条开始. 第二个代表步长,取多少条. # 但是部 ...

  3. MYSQL常用语句及练习

    一.mysql常用语句 创建,删除和最基本查询: 显示数据库     mysql->show databases; 创建数据库     mysql->create database db; ...

  4. Mysql常用语句,供小白学习使用

    Mysql常用语句 一.Mysql最常用的命令 一.库的基本操作 二.表的基本操作 一.Mysql最常用的命令 1.显示数据库列表: show databases;2.显示库中的数据表: show t ...

  5. MySQL常用语句(CURD)

    文章目录 一.数据库定义语言(DDL) 1.1 库操作 1.2 表操作 二.数据库操纵语言(DML) 2.1 插入 insert 2.2 修改 update 2.3 删除 delete 三.数据库查询 ...

  6. mysql修改字段名称_MySQL增删改查的常用语句汇总

    以下是总结的mysql的常用语句,欢迎指正和补充~ 一.创建库,删除库,使用库 1.创建数据库:create database 库名; 2.删除数据库:drop database 库名; 3.使用数据 ...

  7. 以下是MySQL增删改查的常用语句汇总

    以下是总结的mysql的常用语句,欢迎指正和补充~ 一.创建库,删除库,使用库 1.创建数据库:create database 库名; 2.删除数据库:drop database 库名; 3.使用数据 ...

  8. MySQL增删改查的常用语句汇总

    **以下是总结的mysql的常用语句,欢迎指正和补充~ 一.创建库,删除库,使用库 1.创建数据库:create database 库名; 2.删除数据库:drop database 库名; 3.使用 ...

  9. MySQL常用语句一、连接MySQL格式:mysql-h主机地址-u用户名-p用户密

    一.连接MySQL 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysql bin,再键入命令mysql ...

  10. mysql 语句块语法_MySQL ------ MySQL常用语句的语法 (三十四)

    MySQL常用的语句语法 注意:1. | 符号用来指出几个选中中的一个,因此NULL | NOT NULL 表示给出null 或 not null 2.包含在方括号中的关键字或子句是可选的(如 [li ...

最新文章

  1. oracle系统级别启动数据库
  2. Silverlight运行原理经典问答。
  3. 苹果也像谷歌一样,玩起了自己的X
  4. android源码编译烧鸡,android4.0源码下载 编译 系统体验~图解
  5. RabbitMQ Network Partitions 处理策略
  6. Chapter1-2_Speech_Recognition(LAS)
  7. LeetCode 142 环形链表 II
  8. Java面试 - List和Set比较,各自的子类比较
  9. DLA SQL分析函数:SQL语句审计与分析的利器
  10. SMS中关于xp的sp3补丁的分发
  11. 网吧管理软件常见漏洞四节课
  12. DJYOS开发板系列之一:基于BK7251开发的ZQ1401物联屏开发板
  13. ARM开发软件ADS教程
  14. python实现怼人小程序
  15. am335x硬件定时器使用
  16. 十进制转换成二进制——C语言
  17. weixuan -奥利给turtle
  18. C语言结构体的1字节对齐(代码实现)
  19. Java中如何使用方法?
  20. pxe装机dhcp获取不到_Windows – PXE启动无法通过DHCP获取IP地址,但DHCP在操作系统启动时有效...

热门文章

  1. Java编译器和解释器
  2. 详细设计的工具——程序流程图
  3. 猎豹网校C++ Primer学习笔记
  4. bios error 装系统acpi_win10系统升级后开机提示acpi bios error的解决方法
  5. 鸟哥私房菜linux就该这么学-学习记录
  6. mysql 查询替换语句_MYSQL查询字符替换sql语句
  7. 从实战进阶系列之DNF脚本实战
  8. 基于Java的试题库管理系统(论文+毕业设计)(完整源码可演示)
  9. 基于UDP的网络群聊系统
  10. 活跃android手机,谁能升级2.3?Android手机活跃榜