mysql total语法_mysql基础知识语法汇总整理(二)

news/2024/7/8 3:07:12

insert

/*insert*/

insert into 表名(字段列表) values(值列表);--蠕虫复制 (优点:快速复制数据,测试服务器压力)

insert into 表名1_插入 select (字段列表) from表名2_复制;

例如:create tablecopy(

idint(10) unsigned not null comment 'id',

namechar(20) not null default '' comment '名字')engine=InnoDB default charset=utf8 comment='复制表';insert into copy values(1,'admin_a'),(2,'admin_b'),(3,'admin_c');create tableappend(

idint(10) unsigned not null comment 'id',

namechar(20) not null default '' comment '名字')engine=InnoDB default charset=utf8 comment='插入表';insert into append select * from copy;

a175442110fc78f7844e58657a81e108.png

--主键(唯一索引)重复

insert into 表名(字段列表) values(值列表) on duplicate key update 字段1=值1,字段n=值n;

例如:create tableconflict(

idint(10) unsigned not null primary key comment 'id',

namechar(20) not null default '' comment '名字')engine=InnoDB default charset=utf8 comment='冲突表';insert into conflict values(1,'admin_a');

insert into conflict values(1,'admin_b');--报错 解决:当主键不冲突的时候,相当于一条插入语句;当主键有冲突的时候,相当于一条更新语句.

eb6d07599f7f5a0cfb7f8453cbd9dfe7.png

insert into conflict values(1,'admin_b') on duplicate key update name='admin_b';

fa211a58613e44bfafe0cd94eb68b614.png

select

/*select*/

select [select选项] *|字段列表 [as 字段别名] from 表名 [where子句][group by子句][having子句][order by子句][limit子句];--select选项: 系统在查询到相关数据之后,如何显示.--select选项的两个值:

all: 默认值,保留所有的查询结果.distinct: 去重,去掉重复的查询结果.

例如:create table user(

idint(10) unsigned not null comment 'id',

namechar(20) not null default '' comment '名字',

homevarchar(50) not null default '' comment '家庭地址')engine=InnoDB default charset=utf8 comment='用户表';insert into user values(1,'admin_a','gz'),(2,'admin_b','sh'),(3,'admin_c','bj'),(4,'admin_d','sz');

select all * from user;

679cacc2749acaf71d69522084f9c054.png

select distinct * from user;

806700c418df62cc2397b5e717d17535.png

--关键字 as:可以为每个列使用别名. 适用于简化列标识,避免多个列标识符重复. 也可省略as.

例如:create tablescore(

Mathint(3) not null default 0 comment '数学',

Englishint(3) not null default 0 comment '英语',

Chineseint(3) not null default 0 comment '语文')engine=InnoDB default charset=utf8 comment='成绩表';insert into score values(65,75,85),(75,85,95),(85,95,100);

select Math+English+Chinese from score;

e33e1d10c28b9b7298862e3c8a13e7d9.png

select (Math+English+Chinese) as sum from score;

7f9fcb8d0be2dfd073008df4f2b64c42.png

select (Math+English+Chinese)/3 avg from score;--省略as

c26f1b56e755b829f4577f6ba4797929.png

--虚拟表的名称:dual--Mysql中执行select语句在适当的时候会自动创建一个虚拟表.

select now() from dual;

870fcaf5222d708d92e5955b0f7081a2.png

--where子句 (条件查询)

--从from获得的数据源中进行查询

--整型: 1表示真(返回查询记录);0表示假(不返回记录)

--表达式由运算符和运算数组成.

--运算数: 变量(字段)、值、函数返回值

--比较运算符(常用示例)

, <=, >=, =, !=或<>, IS NULL

between and | not between and --例如: between A and B; 相当于区间[A,B].

in | not in --例如:in表示某个值出现; not in表示没出现在一个集合之中.

is null | is not null --空值查询

like --通配符; _ :代表任意的单个字符; % :代表任意的字符

--逻辑运算符

&&(AND), ||(OR), !(NOT), XOR异或

例如:create tablestudent(

idint(10) unsigned not null auto_increment comment 'id',

namechar(10) not null default '' comment '名字',

scoresmallint(5) not null default 0 comment '成绩',

classvarchar(20) not null default '' comment '班级',primary key(id)

)engine=InnoDB default charset=utf8 comment='学生表';insert into student(name,score,class) values('uzi',100,'A'),('ming',90,'B'),('mlxg',80,'C'),('xiye',95,'A'),('letme',85,'B');

select * from student where id in(1,2,3) and score >95;--查询ID 1,2,3并且score大于95

2ca7d197bb83495d835ac0c642bdbeef.png

select * from student where id between 2 and 5 and name like 'm%';--查询ID 区间[2,5]并且模糊查询name字段以“m”开头的学生信息

681f0bed755c59edf0acbe0868edb317.png

select * from student where id in(5) || score >90;--查询ID 5,或score大于90

5e2e0ad17696003dffc4ddd10927d8d1.png

--group by子句 (分组)

--group by 字段/别名 [排序方式] 分组后排序: asc 升序(默认),desc 降序

--统计函数需配合group by使用:

count 返回不同的非NULL统计值 count(*)、count(字段)sum 求和; max 求最大值; min 求最小值; avg 求平均值

例如:select count(*) as total from student;

e75b98dd5221067249890d1f49123416.png

select class, sum(score) as sum from student group by class desc;--查询各个班级总成绩,分组班级降序.

52756a062371e7a7708f85ecc4150a17.png

select id,class, max(score) as max from student where score>80 group by class;--查询各个班级最高成绩,分数要大于80,分组班级升序.

72da2a7f06b2918fa555def6a83fbed7.png

--having 子句 (条件查询)

--where功能、用法相同,执行时机不同.

--本质区别:where子句是把磁盘上的数据筛选到内存上,而having子句是把内存中的数据再次进行筛选.

--where不可以使用统计函数. 一般需用统计函数配合group by才会用到having

例如:select class, min(score) as min from student where min(score)>80 group by class;--报错

select class, min(score) as min from student group by class having min(score)>80;--查询各个班级最低成绩,分组班级,最低分数大于80

37908836fb30f4d1793f0fcc3103c394.png

--order by子句 (排序)

--order by 字段1[asc|desc],字段n[asc|desc]

--排序: asc 升序(默认),desc 降序

例如:insert into student(name,score,class) values('xiaohu',95,'A');--插入相同班级相同分数,要求多字段排序?

select * from student where score >80 order by score,name desc;--查询score大于80,排序score升序和name降序

bf900cf61665678a4bccd2384e61a66f.png

--limit 子句 (限制查询结果数量)

--limit offset,length 语法解析: offset是指偏移量,默认为0; length是指需要显示的记录数.

--分页示例说明:

$page = 3; //第三页

$pageSize= 10; //页面显示10条记录

$offset= ($page - 1) * $pageSize; //偏移量为20

limit $offset,$pageSize//实现分页 偏移20,显示10

例如:select * from student where score >60 order by score,name desc limit 1,3;--查询score大于80,排序score升序和name降序,偏移量为1,显示3条记录

7043af21b149e70749716badfbca7d62.png

update

/*update*/

update 表名 set 字段1=值1,字段n=值n [where条件] [order by 字段名 asc|desc] [limit];

delete

/*delete*/

delete from 表名 [where条件] [order by 字段名 asc|desc] [limit];

联合查询

/*联合查询 关键字:union*/

--联合查询:就是将多个查询结果进行纵向上的拼接. (select语句2的查询结果放在select语句1查询结果的后面)--语法:

select语句1union [all | distinct]

select语句2union [all | distinct]

select 语句n

例如:查询A班级最高成绩和B班级最低成绩?

(select name, class,score from student where class='A' order by score desc limit 1)union(select name, class,score from student where class='B' order by score limit 1);

bc4cc15033d938667fc6e54f7d665f8a.png

连接查询

/*连接查询*/将多个表的字段进行连接,可以指定连接条件.--交叉连接 cross join

select *|字段列表 from 表名1 cross join表名2;

一张表的一条记录去连接另一张表中的所有记录,并且保存所有的记录包含两个表的所有的字段.

结果上看,就是对两张表做笛卡尔积,有n1*n2条记录.

例如:select * from student cross join score;

0cae1caba74bdb44ab6435bb17dc584d.png

--内连接 inner join

select *|字段列表 from 左表 [inner] join 右表 on 左表.字段 = 右表.字段 [五子句];

数据在左表中存在,同时在右表中又有对应的匹配的结果才会被保存. 如果没有匹配上,数据没有意义不会保存.

通常就是两张表中存在相同的某个字段.(项目中通常是关联主键ID) using() 用法连接两表公共字段. 例如:using(ID)

例如:create tableteacher(

idint(10) unsigned not null auto_increment comment 'id',

namechar(10) not null default '' comment '名字',

classvarchar(20) not null default '' comment '班级',primary key(id)

)engine=InnoDB default charset=utf8 comment='教师班级表';insert into teacher(name,class) values('niuPai','A'),('feng','B');

select student.*, teacher.class as t_class, teacher.name as t_name from student join teacher on student.class = teacher.class;

c932ccb6805b63481a2e49201a29b86a.png

--外连接外 outer join

如果数据不存在,也会出现在连接结果中.--左外连接 left join

select *|字段列表 from 左表 left [outer] join 右表 on 左表.字段 = 右表.字段 [五子句];

如果数据不存在,左表记录会出现,而右表为null填充

例如:select student.*, teacher.class as t_class, teacher.name as t_name from student left join teacher on student.class = teacher.class;

4c355d1cbfc2d5eb176247c495fd6604.png

--右外连接 right join

select *|字段列表 from 右表 right [outer] join 左表 on 右表.字段 = 左表.字段 [五子句];

如果数据不存在,右表记录会出现,而左表为null填充

--自然连接 natural join

自动判断连接条件完成连接.--自然内连接 natural inner join

select *|字段列表 from 左表 natural [inner] join右表;

自然内连接其实就是内连接,这里的匹配条件是由系统自动指定.--自然外连接 natural outer join

自然外连接分为自然左外连接和自然右外连接.匹配条件也是由系统自动指定.--自然左外连接 natural left join

select *|字段列表 from 左表 natural left [outer] join右表;--自然右外连接 natural right join

select *|字段列表 from 右表 natural right [outer] join 左表;

注意:项目中使用最多是内连接和外连接.

子查询

/*子查询*/子查询(内查询)在主查询(外查询)之前一次执行完成,子查询的结果被主查询使用.

使用子查询需用括号包裹.

例如:insert into student(name,score,class) values('rookie',100,'C');select * from student where score=(select max(score) as max from student);--查询班级最高成绩学生的记录

d7c554aaa9a07e2cf44f35c86ebcddcc.png

根据子查询返回值的形式:1.单一值: 返回单行单列的子查询,也叫标量子查询.

例如:select max(score) as max from student;

20b3f6c129e18b839663555d5a9b8d9a.png

2.一列: 返回单列的子查询,也叫列子查询.

例如:select name from student;

ac5f881476bbf3edabd9cfeb93520d68.png

3.一行: 返回一行的子查询,也加行子查询.select *|字段列表 from 表名 where(字段1,字段n)=(行子查询结果)

例如:select * from student where score=(select min(score) as min from student);--查询班级最低成绩学生的记录

f3cdbf78ebed9ee3a111e621473f9b9c.png

4.多行多列: 返回多行多列的子查询,也叫表子查询.

例如:select * from student where class in ('B','C') order by score;--查询B班和C班,排序score字段升序

ffaa5ef56d017f633c6846346d0a8cc9.png

--exists--主要作用就是判断后面的select语句有没有查询到数据.结果为true有返回数据,否则就是false.

例如:select exists (select * from student where name ='uzi');--有

f3157736d9e86355ae0eb3bcc0346000.png

select exists (select * from student where name ='admin');--无

f740a48d862842c6623960d5d885996c.png

视图

/*视图*/视图是一张虚拟表,它表示一张表的部分数据和多张表的综合数据,视图的结构和数据都是建立在基表上.

视图仅仅是一个表结构,视图的数据并不在数据库中存储,数据保存在基表中. 一张表可以创建多个视图.--视图作用

简化业务逻辑,对客户端隐藏真实的表结构

--创建视图

create [algorithm = undefined | merge | temptable] view 视图名称 [(字段列表)]

assql语句

语法解析:1.视图名必须唯一,同时不能与表重名.2.指定视图执行的算法,通过algorithm指定.3.merge: 合并算法,将视图的语句和外层的语句合并后再执行.4.temptable: 临时表算法,将视图执行的结果生成一张临时表,再执行外层语句.5.undefined: 未定义型,用哪种算法有MySQL决定,默认算法merge.6."字段列表"如果存在,数目必须等于select语句检索的列数

例如:create viewv_student (v_name,v_score)as

select name,score from student where score >80;

37842d1d4bbd77b2dfdce39b34ec58fd.png

--查看结构

show create view视图名称--删除视图

drop view [if exists]视图名称

注意: 删除视图后,数据库中的数据依然存在.(对当前视图删除)--修改视图结构

alter view 视图名称 [(字段列表)]

assql语句

事物

/*事物*/事物:是并发控制的基本单位.事务就是一系列的操作,这些操作要么都执行,要么都不执行.(事务中可以保存多个SQL语句. 这些SQL语句是一个整体. 要么都执行,要么都不执行.)--事务操作

--开启事务

start transaction; 或者 begin;--提交事务

commit;--回滚事务

rollback;

注意: 修改事务自动提交set autocommit = 0 | 1 (0:取消自动提交;1:自动提交)--设置为不自动提交,因为Mysql默认自动提交执行

查看:show variables like 'autocommit';

efa530a9c134c97ef534771c52f2b600.png

例如:create tablegoods(

idint(10) unsigned not null auto_increment comment 'id',

goods_namechar(10) not null default '' comment '商品名',

priceint(5) not null default '0' comment '价格',primary key(id)

)engine=InnoDB default charset=utf8 comment='商品表';

start transaction;--开启事物

insert into goods(goods_name,price) values('milk','43');insert into goods(goods_name,price) values('bread','15');commit;--提交事物

36f7713e6e0215aa8905aaa969730fa7.png

begin;--开启事物

insert into goods(goods_name,price) values('book','99');rollback;--回滚事物

1658d0891b286de19ea21e9ed6963d5e.png

--事务的特性

1. 原子性: 事务是一个不可分割的工作单位,事务中的操作要么都执行,要么都不执行.2. 一致性: 事务前后数据的完整性必须保持一致. (事务开始和结束时,外部数据一致. 在整个事务过程中,操作是连续的.)3. 隔离性: 多个用户并发访问数据库时,一个用户的事务不能被其它用户的事物所干扰,多个并发事务之间的数据要相互隔离.4. 持久性: 一个事务一旦被提交,它对数据库中的数据改变就是永久性的.--事务的原理

利用InnoDB的自动提交(autocommit)特性完成. 普通的Mysql执行语句后,当前的数据提交操作均可被其它客户端可见.

事务是暂时关闭“自动提交”机制,需要commit提交持久化数据操作.--注意

1. 数据定义语言(DDL)语句不能被回滚. 比如创建或取消数据库的语句; 创建、取消或更改表或存储的子程序的语句.2. 事务不能被嵌套

用户权限管理

/*用户权限管理*/用户信息表:mysql数据库的下, user表中--创建用户

create user 用户名[@主机地址] identified by '密码';

例如:create user 'user_one'@'localhost' identified by '1234';--创建一个只能本机访问的用户

create user 'user_two'@'192.168.1.204.%' identified by '1234';--创建一个可以局域网访问的用户

create user 'user_three' identified by '1234';--创建一个可全网访问的用户

select host,user,password from user;--查看user表,host用户名和密码

94a9470b7128f7ca27f1b6b5f1cc1259.png

--重命名用户

rename user 老用户名[@老主机地址] to 新用户名[@新主机地址];--设置密码

set password = password('修改密码'); --为当前用户设置密码

set password for 用户名 = password('修改密码'); --为指定用户设置密码

例如:set password for 'user_three' = password('123456789'); --指定'user_three'用户设置密码

ab26a9219b77b3cc53d54e6c6becaa4c.png

--删除用户

drop user 用户名[@主机地址];

例如:drop user 'user_two'@'192.168.1.204.%';--分配权限给用户

grant 权限列表 on *|库名 . *|表名 to 用户名[@主机地址] [identified by "用户密码"] [with grant option];

语法解析:

权限列表:all [privileges]: 表示所有权限; delete:允许使用delete; select:允许使用select; update:允许使用update; insert:允许使用insert 等...*.*:表示所有库的所有表

库名.表名 :表示某库下面的某表

例如:grant update,insert on *.* to user_one@'localhost' identified by "1234" with grant option;

610c733db5879ed71e65d671704183e8.png

--刷新权限

flush privileges;--查看权限

show grants for 用户名[@主机地址];

show grantsfor 'user_one'@'localhost';--查看当前用户权限

show grants;--撤消权限

revoke 权限列表 on *|库名 . *|表名 from 用户名[@主机地址];revoke all privileges, grant option from 用户名[@主机地址];--撤销所有权限

例如:revoke update on *.* from 'user_one'@'localhost';

0e8a2f09e1f3fb96d9d37265d95c67b4.png


http://www.niftyadmin.cn/n/3752784.html

相关文章

mysql中怎么实现Apriori_关联规则Apriori算法及实现(python)

一&#xff0c;概念表1某超市的交易数据库交易号TID顾客购买的商品交易号TID顾客购买的商品T1面包&#xff0c;奶油&#xff0c;牛奶&#xff0c;茶T6面包&#xff0c;茶T2面包&#xff0c;奶油&#xff0c;牛奶T7啤酒&#xff0c;牛奶&#xff0c;茶T3蛋糕&#xff0c;牛奶T8面…

mysql解题思路_BUUCTF-Web-随便注(三种解题思路)

知识点&#xff1a;SQL注入-堆叠注入,sql预处理语句,巧用contact()函数绕过堆叠注入原理:在SQL中&#xff0c;分号(;)是用来表示一条sql语句的结束。试想一下我们在分号(;)结束一个sql语句后继续构造下一条语句&#xff0c;会不会一起执行&#xff1f;因此这个想法也就造就了堆…

odp 加固 mysql_安装使用ODP.Net 问题及说明

最近使用VS2010时发现System.Data.OracleClient不再受微软支持,而是推荐使用Oracle自己的ODP.Net,于是就踏上了纠结的安装ODP.net的道路首先我到oracle的官网注册了账号并下载了ODTwithODAC112021这个版本(http://www.oracle.com/technetwork/database/windows/downloads/index…

stubtotally sutb

OSPF Stub area & Totally stub 一、 实验目的 1、 stub和totally stub区域存在的条件。 2、 它们会对哪几类LSA进行过滤。 3、 它们存在的好处 二、 实验拓扑 三、 Stub区域实验 首先将RIP重发布到area 2 内。查看R1的路由表和OS…

【算法】字符串算法

一、具体 要求&#xff1a;理解知道&#xff0c;一般不要求白板代码书写。 1、暴力求解&#xff08;O(MN)O(MN)O(MN)&#xff09; // Java public static int forceSearch(String txt, String pat) {int M txt.length();int N pat.length();for (int i 0; i < M - N; …

mysql 测试请求时间限制_mysql主从热备中怎么测试延时时间

展开全部使用 bcc 工具观测 MySQL&#xff1a;1)dbstat功能&#xff1a;将 MySQL/PostgreSQL 的查询延迟汇总为直方图语法&#xff1a;dbstat [-h] [-v] [-p [PID [PID ...]]] [-m THRESHOLD] [-u] [-i INTERVAL] {mysql,postgres}选项&#xff1a;{mysql,postgre…

【LeetCode】10. 正则表达式匹配(同剑指Offer19)

一、题目 给你一个字符串 s 和一个字符规律 p&#xff0c;请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。 ‘.’ 匹配任意单个字符 ‘*’ 匹配零个或多个前面的那一个元素 所谓匹配&#xff0c;是要涵盖 整个 字符串 s的&#xff0c;而不是部分字符串。 说明: s 可…

ethereumjs/ethereumjs-vm-4-tests

根据代码发现还要了解的模块有&#xff1a; ethereumjs/merkle-patricia-tree -对应数据存储的数据结构 ethereumjs-blockchain —— 区块链 ethereumjs-block ——区块 levelup —— 数据库ethereumjs-account ——账户状态 在本博客的ethereumjs分类中可见他们的学习文档 其实…