当前位置: 首页 > news >正文

【MySQL】基础操作(DDL,DML,DCL,DQL)

安装教程自行搜索,网上有很多

  • 用户名设置为 root
  • 密码设置为 123456
  • 可以不这样设置,但要记好用户名密码,相关的代码也要自行更改

打开命令提示符程序(win+R打开输入cmd回车)

输入:mysql -uroot -p
回车输入密码即可进入命令行环境,显示:mysql>show databases;  -查看有哪些数据库
use 数据库名  -使用某个数据库
show tables  -查看数据库内有哪些表
exit  -退出MySQL的命令行环境

上述的一些基础命令即SQL语句

在命令提示符里这样敲比较麻烦

我们使用图形化软件DBeaver:Download | DBeaver Community

下载好后一路下一步即可,如要更改路径自行更改

SQL语法特征

  • SQL大小写不敏感
  • SQL可以单行或多行书写,最后以 ; 号结束
  • SQL支持注释:
单行注释:-- 注释内容(--后面一定要有一个空格)
单行注释:# 注释内容(#后面可以不加空格,推荐加上)
多行注释:/* 注释内容 */

数据定义-DDL(Data Definition Language)

SHOW DATABASES;                            # 查看数据库
USE 数据库名称;                             # 使用数据库
CREATE DATABASE 数据库名称 [CHARSET UTF8];  # 创建数据库 []表示可选的,实际使用时删去
DROP DATABASE 数据库名称;                   # 删除数据库
SELECT DATABASE();                         # 查看当前使用的数据库SHOW TABLES; # 查看表(需要先选择数据库)
# 创建表
CREATE TABLE 表名称(列名称 列类型,列名称 列类型,......
);
# 示例:
create table student(id int,name varchar(10),age int
);
# 删除表
DROP TABLE 表名称;
DROP TABLE IF EXISTS 表名称;

数据操纵-DML(Data Manipulation Language)

# 数据插入
# 基础语法:
INSERT INTO[(1,2,...,列N)] VALUES(1,2,...,值N)[,(1,2,...,值N),......];
# 比较抽象,我们来看示例:
insert into student(id) values(101),(102),(103);
insert into student(name,age) values('张三',18),('李四',19),('王五',20);
# SQL中只支持单引号
insert into student values(201,'阿尼亚',8),(202,'哇酷哇酷',10);
# 列的设置可以省略,但后面的values必须与创建的一一对应# 数据删除
# 基础语法:
DELETE FROM 表名称 [WHERE 条件判断];
# 示例:
delete from student where id=101;
delete from student where age<18;# 数据更新
# 基础语法:
UPDATE 表名 SET=[WHERE 条件判断];
# 示例:
update student set name='黄昏' where id=102;
update student set age=22; # 没有where语句会把所有的更改

where条件判断可以使用"and"(且),“or”(或);条件也可以组合用括号括起来

数据控制-DCL(Data Control Language)

用户管理

--查询用户
select * from user;
--创建用户
create user '用户名'@'主机名' identified by '密码';
--修改用户密码
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
--删除用户
drop user '用户名'@'主机名';

权限分类

  1. 数据库级别权限:控制用户对整个数据库的操作权限,如CREATE、DROP、ALTER等。
  2. 表级别权限:控制用户对某个表的操作权限,如SELECT、INSERT、UPDATE、DELETE等。
  3. 列级别权限:控制用户对某个表的特定列的操作权限,如SELECT、UPDATE等。
  4. 存储过程/函数权限:控制用户对存储过程/函数的执行权限,如EXECUTE等。

权限控制

GRANT:授权命令GRANT允许用户授予其他用户对数据库对象的访问权限,例如SELECT、INSERT、UPDATE、DELETE等权限。在此基础上,可以限制被授权用户对数据库对象的访问范围,即限定被授权用户对哪些表、视图、存储过程等对象有权访问。

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';-- 授予 SELECT 权限给 user1 用户
GRANT SELECT ON table1 TO user1;-- 授予 INSERT、UPDATE、DELETE 权限给 user2 用户
GRANT INSERT, UPDATE, DELETE ON table2 TO user2;-- 查看用户有哪些权限
show grants for '用户名'@'ip地址';-- 授予用户所有权限
GRANT ALL PRIVILEGES ON table_name TO user_name;-- 授予角色所有权限
GRANT ALL PRIVILEGES ON table_name TO role_name;
GRANT role_name TO user_name;
-- 即授权角色role_name对表table_name进行所有操作,并将该角色授权给用户user_name

REVOKE命令:允许用户撤销已经授予其他用户的访问权限。同样地,用户可以限定撤销哪些对象的访问权限。

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';-- 撤销 user1 对 table1 的 SELECT 权限
REVOKE SELECT ON table1 FROM user1;-- 撤销 user2 对 table2 的全部权限
REVOKE ALL PRIVILEGES ON table2 FROM user2;-- 撤销角色role_name对表table_name的所有操作,并将该角色从用户user_name中撤销
REVOKE ALL PRIVILEGES ON table_name FROM role_name;
REVOKE role_name FROM user_name;

DENY关键字用于限制用户或角色对某些数据库对象的访问权限,语法如下:

DENY permission [, permission] ON object TO {user | role | PUBLIC} [, {user | role | PUBLIC}] [WITH GRANT OPTION]

具体来说,它可以阻止用户或角色对某个表、视图、存储过程等对象的SELECT、INSERT、UPDATE、DELETE等操作。

其中,permission表示要限制的权限,可以是SELECT、INSERT、UPDATE、DELETE等;object表示要限制访问的对象,可以是表、视图、存储过程等;user或role表示要限制的用户或角色,PUBLIC表示所有用户或角色;WITH GRANT OPTION表示允许被授权的用户或角色再次授权。

-- 禁止用户Alice对表employee的SELECT和UPDATE操作
DENY SELECT, UPDATE ON employee TO Alice

COMMIT和ROLLBACK命令,用于控制事务处理。COMMIT命令用于提交当前的事务,将修改保存到数据库中,而ROLLBACK则用于回滚当前事务,将所有修改都撤销回去。

-- 开始一个事务
BEGIN;-- 执行一些 SQL 操作
INSERT INTO table1 (col1, col2) VALUES ('value1', 'value2');-- 提交事务
COMMIT;-- ---------------------------------------------------------
-- 开始一个事务
BEGIN;-- 执行一些 SQL 操作
INSERT INTO table1 (col1, col2) VALUES ('value1', 'value2');-- 回滚事务
ROLLBACK;

数据备份

  • 导出数据(请在登录mysql数据库之前进行)
# 导出powernode这个数据库中所有的表
mysqldump powernode > e:/powernode.sql -uroot -p1234 --default-character-set=utf8# 导出powernode中emp表的数据
mysqldump powernode emp > e:/powernode.sql -uroot -p1234 --default-character-set=utf8
  • 导入数据第一种方式:(请在登录mysql之前进行)
# 现在登录mysql状态下新建一个数据库
create database powernode;
# 在登录mysql之前执行以下命令
mysql powernode < e:/powernode.sql -uroot -p1234 --default-character-set=utf8
  • 导入数据第二种方式:(请在登录mysql之后操作)
create  database powernode;
use powernode;
source d:/powernode.sql

数据查询-DQL(Data Query Language)

# 数据查询
# 基础语法:
SELECT 字段列表|* FROMWHERE 条件判断;
# 示例:
select id,name from student;
select * from student; #展示所有字段列表的内容
select * from student where name='黄昏';/*分组聚合
基础语法:SELECT 字段|聚合函数 FROM 表 WHERE 条件判断 GROUP BY 列;
聚合函数:
SUM(列) 求和
AVG(列) 求平均值
MIN(列) 求最小值
MAX(列) 求最大值
COUNT(列|*) 求数量
*/
select gender,avg(age) from student group by gender; #按性别分组并把性别和性别对应分组的平均年龄查询/*结果排序
可以对查询的结果使用 ORDER BY 关键字指定某个列进行排序
在后面加 ORDER BY ... [ASC|DESC]
默认ASC 升序ORDER BY 语句也可以使用多个字段来进行排序,当排序的第一个字段相同的情况下,再按照第二个字段进行排序
ORDER BY 后面跟多个字段时,字段之间使用英文逗号隔开,优先级是按先后顺序而定
*/
select * from student where age>20 order by age asc;/*结果分页限制
可以对查询的结果使用 LIMIT 关键字指定显示条数
在后面加 LIMIT n[,m]
*/
select * from student limit 5; #只展示5条数据
select * from student limit 10,5; #从第10条开始,向后取5条/*查询不重复记录
语法:
select distinct 字段 from 表名;
#distinct必须放在最开头
#distinct只能使用需要去重的字段进行操作
#distinct去重多个字段时,含义是:几个字段同时重复时才能会过滤,会默认按左边第一个字段为依据
*/
select distinct hobbid from CLASS1;/*设置别名
在MySQL查询时,当表的名字比较长或者表内某些字段比较长时,为了方便书写或者多次使用相同的表,可以给字段列或表设置别名。使用的时候直接使用别名,方便操作,增强可读性格式:
列的别名:select 字段 as 字段别名 表名;
表的别名:select 别名.字段 from 表名 as 别名;
as可以省略使用场景:
对复杂的表进行查询时,别名可以缩短查询语句的长度
多表相连查询的时候(通俗易懂,简短sql语句)注意:在为表设置别名时,要保证别名不能与数据库中其他表的名称冲突
*/
select address as 地区 from CLASS1; # 将address字段设置别名为"地区"显示# 查询表的记录的数量,以别名显示:以address分组,查询表数据内容,以别名"次数"显示
select address,count(*) as 次数 from CLASS1 group by address;# 利用as,将查询的数据导入到另一个表内
create table CLASS2 as select * from CLASS1;
select * from CLASS1;
select * from CLASS2;
/*
此处as起到的作用:
创建了一个新表,并定义表结构,插入表数据
但是"约束"没有完全复制过来,但是如果原表设置了主键,那么附表的:default字段会默认设置了一个0
*/

参考博文:

https://blog.csdn.net/qq_47128897/article/details/130377479

https://blog.csdn.net/m0_63947499/article/details/131086846

https://blog.csdn.net/weixin_46370595/article/details/129102156

https://blog.csdn.net/zyy1020075955/article/details/127012772

http://www.lryc.cn/news/350597.html

相关文章:

  • 工厂自动化升级改造(3)-Modbus与MQTT的转换
  • InnoDB 事务处理机制
  • Thymeleaf
  • 网络学习(一)|深入了解API网关:定义、功能和关键术语
  • 基于yolov8+flask搭建一个web版本的网页模型预测系统
  • 【北京迅为】《iTOP-3588从零搭建ubuntu环境手册》-第8章 安装编译所需要的依赖包
  • 牛客热题:合并二叉树
  • conda 常用20个命令
  • Git泄露(续)
  • clickhouse卸载与安装
  • npm install [Error]
  • Redisson分布式锁全解析:从基础到红锁,锁定高并发解决方案
  • RocketMQ-Dashboard 控制台使用详解
  • JSP+SQL学生成绩管理系统
  • 5G工业路由器实现驾考科目三实时监控与远程控制
  • 基于微信小程序+JAVA Springboot 实现的【智慧乡村旅游服务平台】app+后台管理系统 (内附设计LW + PPT+ 源码+ 演示视频 下载)
  • 图片中的表格转成word用什么工具好?
  • P1305 新二叉树
  • 设计模式学习笔记 - 回顾总结:在实际软件开发中常用的设计思想、原则和模式
  • CPT7数据保存详细步骤
  • 物联网促进信息化——​青创智通工业物联网解决方案​
  • 服务端Web资源缓存
  • STM32-09-IWDG
  • Android手动下载Gradle的使用方法
  • 2024彩虹医械维修培训邀请
  • 车辆超龄无法注册滴滴司机怎么办理账号
  • MATLAB车辆动力学建模 ——《控制系统现代开发技术》
  • 复杂json解析(其中有一个key的value是json格式的字符串)
  • 线程池的一些问题
  • 企业或者个体户为什么会经营异常?