【MySQL语言汇总[DQL,DDL,DCL,DML]以及使用python连接数据库进行其他操作】

MySQL语言汇总[DQL,DDL,DCL,DML]

  • SQL分类
  • 1.DDL:操作数据库,表
    • 创建 删除 查询 修改
      • 对数据库的操作
      • 对表的操作
      • 复制表(重点)!!!!!
  • 2.DML:增删改表中数据
  • 3.DQL:查询表中的记录
    • 语法顺序
    • 基础查询
    • where 子句后面跟的条件
    • if 和 case when语句
    • 字符串函数拼接
    • 聚合函数
    • 分组查询
    • 分页查询 limit
  • 4.DCL (管理用户授权)
    • 1.管理用户
        • 添加,删除,修改,查询用户:
    • 2.权限管理:
      • 查询权限:
      • 授予权限:
      • 撤销权限:
  • 5.多表查询
    • 子查询
    • 约束
      • 主键约束
      • 外键约束
  • 6.用Python连接数据库进行调用和操作

SQL分类

在这里插入图片描述

1.DDL:操作数据库,表

创建 删除 查询 修改

对数据库的操作

# 创建数据库
create database 数据库名称;
# 查询数据库和表名
show databases;
show tables;
# 查看数据库的建库语句  表的建表语句
show create database 数据库名称;
show create table 表名称;
# 删除数据库
drop database 数据库名称;
# 使用数据库
use 数据库名称;
# 查看当前正在使用的数据库名称
select database();
# 修改数据库的字符集
alter database db4 character set utf8;

对表的操作

完整的建表语句
请添加图片描述

# 创建一个表
create table 表名(列名1 数据类型1,列名2 数据类型2......列名3 数据类型n
);
# 查询表
show tables;
# 查看表结构
show create table 表名;
# 修改表名
rename table 表名 to 新表名;
alter table 表名 rename to 新表名;
# 修改表的字符集
alter table 表名 character set 字符集名称;
# 查看某张表的字符集
show create table 表名;
# 添加一列
alter table 表名 add 列名 数据类型;
# 修改列名称 类型
alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;
# 删除列alter table 表名 drop 列名;
# 删除表
drop table 表名;

复制表(重点)!!!!!

-- 复制表的结构
create table if not exists 表名 like 被复制的表名;
-- 新建一个查询表的内容
create table if not exists 表名 as select语句;

在这里插入图片描述
这个方法 就是把一个你想要的临时表变成一个表 保存起来非常好用!!!
在这里插入图片描述
在这里插入图片描述

2.DML:增删改表中数据

# 向表中添加数据
insert into 表名
(列名1,列名2,列名3......,列名n) 
values(1,2,......值n);
# insert select 将select查询出来的数据插入到目标表中
insert into 表名 select语句;# 删除数据
delete from 表名 [where条件]; 如果没有where条件则是删除这个表中的所有记录
如果行删除所有记录推荐使用 
truncate table 表名; (截断表 删除这个表在重新创建)# 修改数据
update 表名 set 列名1 =1,列名2 =2,......[where条件];
如果不加where条件则是全部修改

3.DQL:查询表中的记录

语法顺序

select字段列表
from表名列表
where条件列表
group by分组字段
having分组之后的条件
order by排序
limit分页限定

基础查询

# 多个字段的查询
select 字段名1,字段名2... from 表名;
去除重复:distinct 去除重复的数据 全部去重# select 列的时候可以添加一些四则运算法则
select age + 4 as new_age from student;# 排序查询
order by 排序字段1 排序方式1,排序字段2 排序方式2...;
DESC:降序  

where 子句后面跟的条件

><<=>==<> 可以用符号表示 大于小于
BETWEEN...AND 在这两个条件之间 !! 是左闭右闭的区间
IN(集合) -- 集合可以写成子查询  但是结果应该只有一列
LIKE:模糊查询_:单个任意字符%:多个任意字符
IS NULL 
IS NOT NULL
count(字段名) 时注意null的列
注意 null 和 空字符串'' 的区别  null是什么都没有  ''这是空的字符串 是有东西的
and
or
not   # 举例
SELECT * FROM student WHERE age > 20;
SELECT * FROM student WHERE age >= 20;
SELECT * FROM student WHERE age =20;
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;
SELECT * FROM student WHERE age >=20 && age <=30;
SELECT * FROM student WHERE age >=20 AND age <=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
SELECT * FROM student WHERE age=22 OR age=20 OR age=25;
SELECT * FROM student WHERE age IN(22,18,55);
SELECT * FROM student WHERE english IS NOT NULL;
SELECT * FROM student WHERE NAME LIKE '马%'; # 匹配姓马的
SELECT * FROM student WHERE NAME LIKE "_化%"; #匹配名字第二个是化的
SELECT * FROM student WHERE NAME LIKE "___"; ## 匹配名字是三个的学生
SELECT * FROM student WHERE NAME LIKE "%景%" 
show variables like "%char%"

if 和 case when语句

-- if(condition,true_act,false_act) 函数 case when 的写法# 条件      true   false
select *,IF(age > 22,"old",'young') as age_type  from students;
# if 语句嵌套
select *,IF(age > 22,# 年龄>22   并且>23     false 是年龄>22 但是<=23if(age>23,'big old','little old'),'young') as age_type  from students;# case when 语句 用end 结尾
select *,case when age=22 then "young"when age=23 then 'little old'when age=24 then 'big old'else 'little young' end as typefrom students;

字符串函数拼接

-- 字符串函数
-- 字符串拼接
-- concat(*strs) 如果字符串中有null 结果就是null
select CONCAT(name,',',gender,',','a') from students; # 将这些字符串合并起来成为一个
select CONCAT(name,gender,'a',null) from students;
-- CONCAT_WS(separator,str1,str2,...) 中间有分隔符 他会过滤null
select CONCAT_WS(',',name,gender,'a',null,'b') from students;-- 字符串切分
-- SUBSTR(str FROM pos FOR len) , SUBSTR(str,pos),SUBSTR(str,pos,len)
select *,SUBSTR(name,2) from students; # 切分前两个
select *,SUBSTR(name,1,2) from students; # 从第一个开始 切两个
select *,SUBSTR(name from 1 for 2) from students; 
select *,SUBSTRING(name,1,2) from students;-- STRCMP 字符串对比
select *,STRCMP(SUBSTR(name,1,1),'施') from students;
# 切分第一个姓氏过后 与‘施’对比 选择施姓的
-- 数字类型的函数
select *,ABS(age),COS(age),LENGTH(clazz) from students;

聚合函数

将一列数据作为一个整体,进行纵向的计算
注意:聚合函数的计算,排除null值(可使用ifnull函数)# max:计算最大值
SELECT MAX(math) FROM student;# min:计算最小值
SELECT MIN(math) FROM student;# sum:计算和
SELECT SUM(english) FROM student;# avg:计算平均值
SELECT AVG(math) FROM student;

分组查询

语法:group by 分组字段
1.分组之后查询的字段:分组字段、聚合函数
2.wherehaving的区别?
​        where在分组之前进行限定,如果不满足条件,则不参与分组。
​        having在分组之后进行限定,如果不满足结果,则不会被查询出来
​        where后不可以跟聚合函数,having可以进行聚合函数的判断# 按照性别分组,分别查询男、女同学的平均分
SELECT sex,AVG(math) FROM student GROUP BY sex;# 按照性别分组,分别查询男、女同学的平均分,人数
SELECT sex,AVG(math),COUNT(id) FROM student GROUP BY sex;# 按照性别分组,分别查询男、女同学的平均分,人数 要求:分数不低于70分的人,不参与分组。
SELECT sex,AVG(math),COUNT(id) FROM student WHERE math>70  GROUP BY sex;# 按照性别分组,分别查询男、女同学的平均分,人数 要求:分数不低于70分的人,不参与分组,分组之后,人数大于2人。
SELECT sex,AVG(math),COUNT(id) FROM student WHERE math>70  GROUP BY sex HAVING COUNT(id)>2;

分页查询 limit

开始的索引 = (当前的页码 -1) * 每页显示的条数

SELECT * FROM student LIMIT 0,3; 第一页
SELECT * FROM student LIMIT 3,3;  第二页
SELECT * FROM student LIMIT 6,3;  第三页

4.DCL (管理用户授权)

1.管理用户

添加,删除,修改,查询用户:
关闭密码复杂验证
set global validate_password_policy=0;
set global validate_password_length=1;# 用root用户添加一个新用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
例子: 
CREATE USER 'zhangsan'@'localhost' IDENTIFIED BY '123';
CREATE USER 'lisi'@'%' IDENTIFIED BY '123';# 删除用户
DROP USER '用户名'@'主机名';
例子:
DROP USER 'zhangsan'@'localhost';# 修改用户密码
SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
例子:
set password for 'lisi'@'%' = password('234567');# 查询用户
USE mysql;
select * from user;
通配符: % 表示可以在任意主机使用用户登录数据库 

2.权限管理:

查询权限:

 SHOW GRANTS FOR '用户名'@'主机名';SHOW GRANTS FOR 'lisi'@'%';

授予权限:

grant 权限列表 on 数据库名.表名 to '用户名'@'主机名' [with grant option];例子:
-- 将数据库db3下account表的SELECT ,DELETE, UPDATE权限授予用户'lisi'@'%'
GRANT SELECT ,DELETE, UPDATE  ON db3.account TO 'lisi'@'%';-- 给zhangsan用户所有权限  
GRANT ALL  ON *.* TO 'zhangsan'@'localhost'

撤销权限:

revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';例子:
-- 将用户'lisi'@'%'对于表db3.account的更新权限撤销
REVOKE UPDATE ON db3.account FROM 'lisi'@'%';-- 给lisi用户撤销所有权限
REVOKE ALL ON *.* FROM 'lisi'@'%';

5.多表查询

内连接 左连接 外连接

子查询

查询中嵌套查询,称嵌套查询为子查询

-- 查询工资最高的员工信息
-- 1.查询最高的工资是多少 9000
SELECT MAX(salary) FROM emp;
-- 2.查询员工信息,并且工资等于9000的
SELECT * FROM emp WHERE emp.salary=9000;
-- 一条sql就完成这个操作
SELECT * FROM emp WHERE emp.salary = (SELECT MAX(salary) FROM emp);--子查询可以作为条件,使用运算符去判断。  运算符:> >= < <= =
--查询员工工资小于平均工资的人
SELECT * FROM emp WHERE emp.salary < (SELECT AVG(salary) FROM emp);--子查询可以作为集合,使用in、not int
--查询财务部和市场部所有员工信息
SELECT id FROM dept WHERE `NAME`='财务部' OR `NAME`='市场部';
SELECT * FROM emp WHERE dept_id=3 OR dept_id=2;
--使用子查询
SELECT * FROM emp WHERE dept_id in (SELECT id FROM dept WHERE `NAME`='财务部' OR `NAME`='市场部');--子查询可以作为一张虚拟表参与查询
--查询员工入职日期是2011-11-11日之后的员工信息和部门信息
-- 子查询
select * from dept t1 (select * from emp where emp.join_date > '2011-11-11') t2 where t1.id = t2.dept_id;
--普通内连接查询
select * from emp t1,dept t2 where t1.dept_id = t2.id and t1.join_date > '2011-11-11'  union 表的拼接 但是拼接时表的结构需要完全相同
* union 对数据进行去重
* union all

约束

主键约束

需要记住的为主键约束 : 条件 唯一 且非空
primary key
含义:非空且唯一
主键就是表中记录的唯一标识

CREATE TABLE stu (id INT PRIMARY KEY,  -- 给id添加主键约束NAME VARCHAR(20)
);ALTER TABLE stu DROP PRIMARY KEY; -- 去除主键
alter table stu modify id int; -- 移除not null的限约束ALTER TABLE stu MODIFY id INT PRIMARY KEY;  

外键约束

还有一个外键约束
foreign key,让表与表产生关系,从而保证数据的正确性。

create table 表名(外键列constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) 
);添加级联操作
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键列名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE;当修改一个表的值之后 另一个表的值也会修改 保证了数据的正确性

6.用Python连接数据库进行调用和操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/198107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jsp在线辅助教育系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 在线辅助教育系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

工厂生产数据展示基本布局Demo(提供素材)

效果图&#xff1a; <template><div class"app-container"><a-row :span"24"><a-col :span"12"><div class"divBox"><div class"flexBoxs"><div style"margin: 2px 5px;"…

在windows server系统下,快速部署自己的网站

目录 xampp简介xampp的作用xampp的安装方法Apache简介Apache的作用 本文主要介绍使用xampp软件包在windows server系统下&#xff0c;快速部署自己的网站。 xampp简介 XAMPP是一款基于Apache、MySQL、PHP和Perl的开源Web服务器软件包。XAMPP支持多个操作系统&#xff0c;包括W…

go写文件后出现大量NUL字符问题记录

目录 背景 看看修改前 修改后 原因 背景 写文件完成后发现&#xff1a; size明显也和正常的不相等。 看看修改前 buf : make([]byte, 64) buffer : bytes.NewBuffer(buf)// ...其它逻辑使得buffer有值// 打开即将要写入的文件&#xff0c;不存在则创建 f, err : os.Open…

MySQL数据备份

一、逻辑备份 备份的是建表、建库、插入等操作所执行SQL语句&#xff0c;适用于中小型数据库&#xff0c;效率相对较低。 本质&#xff1a;导出的是SQL语句文件 优点&#xff1a;不论是什么存储引擎&#xff0c;都可以用mysqldump备成SQL语句 缺点&#xff1a;速度较慢&…

Mysql分布式集群部署---MySQL集群Cluster将数据分成多个片段,每个片段存储在不同的服务器上

1.1 目的 部署MysqlCluster集群环境 1.2 MySQL集群Cluster原理 1 数据分片 MySQL集群Cluster将数据分成多个片段&#xff0c;每个片段存储在不同的服务器上。这样可以将数据负载分散到多个服务器上&#xff0c;提高系统的性能和可扩展性。 2. 数据同步 MySQL集群Cluster使…

c++--运算符重载

1.重载的运算符 (1).重载运算符函数的参数数量与该运算符作用的运算对象数量一样多。 (2).除了重载的函数调用运算符operator()之外&#xff0c;其他重载运算符不能含有默认实参。 (3).对一个重载的运算符&#xff0c;其优先级和结合律与对应的内置运算符保持一致。 (4).当一个…

2022年全国大学生数据分析大赛医药电商销售数据分析求解全过程论文及程序

2022年全国大学生数据分析大赛 医药电商销售数据分析 原题再现&#xff1a; 问题背景   20 世纪 90 年代是电子数据交换时代&#xff0c;中国电子商务开始起步并初见雏形&#xff0c;随后 Web 技术爆炸式成长使电子商务处于蓬勃发展阶段&#xff0c;目前互联网信息碎片化以…

css实现正六边形嵌套圆心

要实现一个正六边形嵌套圆心&#xff0c;可以使用CSS的::before和::after伪元素以及border-radius属性。以下是具体的解析和代码&#xff1a; 使用::before和::after伪元素创建正六边形。设置正六边形的背景色。使用border-radius属性使正六边形的内角为60度。在正六边形内部创…

【matlab程序】matlab画子图的多种样式

【matlab程序】matlab画子图的多种样式

【漏洞复现】速达软件存在任意文件上传

漏洞描述 速达软件全系产品存在任意文件上传漏洞,未经身份认证的攻击者可以通过此漏洞上传恶意后门文件,执行任意指令,造成服务器失陷 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、…

fastadmin列表头部按钮批量上传视频

上传界面通过layui生成 index.html <a href="{:url(video/piliangadd)}" class="btn btn-success btn-piliangadd btn-dialog {:$auth->check(video/piliangadd)?:hide}" title="批量上传" ><i class="fa fa-plus">…

flask之邮件发送

一、安装Flask-Mail扩展 pip install Flask-Mail二、配置Flask-Mail 格式&#xff1a;app.config[参数]值 三、实现方法 3.1、Mail类 常用类方法 3.2、Message类&#xff0c;它封装了一封电子邮件。构造函数参数如下&#xff1a; flask-mail.Message(subject, recipient…

【产品经理】业务问题的诊断:由简入繁,渐进成长

产品的价值在于解决了用户的问题。业务问题的诊断&#xff0c;发现用户的真实问题&#xff0c;拨云见日。 产品的价值在于解决了一定范围的问题&#xff0c;让整体的业务运转、参与角色都能收到因为产品的贡献而产生的价值或便利。微信解决了熟人之间的沟通问题&#xff0c;支付…

【React + Typescript】使用WebPack包管理、各种扩展插件组成的初始模板,开源协议:CC-BY-4.0

React Typescript Webpack 模板 模板展示项目结构使用的部分扩展包页面配置代码Layout 公共容器组件路由Jspackage.json 开源模板下载TIP 模板展示 项目结构 使用的部分扩展包 &#x1f4c2; System ├── &#x1f4c2; Plugin │ ├── &#x1f4c4; file-loader | 在处…

idea连接mysql详细讲解

IDEA连接mysql又报错&#xff01;Server returns invalid timezone. Go to Advanced tab and set serverTimezone prope 前进的道路充满荆棘。 错误界面 IDEA连接mysql&#xff0c;地址&#xff0c;用户名&#xff0c;密码&#xff0c;数据库名&#xff0c;全都配置好了&…

Mybatis异常org.apache.ibatis.binding.BindingException: Parameter “xxx“ not found

问题1: 可能是 mybatis 的xml&#xff0c;对应的mapper接口缺少Param注解&#xff0c;或者Param注解的value与xml的不一致 切记只要参数不是一个集合类型向下图或者多个参数值就要加Param注解 问题2: mybatis的xml&#xff0c;存在多余的注释。注释中包含#{}、${}。注释掉的代…

行云海CMS SQL注入漏洞复现

0x01 产品简介 行云海cms是完全开源的一套CMS内容管理系统,简洁,易用,安全,稳定,免费。 0x02 漏洞概述 行云海cms中ThinkPHP在处理order by排序时可利用key构造SQL语句进行注入,LtController.class.php中发现传入了orderby未进行过滤导致sql注入。攻击者除了可以利用 SQL 注入…

数字艺术语言processing初步

文章目录 示例程序刷新逻辑二维对象 Processing是专门用于艺术设计的编程语言&#xff0c;可以实现非常炫酷的图形和功能&#xff0c;比如下面这张联合国用的图就是用Processing编写的&#xff0c;本文简要介绍以下Processing&#xff0c;并列出其二维对象。 示例程序 第一步&…

删除PPT文件的备注内容

解决方案的工作经常汇报以及经常做ppt的回报工作&#xff0c;但是删除备注很痛苦。 在网上或者拿历史的ppt文件修改后&#xff0c;需要删除ppt备注内容以及删除ppt个人文件信息的办法&#xff1a; 现象&#xff1a;很多备注信息&#xff0c;需要删除 解决办法一、 文件--信息-…