mysql 学习3 SQL语句--整体概述。SQL通用语法,SQL语句分类

server/2025/1/24 6:41:34/

SQL通用语法

SQL语句分类

DDL data definition language : 用来创建数据库,创建表,创建表中的字段,创建索引。因此成为 数据定义语言

DML data manipulation language 有了数据库和表以及字段后,那么我们就需要给这个表中 添加数据,删除数据,改动数据,这些都是对数据有改动的行为,因此 叫做 数据操作语言  manipulation中文是 操作的意思

DQL data query language ,DML完成了对于表中数据的增删改,但是没有查询功能,这个DDL就是完成对 数据库中的表的数据进行查询功能的

DCL data control language,我们有了数据库,表,也有了增删改查,还有一个安全性问题,就是谁能来操作这个数据库中的表,因此对应的有了 数据控制语言,功能就是用来创建数据库用户,控制数据库的访问权限的,这里还有 一个问题 视频中没有讲---即一个数据库有多张表,DCL能做的精细化程度是什么样子的呢?能做到对于某一张表的控制?还是只能 做到对于 某一个数据库的控制?

简单理解版

  • DDL:数据定义语句 【create 表,数据库…】
  • DML:数据操作语句【增加insert,修改update,删除delete】
  • DQL:数据查询语句【select】
  • DCL:数据控制语句【管理数据库:用户权限grant revoke】

DDL data definition language : 创建数据库,使用数据库,删除数据库,查询所有数据库,查询当前数据库

创建数据库

CREATE DATABASE [IF NOT EXISTS] <数据库名>

[DEFAULT CHARSET <字符集名>] 

[COLLATE <校对规则名>];

CREATE DATABASE [IF NOT EXISTS] <数据库名>[DEFAULT CHARSET <字符集名>] [COLLATE <校对规则名>];

注意的是:我们一般 设置 字符集名为 utf8mb4 ,而不是 utf8;这是因为utf8是3个字符组成的,为了兼容一些4字节的,因此使用 utf8mb4

[ ]中的内容是可选的。语法说明如下:

<数据库名>:创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,不能以数字开头,尽量要有实际意义。注意在 MySQL 中不区分大小写。
IF NOT EXISTS:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操作。此选项可以用来避免数据库已经存在而重复创建的错误。
[DEFAULT CHARSET <字符集名>]:指定数据库的字符集。指定字符集的目的是为了避免在数据库中存储的数据出现乱码的情况。如果在创建数据库时不指定字符集,那么就使用系统的默认字符集utf8。
[COLLATE <排序规则>]:指定字符集的排序规则,常用的utf8_bin(区分大小写),默认是utf8_general_ci(不区分大小写)。在字符集是utf-8的时候,COLLATE才能设置 utf8_bin 或者 utf8_general_ci   后面的测试中,char set utf8mb4, 但是测试会报错。
MySQL 的字符集(CHARACTER)和校对规则(COLLATION)是两个不同的概念。字符集是用来定义 MySQL 存储字符串的方式,校对规则定义了比较字符串的方式。

例如:创建一个使用utf8字符集,校验规则为 utf8_bin 的 itcast 数据库

create database if not exists itcast2
default charset utf8
collate utf8_general_ci;

测试验证

sql>mysql> create database if not exists itcast2-> default charset utf8-> collate utf8_general_ci;
Query OK, 1 row affected, 2 warnings (0.00 sec)sql>mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| itcast             |
| itcast2            |
| sql>mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

--------------------------------------------------

测试 

create database if not exists itcast2
default charset utf8mb4 
collate utf8_general_ci;

错误

sql>mysql> create database if not exists itcast2
    -> default charset utf8mb4
    -> collate utf8_bin;
ERROR 1253 (42000): COLLATION 'utf8_bin' is not valid for CHARACTER SET 'utf8mb4'
sql>mysql>

原因:当地charset 为 utf8时,collate才能设置为 utf8_general_ci或者utf8_bin

我们当前的charset 是 utf8mb4  因此 collate的设置值是有问题的。

--------------------------------------------------------

create database if not exists itcast2
default charset utf8mb4 
collate utf8_bin;

错误

sql>mysql> create database if not exists itcast2
    -> default charset utf8mb4
    -> collate utf8_general_ci;
ERROR 1253 (42000): COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4'
sql>mysql>

-------------------------------------------------------------

create database if not exists itcast2
default charset utf8mb4;

成功

sql>mysql> create database if not exists itcast2-> default charset utf8mb4;
Query OK, 1 row affected (0.01 sec)sql>mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| itcast             |
| itcast2            |
| sql>mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

使用数据库

USE 数据库名;

USE 数据库名;

例子

use itcast;

sql>mysql> use itcast;
Database changed

删除数据库

drop database [IF EXISTS ] 数据库名;

drop database [IF EXISTS ] 数据库名;

测试:

drop database IF EXISTS itcast1;

sql>mysql> drop database IF EXISTS itcast1;
Query OK, 0 rows affected (0.02 sec)sql>mysql>

查询所有数据库

show databases;

SHOW DATABASES [LIKE '数据库名'];
sql>mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| itcast             |
| sql>mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

show databases LIKE 'sql>mysql';

sql>mysql> show databases LIKE 'sql>mysql';
+------------------+
| Database (sql>mysql) |
+------------------+
| sql>mysql            |
+------------------+
1 row in set (0.00 sec)

show databases LIKE 'my'; 

我们的本意是 查找 只要有字符串 my的数据库,但是查不到,说明 like 的用法不对 

sql>mysql> show databases LIKE 'my';
Empty set (0.00 sec)

改动,使用%通配符,%表示任意个字符

show databases LIKE '%my%'; 

sql>mysql> show databases LIKE '%my%';
+-----------------+
| Database (%my%) |
+-----------------+
| sql>mysql           |
+-----------------+
1 row in set (0.00 sec)

show databases LIKE '%i%'; 

sql>mysql> show databases LIKE '%i%';
+--------------------+
| Database (%i%)     |
+--------------------+
| information_schema |
| itcast             |
+--------------------+
2 rows in set (0.00 sec)

查询当前数据库

select database();

注意这里用的是函数;

sql>mysql> select database();
+------------+
| database() |
+------------+
| itcast     |
+------------+
1 row in set (0.00 sec)

DDL data definition language : 创建表,使用数据库,删除数据库,查看当前数据库。


http://www.ppmy.cn/server/160963.html

相关文章

YOLOv9改进,YOLOv9检测头融合DSConv卷积,适合目标检测、分割任务

前言 精确分割拓扑管状结构例如血管和道路,对各个领域至关重要,可确保下游任务的准确性和效率。然而,许多因素使任务变得复杂,包括细小脆弱的局部结构和复杂多变的全局形态。在这项工作中,注意到管状结构的特殊特征,并利用这一知识来引导 DSCNet 在三个阶段同时增强感知…

LangChain + llamaFactory + Qwen2-7b-VL 构建本地RAG问答系统

单纯仅靠LLM会产生误导性的 “幻觉”&#xff0c;训练数据会过时&#xff0c;处理特定知识时效率不高&#xff0c;缺乏专业领域的深度洞察&#xff0c;同时在推理能力上也有所欠缺。 正是在这样的背景下&#xff0c;检索增强生成技术&#xff08;Retrieval-Augmented Generati…

Linux 高级路由与流量控制-用 tc qdisc 管理 Linux 网络带宽

大家读完记得觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 此分享内容比较专业&#xff0c;很多与硬件和通讯规则及队列&#xff0c;比较底层需要有技术功底人员深入解读。 Linux 的带宽管理能力 足以媲美许多高端、专用的带宽管理系统。 1 队列&#xff0…

vue2的$el.querySelector在vue3中怎么写

这个也属于直接操作 dom 了&#xff0c;不建议在项目中这样操作&#xff0c;不过我是在vue2升级vue3的时候遇到的&#xff0c;是以前同事写的代码&#xff0c;也没办法 先来看一下对比 在vue2中获取实例是直接通过 this.$refs.xxx 获取绑定属性 refxxx 的实例&#xff0c;并且…

流媒体服务器选择以及评估

让我为您分析几个主流的流媒体服务器方案&#xff1a; 1. **Nginx-RTMP** 优势&#xff1a; - 轻量级&#xff0c;资源占用少 - 配置简单&#xff0c;易于部署 - 支持RTMP/HLS/DASH - 高并发性能好 - 免费开源 劣势&#xff1a; - 功能相对基础 - 缺乏管理界面 - 监控功能有…

Java设计模式 十三 代理模式 (Proxy Pattern)

代理模式 (Proxy Pattern) 代理模式是一种结构型设计模式&#xff0c;它为其他对象提供一种代理&#xff08;或占位符&#xff09;以控制对该对象的访问。通过代理模式&#xff0c;我们可以在不修改目标对象的情况下&#xff0c;控制对其的访问&#xff0c;添加额外的功能&…

基于STM32的智能门锁安防系统(开源)

目录 项目演示 项目概述 硬件组成&#xff1a; 功能实现 1. 开锁模式 1.1 按键密码开锁 1.2 门禁卡开锁 1.3 指纹开锁 2. 功能备注 3. 硬件模块工作流程 3.1 步进电机控制 3.2 蜂鸣器提示 3.3 OLED显示 3.4 指纹与卡片管理 项目源代码分析 1. 主程序流程 (main…

iptables和ipvs差异

iptables和ipvs都是Linux内核中用于网络流量管理的工具&#xff0c;它们在实现方式、功能、性能以及使用场景上存在一些显著的差异。以下是对两者的详细比较&#xff1a; 一、实现方式 iptables&#xff1a; 基于Netfilter框架。使用链表&#xff08;chain&#xff09;和规则&…