【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)

sql 复制代码
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)

sql 复制代码
# 数据插入
# 基础语法:
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)

用户管理

sql 复制代码
--查询用户
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等权限。在此基础上,可以限制被授权用户对数据库对象的访问范围,即限定被授权用户对哪些表、视图、存储过程等对象有权访问。

sql 复制代码
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命令:允许用户撤销已经授予其他用户的访问权限。同样地,用户可以限定撤销哪些对象的访问权限。

sql 复制代码
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表示允许被授权的用户或角色再次授权。

sql 复制代码
-- 禁止用户Alice对表employee的SELECT和UPDATE操作
DENY SELECT, UPDATE ON employee TO Alice

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

sql 复制代码
-- 开始一个事务
BEGIN;
 
-- 执行一些 SQL 操作
INSERT INTO table1 (col1, col2) VALUES ('value1', 'value2');
 
-- 提交事务
COMMIT;

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

数据备份

  • 导出数据(请在登录mysql数据库之前进行)
sql 复制代码
# 导出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之前进行)
sql 复制代码
# 现在登录mysql状态下新建一个数据库
create database powernode;
# 在登录mysql之前执行以下命令
mysql powernode < e:/powernode.sql -uroot -p1234 --default-character-set=utf8
  • 导入数据第二种方式:(请在登录mysql之后操作)
sql 复制代码
create  database powernode;
use powernode;
source d:/powernode.sql

数据查询-DQL(Data Query Language)

sql 复制代码
# 数据查询
# 基础语法:
SELECT 字段列表|* FROM 表 WHERE 条件判断;
# 示例:
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

相关推荐
海尔辛12 分钟前
防御性安全:数字取证
数据库·安全·数字取证
繢鴻1 小时前
数据库优化实战分享
数据库
Cachel wood2 小时前
后端开发:计算机网络、数据库常识
android·大数据·数据库·数据仓库·sql·计算机网络·mysql
暗离子跃迁2 小时前
达梦数据库单机部署dmhs同步复制(dm8->kafka)
linux·运维·数据库·分布式·学习·kafka·达梦数据库
LUCIAZZZ2 小时前
项目拓展-Apache对象池,对象池思想结合ThreadLocal复用日志对象
java·jvm·数据库·spring·apache·springboot
爱瑞瑞2 小时前
云原生学习笔记(七) Docker 实战:使用 Docker 快速构建 Oracle 12c 容器
docker·oracle
水木石画室2 小时前
Druid 连接池详解
数据库·mysql
yzpyzp2 小时前
gradle的 build时kaptDebugKotlin 处理数据库模块
android·数据库
软件2052 小时前
【redis——缓存雪崩(Cache Avalanche)】
数据库·redis·缓存
訾博ZiBo3 小时前
使用 Navicat 成功导入 2.73GB 超大 SQL 文件的实战经验(Win10,64GB内存)
数据库·mysql