MySQL基础——DDL、DML、DQL、DCL语句

article/2025/9/12 22:46:52

当成功安装数据库之后,对于数据库进行的简单且基础的操作

打开数据库操作

1、在运行中输入services.msc

会打开如下界面

可以选择对MySQL进行开启或者关闭

2、也可以使用命令指示符

命令提示符要用管理员身份运行

输入命令

net start [自己设置的数据库名称]

命令指示符中可以对mysql进行连接

输入指令

mysql -uroot -p

此时输入自己设置的密码

连接成功的结果会显示如下字样

数据库模型

        mysql的数据库模型是一种关系型数据库,建立在关系模型的基础上,由多张相互连接的二维表组成

优点 :使用表存储,格式统一,便于维护,使用SQL语言操作,标准统一

MySQL语法

1、SQL语句可以单行或者多行书写,但是要以;为结尾

2、可以使用空格、缩进以增强代码的可读性

3、MySQL不区分大小写,关键字还是建议大写

4、注释写法

        (1)单行注释:--/#(#是MySQL特有注释)

        (2)多行:/*     */

SQL语句

DDL:定义语言,用来定义数据库对象(数据库,表,字段)

DML:数据操作语言,对数据进行增删改插

DQL:数据查询语言,查询数据库中表的记录

DCL:数据控制语言,创建数据库用户,控制数据库访问权限

DDL语句

1、查询数据库

SHOW DATABASES;
--查询所有数据库
SELECT DATABASES;
--查询当前数据库

SHOW DATABASES可以随时用,但是SELECT就一定要保证目前索引已经移动到了一个数据库之后才能去查询。

2、创建数据库

CREATE DATABASES [IF NOT EXIST] 数据库名 [DEFAULT CHAREST 字符集] [排序];--需要注意的是,在这里如果没有输入数据库的名字的话,就不执行该语句,也不会报错
--同时,重复创建同名数据库就会报错
--字符集指的是排列方式,比如UTF8mb4就是一种字符集

如果创建成功,就会出现 Query OK, 1 row affected的字样

 加入[IF NOT EXISTS]字段的原因就是,有这个字段的时候对于重复创建的问题不会进行报错,也会显示执行成功,但是如果没有这个字段,就会直接显示该数据库已经存在

3、删除数据库

DROP DATABASE [IF EXISTS] 数据库名;

删除数据库操作和创建数据库操作类似

4、使用数据库

USE 数据库名称;--select database就是当使用过use之后才能使用,查询当前指向的数据库

5、表结构

(1)创建表结构

CREATE TABLE 表名(字段1 字段1类型[COMMENT 注释],字段2 字段2类型[COMMENT 注释],……………字段n 字段n类型[COMMENT 注释])[comment 表注释];--此时的类型就是字段的数据类型,关于数据类型在后文会仔细讲解
--这个必须在use将指针移到数据库之后才能在相应数据库下创建对应的表

在此处解释一下字段的意思,字段就相当于正常表格中的列

(2)显示表结构

DESC 表名;

 6、表结构----数据类型

数据类型
数据类型所占用字节(单位:bytes)
tinyint1
smallint2
mediumint3
int/integer4
bigint8
float4
double8

这是简单的数字存储类型,也有字符串类型和日期类型

需要注意的是,就算是在这里也有修饰词signed和unsigned的分别,如果需要使用该修饰词,就需要加在数据类型的后面;

同时对于double和float这种小数数据类型,当你需要限制位数的时候可以直接在后面加上数字位数和小数位数,例如double/float (数字位数,小数位数),比如100.0的数字位数就是4,小数位数就是1。

字符类型
字符类型存储数据类型
char定长的字符串
varchar变长的字符串
tinyblob不超过25个字符的二进制数据
blob二进制形式文本数据
tinytext短文本字符串
text文本数据
mediumblob二进制形式的中长文本数据
mediumtext中长文本数据
longblob二进制形式的长文本数据
longtext长文本数据

char和varchar之后都可以加括号,括号里面限制长度,就相当于数组的存在

在这里解释一下关于char不变长和varchar变长问题

char(10):即使只存储了一个字符,也占用10个字符的空间吗,其他空余位置全部用空格去填充,虽然占用空间固定,但是性能会更好,效率也会更高

varchar(10):虽然规定了字符串长度,但是这时的限制其实是字符串的上限,当存储字符串的长度小于规定长度的时候,实际上占用的空间就是存储字符串的长度,性能和效率都会比char低

日期类型
日期类型呈现格式
dateYYYY-MM-DD
yearYYYY
timeHH:MM:SS
timedateYYYY-MM-DD HH:MM:DD
timestampYYYY-MM-DD HH:MM:DD

 日期类型是SQL语句中比较独特的一种类型

timedate和timestamp有区别,因为timestamp日期仅到2038年,所以不经常使用

7、修改表中字段信息

ALTER TABLE 表名 MODIFY 字段名 新数据类型;
--修改表中字段的数据类型ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型 [COMMENT 注释][约束];
--修改表中该字段全部内容ALTER TABLE 表名 ADD 字段名 数据类型 [COMMENT 注释][约束];
--直接在表中添加字段ALTER TABLE 表名 DROP 字段名;
--删除该表中字段名的字段ALTER TABLE 表名 RENAME TO 新表名;
--修改表的名字

可以理解为alter是去选择对应操作

可以对应到modify(调整)/change(修改)/add(添加)/drop(删除)/rename(重命名)

8、删除表结构

DROP TABLE [IF EXISTS] 表名;
--直接将对应表名的表删除TRUNCATE TABLE 表名;
--将该表删除之后还可以重新创建

DML语句

DML语句主要是针对表中的数据进行操作

1、添加操作

INSERT INTO 表名(字段1,字段2……字段n) VALUES(数值1,数值2……数值n);
--对应分别输入,一定要与对应的字段对应INSERT INTO 表名 VALUES(数值1,数值2……数值n);
--对该表中的全部字段进行添加数据INSERT INTO 表名(字段1,字段2……字段n) VALUES(数值1,数值2……数值n),(数值1,数值2……数值n)…………;
--对指定字段多组添加数据INSERT INTO 表名 VALUES(数值1,数值2……数值n),(数值1,数值2……数值n)…………;
--对全部字段多组添加

注:

        1、字段一定要与值相对应

        2、字符串和日期类型在输入其中的时候一定要注意被单引号包裹起来

        3、要注意输入数据的范围

2、修改表中数据

UPDATE 表名 SET 字段名1=数值1,字段名2=数值2 [WHERE 条件];
--修改字段的对应内容

此处的where是用来限制修改对象的,如果没有限制,那么就会直接将对应字段的全部数据全部修改

3、删除表中数据

DELETE FROM 表名[WHERE 条件]
--删除数据,如果添加了where删除符合筛选条件的,不添加where数据全删

DQL语句

基础查询主要围绕着SELECT关键字

当进行查询的时候,书写的顺序如下

SELECT 字段列表
--查询之后要显示的字段,也就是目标字段
FROM表名列表
--在哪些表中进行查询
WHERE条件列表
--限制查询的范围
--后面的内容涉及分组操作,在这里先不做赘述
GROUP BY分组字段列表
HAVING分组之后的条件列表
ORDER BY排序字段列表
LIMIT分页参数

1、基础查询

SELECT 字段1,字段2……字段n FROM 表名;
--查找指定字段SELECT* FROM 表名;
--查找全部字段--注:也可以将第一个中所有的字段名全部写入,与第二个达成的效果是一致的
--但是第一种的效率会更高一点

2、设置别名

SELECT 字段1[AS 别名] FROM 表名;--as也可以省略,没有as直接在字段后面加上空格,直接写下别名就可以
--别名也可以应用在表名中,之后也会应用到

3、去除重复显示

SELECT DISTINCT 字段列表 FROM 表名;--此时显示出的内容就不重复了,每一条都是不一样的记录

4、条件查询

SELECT 字段列表 FROM 表名 WHERE 条件列表;--where关键字之后往往就是逻辑关系式
比较运算符
符号含义
>大于
>=大于等于
<小于
<=小于等于
=等于
<>/!=不等于
BETWEEN……AND……在……的范围内
IN在in之后的范围中,多选一
like 占位符模糊匹配进行占位
is null是null

逻辑运算: and / &&        or / ||         not / !

占位符

        _用来匹配单个字符,%可以匹配任何字符

        主要来阐述占位符的用法,比如想要姓名长度为2的人的信息,就可以使用where name like '_ _',去寻找名字为两位的,会直接被筛选出来;对于%的使用,比如想要找到身份证号最后一位是x的人,就可以使用where id like '%x'

5、聚合函数

聚合函数
函数功能
count()统计数量
max()取最大值
min()取最小值
avg()取平均值
sum()求和

关于聚合函数的用法

SELECT COUNT(字段名) FROM 表名;
--直接将所输入的字段内容直接进行加和,最终会输出结果

6、分组查询

SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 过滤条件]

此处要先分辨一下where和having

        执行时机:where在前,having在后

        判断条件不同,且where之后就不能再使用聚合函数了,having后面的过滤条件就可以直接使用

where相当于在分组之前直接筛选,筛选出指定的数据进入group by

group by相当于是对where筛选之后的数据,进行再次分组

比如现在给出一组数据

目前有这么多人的身高体重

之后要达到的目的是,身高大于155的男性和女性的数量,就可以使用如下语句

select sex,count(*) from mrx_message where hight >155 group by sex;

 结果如下

 可以看到,准确地将男女分开了

就算是group by,最终显示的结果也是由select之后的字段列表决定的

注:执行顺序:where>聚合函数>having如果想要进行分组操作,那么一般最终查询的对象都是聚合函数,否则查询没有意义

7、分页查询

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;

注:起始索引从0开始,起始索引[(查询页码数-1)*每页显示记录数]

相当于从上一页的尾记录开始,这个是MySQL的方言,MySQL中使用LIMIT,其他数据库不适用

查询记录数就是每页你想要的记录数

如果分页是从首页开始,也可以将起始索引省略

8、执行顺序

FROM->WHERE->GROUP BY/HAVING->SELECT->ORDER BY->LIMIT
--首先表明从哪一张表开始
--确定进入该语句的数据
--确定能进入分组的数据,确定分组条件并分组
--确定显示出的内容
--最终确定排序和分页

DCL语句

DCL管理数据库用户,控制数据库的访问权限

1、用户操作

--1、创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY'密码';
@'localhost'指只能在当前主机访问,且创建之后没有权限
@'%'代表可以在任何主机上访问,但是也没有任何权限
--2、修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password by '新密码';
--mysql_native_password是MySQL指定的密码加密方式
--3、删除用户
DROP USER '用户名'@'主机名';

注:使用%可以通配,但是DQL语言开发人员会很少使用,主要是数据管理员会使用

2、DQL权限控制

常用权限
权限权限含义
all、all privileges所有权限
select查询权限
insert插入数据
update修改数据
delete删除数据
alter修改表数据
drop删除数据库、表、视图
create创建数据库、表

权限操作

--权限查询
SHOW GRANTS FOR '用户名'@'主机名';
--授予权限
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
--撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';


http://chatgpt.dhexx.cn/article/AJNUN1K3.shtml

相关文章

Oracle DB 使用DDL语句创建和管理表

• 对主要的数据库对象进行分类 • 查看表结构 • 列举列可以使用的数据类型 • 创建简单的表 • 说明创建表时如何创建约束条件 • 描述方案对象如何工作 • 数据库对象 – 命名规则 • CREATE TABLE语句: – 访问另一个用户的表 – DEFAULT选项 • 数据类型 • 约束条件概览…

C++值传递和引用传递的区别

c中参数传递的区别&#xff1a; 1.值传递&#xff1a; 可以想象改变的只是实参的“替身”的值&#xff0c;而实参本身不会被改变。 值传递&#xff1a;将实参的值传递给形参&#xff1b;形参是实参的“替身”&#xff0c;但与实参本质上不是“同一个人”&#xff0c;只是值复…

Java值传递和引用传递基础分析

&#xff08;尊重劳动成果&#xff0c;转载请注明出处&#xff1a;http://blog.csdn.net/qq_25827845/article/details/77688416冷血之心的博客&#xff09; 一年前我总结过一篇博客&#xff1a;Java基础之引用&#xff08;String&#xff0c;char[]&#xff0c;Integer&#x…

C#中的值传递和引用传递

在C#语言中&#xff0c;传递参数的方式有两种&#xff1a;值传递和引用传递。 在介绍这两种参数传递方式我们先简单理解一下值类型和引用类型。 在C#语言中的char,int,short,long,byte,float,double,boolean类型都是值类型&#xff0c;另外enum枚举类型和struct结构类型也是值…

Python值传递和引用传递(详细分析)

目录 1. 形参与实参 2. Python的数据类型 3.Python变量及其赋值 3.1 不可变对象赋值 3.2 可变对象赋值 3.3 变量删除 3.4 变量赋值总结 4.Python函数的参数传递 4.1 参数传递定义 4.2 不可变对象的参数传递 4.3 可变对象的参数传递 5.总结 6 不可变与可变对象赋值对…

Java值传递和引用传递详细说明(详细分析)

1. 形参与实参 我们先来重温一组语法&#xff1a; 形参&#xff1a;方法被调用时需要传递进来的参数&#xff0c;如&#xff1a;func(int a)中的a&#xff0c;它只有在func被调用期间a才有意义&#xff0c;也就是会被分配内存空间&#xff0c;在方法func执行完成后&#xff0…

Java中是值传递和引用传递

值传递 / 引用传递 值传递&#xff1a;就是在方法调用的时候&#xff0c;实参是将自己的一份拷贝赋给形参&#xff0c;在方法内&#xff0c;对该参数值的修改不影响原来的实参。 引用传递&#xff1a;是在方法调用的时候&#xff0c;实参将自己的地址传递给形参&#xff0c;此…

Java的值传递和引用传递

Java的值传递和引用传递 值传递&#xff1a;对形参的修改不会影响到实参 。引用传递&#xff1a;对实参的修改能够影响到实参 **Java是值传递&#xff1a;如果是基本数据类型&#xff0c;就是复制一份值传递给形参&#xff1b;如果是引用类型&#xff0c;那就将引用复制一份&…

Java 值传递和引用传递

值传递:在调用函数的时候,将实际参数复制一份传递到函数中,这样在函数中对参数进行修改的时候,就不会影响到原来的实际参数 引用传递:在调用函数的时候,将实际参数的地址直接传递函数中,这样在函数中对参数进行修改的时候,就会影响到实际参数值传递 引用传递…

go 语言值传递和引用传递

值传递 普通的值传递 package main import "fmt" func main(){fmt.Println(Hello("hello"," fpp")); } func Hello(stringName string,stringName2 string)(string){return stringNamestringName2; }string类型是引用传递吗? package main i…

Java 的值传递和引用传递

一、概述 Java数据类型分为基本类型和引用类型。相应的&#xff0c;变量也有两种类型&#xff1a;基本类型和引用类型。 1️⃣基本类型的变量保存原始值&#xff0c;即它代表的值就是数值本身。包含&#xff1a; 整型&#xff1a;byte&#xff0c;short&#xff0c;int&#…

java值传递和引用传递(附实例)

java值传递和引用传递&#xff08;附实例&#xff09; 1.数据类型1.1 基本数据类型1.2 引用数据类型 2.形参与实参2.1 函数中使用2.2 调用 3.值传递和引用传递3.1 定义3.2 例子3.3 结论 观前提示&#xff1a; 本文所使用的IDEA版本为ultimate 2019.1&#xff0c;JDK版本为1.8.…

java中的值传递和引用传递

个人理解&#xff0c;可能会有错误之处&#xff0c;请仔细甄别&#xff0c;谨慎参考&#xff01;如有错误或不同见解请指出&#xff01; 值传递&#xff08;Pass By Value或者Call By Value&#xff09;是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。…

【JAVA】值传递与引用传递

一.声明 Java中没有引用传递 二.值传递和引用传递 值传递&#xff1a;就是在方法调用的时候&#xff0c;实参是将自己的一份拷贝赋给形参&#xff0c;在方法内&#xff0c;对该参数值的修改不影响原来的实参。 引用传递&#xff1a;是在方法调用的时候&#xff0c;实参将自…

值传递与引用传递详解

1、关于值传递 值传递&#xff1a;是指在调用函数时&#xff0c;将实际参数复制一份传递到函数中&#xff0c;这样在函数中如果对参数进行修改&#xff0c;就不会影响到实际参数 如下图所示&#xff0c;当传递参数之前会将参数进行复制&#xff0c;函数中修改了参数&#xff0c…

值传递与引用传递的区别

一、值传递&#xff1a;是指在调用函数时将实际参数复制一份传递到函数中&#xff0c;这样在函数中如果对参数进行修改&#xff0c;将不会影响到实际参数。 ​ 代码在内存中的执行流程&#xff1a; 1、首先加载main方法&#xff1b; ​ 2、接下来int number 100&#xff1…

什么是值传递,什么是引用传递?

1、什么是值传递&#xff0c;什么是引用传递&#xff1f; 值传递&#xff08;pass by value&#xff09;是指在调用函数时将实际参数复制一份传递到函数中&#xff0c;这样在函数中如果对参数进行修改&#xff0c;将不会影响到实际参数。引用传递&#xff08;pass by referenc…

Java复习总结之快速区分值传递和引用传递

引言 为了搞清楚值传递和引用传递的区别&#xff0c;查阅了许多资料&#xff0c;加以自身理解&#xff0c;做出本篇博客用于记录。 概念 值传递&#xff1a;指在调用函数时将实际参数复制一份传递到函数中&#xff0c;这样在函数中如果对参数进行修改&#xff0c;将不会影响到…

华为应聘进展状态码解析(附加性格测试攻略)

多方查找咨询终于终于看到了自己的状态码&#xff0c;总结一下~ 性格测试攻略&#xff1a; https://blog.csdn.net/guomutian911/article/details/48915301 https://blog.csdn.net/twc829/article/details/51226358 https://blog.csdn.net/twc829/article/details/51226247 第三…

华为OD机试2023 最新最全备考攻略助你轻松上岸

【华为OD机试真题 2022&2023】真题目录 点这里 【华为OD机试真题】信号发射和接收 &试读& 点这里 【华为OD机试真题】租车骑绿道 &试读& 点这里 什么是华为OD 华为OD是Outsourcing Dispacth模式&#xff0c;是华为和外企德科联合招聘的简称。目前华为大多…