【MySQL基础篇】概述及SQL指令:DDL及DML

数据库是一个按照数据结构来组织、存储和管理数据的仓库。以下是对数据库概念的详细解释:
定义与基本概念:
数据库是长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库不仅仅是数据的简单堆积,而是遵循一定的规则和模式进行组织和管理的。
数据库中的数据可以包括文本、数字、图像、音频等各种类型的信息。
数据库的作用:
数据库作为计算机系统中最重要的组件之一,被广泛用于各种应用程序和业务领域。
数据库能够高效地管理和处理大量数据,提供数据的存储、查询、更新和删除等功能。

名称全称简称
数据库存储数据的仓库,数据是有组织地进行存储DB
数据库管理系统操纵和管理数据库的大型软件DBMS
SQL操作关系型数据库的编程语言,定义了一套操作挂机呢习性数据库统一标准SQL

数据模型:

 关系型数据库(RDBMS)

概念:建立在关系模型上,由多张相互连接的二维表组成的数据库。

特点:

1、使用表存储数据,格式统一便于维护

2、使用SQL语言操作,便于统一,使用方便

1、SQL通用语法

1、SQL语句可以单行或多行书写,以分号结尾。

2、SQL可以使用空格/缩进来增强语句的可读性。

3、MySQL数据库和SQL语句不区分大小写,关键字建议使用大写

4、注释:

·        单行注释:--注释内容 或 # 注释内容(MySQL独有)

·        多行注释:/*注释内容*/

2、SQL分类

分类全称说明
DDLDate Definition Language数据定义语句,用来定义数据库对象(数据库、表、字段)
DMLDate Manipulation Language数据操作语言,用于对数据库表中的数据进行增删改
DQLDate Query Language数据查询语言,用于查询数据库中表的记录
DCLDate Control Language数据控制语言,用于创建数据库用户、控制数据库的访问权限

3、DDL

·  DDL - 数据库操作

查询:

查询所有数据库:

show databases;

查询当前数据库

select database();

创建

create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];

删除

drop database [if exists] 数据库名;

使用

use 数据库名;

show databases;

我们可以看到一共有四个数据库,这四个数据库是安装MySQL成功后自带的数据库 

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> create database if not exists test;/*字符集内容是可以省略的因为MySQL有一套自己的字符集,排序顺序也可以省略*/
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

mysql> drop database if exists test;
Query OK, 0 rows affected (0.01 sec)

mysql> /*假如我们想要使用某一个数据库所需要的指令为*/
mysql> use mysql
Database changed
mysql> /*假如数据库创建太多,我们想要知道我们目前正在使用的数据库所需要的指令*/
mysql> select database();
+------------+
| database() |
+------------+
| mysql      |
+------------+
1 row in set (0.00 sec)

·  DDL - 表操作 - 查询

 查询当前数据库所有表

show tables; 

mysql> create database if not exists test;
Query OK, 1 row affected (0.01 sec)

mysql> use test;
Database changed
mysql> show tables;
Empty set (0.00 sec)/*刚创建出的数据库没有表结构*/
mysql> use mysql;
Database changed
mysql> show tables;
+------------------------------------------------------+
| Tables_in_mysql                                      |
+------------------------------------------------------+
| columns_priv                                         |
| component                                            |
| db                                                   |
| default_roles                                        |
| engine_cost                                          |
| func                                                 |
| general_log                                          |
| global_grants                                        |
| gtid_executed                                        |
| help_category                                        |
| help_keyword                                         |
| help_relation                                        |
| help_topic                                           |
| innodb_index_stats                                   |
| innodb_table_stats                                   |
| ndb_binlog_index                                     |
| password_history                                     |
| plugin                                               |
| procs_priv                                           |
| proxies_priv                                         |
| replication_asynchronous_connection_failover         |
| replication_asynchronous_connection_failover_managed |
| replication_group_configuration_version              |
| replication_group_member_actions                     |
| role_edges                                           |
| server_cost                                          |
| servers                                              |
| slave_master_info                                    |
| slave_relay_log_info                                 |
| slave_worker_info                                    |
| slow_log                                             |
| tables_priv                                          |
| time_zone                                            |
| time_zone_leap_second                                |
| time_zone_name                                       |
| time_zone_transition                                 |
| time_zone_transition_type                            |
| user                                                 |
+------------------------------------------------------+
38 rows in set (0.00 sec)

查询表结构 

 desc 表名

mysql> desc tr_user
    -> ;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
| sex   | varchar(1)  | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

 查询指定表的建表语句

show create table 表名;

mysql> show create table tr_user;
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table

                                                           |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tr_user | CREATE TABLE `tr_user` (
  `id` int DEFAULT NULL COMMENT '编号',
  `name` varchar(50) DEFAULT NULL COMMENT '姓名',
  `age` int DEFAULT NULL COMMENT '年龄',
  `sex` varchar(1) DEFAULT NULL COMMENT '性别'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表' |
+---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

·  DDL - 表操作 - 创建 

create table 表名(

        字段1 字段1类型[comment 字段1注释],

         字段2 字段2类型[comment 字段2注释],

        ......

        字段n 字段n类型[comment 字段n注释]

)[comment 表注释];

mysql> use test;
Database changed
mysql> create table tr_user(
    -> id int comment '编号',
    -> name varchar(50) comment '姓名',
    -> age int comment '年龄',
    -> sex varchar(1) comment '性别'
    -> )comment '用户表';
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tr_user        |
+----------------+
1 row in set (0.00 sec)

 ·  DDL - 表操作 - 数据类型

分类类型大小有符号范围无符号范围描述
数值类型TINYINT1byte(-128,127)(0,255)小整数值
SMALLINT3byte(-32768,32767)(0,65535)大整数值
MEDIUMINT3byte(-8388608,8388607)(0,16777215)大整数值
INT或INTEGER4byte(-2147483648,-2147483647)(0,4294967259)大整数值
BIGINT8byte(-2^63,2^63-1)(0,2^64-1)极大整数值
FLOAT4byte(-3.402823466 E+308,402823466351 E+308)0和(1.175494351 E-38,402823466 E+38)单精度浮点数
DOUBLE8byte(-1.7976931348623157 E+308,1.7976931348623157 E+308)0和(2.2250738585072014 E-308,1.7976931348623157 E+308)双精度浮点数
DECIMAL依赖于M(精度)和D(标度)的值依赖于M(精度)和D(标度)的值小数值
分类类型大小描述
字符串类型CHAR0-255 byte定长字符串
VARCHAR0-65535 byte变长字符串
TINYBLOB0-255 byte不超过255个字符的二进制数据
TINYTEXT0-255 byte短文本字符串
BLOB0-65535 byte二进制形式的长文本数据
TEXT0-65535 byte长文本数据
MEDIUMBLOB0-16777215 byte二进制形式的中等长度文本数据
MEDIUMTEXT0-16777215 byte中等长度文本数据
LONGBLOB0-4294967259 byte二进制形式的极大文本形式
LONGTEXT0-4294967259 byte极大文本数据

注意:char(10)代表当前字符串能够存储的最大长度即10个字符,一旦超出就会报错与varchar(10)的区别是char(10)是不管我们存储多大字节的数据,都占用10个字节(其他位置用空格代替);而varchar(10)会根据数据的大小确定,但最大不能超过10个字节,大大节省了空间占用。 但char的性能更好,varchar的性能较差这是因为varchar需要内容来计算所占空间的大小。

分类类型大小范围格式描述
日期类型DATE31000- 01- 01至9999- 12- 31YYYY-MM-DD日期值
TIME3-838:59:59至839:59:59HH:MM:SS时间值或持续时间
YEAR11901至2155YYYY年份值
DATATIME81000- 01- 01 00:00:00至9999- 12- 31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值
TIMESTAMP41970- 01- 01 00:00:01至2038- 01- 19 03:14:07YYYY-MM-DD HH:MM:SS混合日期和时间值、时间戳

 ·  DDL - 表操作 - 修改

添加字段

ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];

比如:为tr_user表添加一个新的字段’昵称‘为nickname,类型为varchar(20)

mysql> alter table tr_user add nickname varchar(20) comment'昵称';
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc tr_user;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | YES  |     | NULL    |       |
| name     | varchar(50) | YES  |     | NULL    |       |
| age      | int         | YES  |     | NULL    |       |
| sex      | varchar(1)  | YES  |     | NULL    |       |
| nickname | varchar(20) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

 修改数据类型

ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

修改字段名和字段类型

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [comment 注释] [约束]; 

比如:将tr_user表中的nickname修改为username,类型为varchar(30)

alter table tr_user change nickname username varchar(30) comment'昵称';
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc tr_user;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | YES  |     | NULL    |       |
| name     | varchar(50) | YES  |     | NULL    |       |
| age      | int         | YES  |     | NULL    |       |
| sex      | varchar(1)  | YES  |     | NULL    |       |
| username | varchar(30) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

删除字段 

 ALTER TABLE 表名 DROP 字段名;

比如:将tr_user表的username删除

alter table tr_user drop username;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

 修改表名

ALTER TABLE 表名 RENAME TO 新表名;

比如:将表名tr_user修改为新表名user_tr 

 alter table tr_user rename to user_tr;
Query OK, 0 rows affected (0.01 sec)

  ·  DDL - 表操作 - 删除

删除表

DROP TABLE [IF EXISTS] 表名; 

删除指定表,并重新创建该表

TRUNCATE TABLE 表名; 

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tr_user        |
| user           |
+----------------+
2 rows in set (0.00 sec)

 比如:我们想要删除user这个表名

 drop table if exists user;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tr_user        |
+----------------+
1 row in set (0.00 sec)
 truncate table tr_user;
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| tr_user        |
+----------------+
1 row in set (0.00 sec)
/*truncate的这种形式删除指定表,表名还在,但表的内容已经不存在了,仅仅留下了空表*/

4、MySQL图形化界面(DataGrip)

下载安装:

DataGrip下载安装及使用教程(详细版)-CSDN博客 

激活:DataGtip如何跳过试用设置永久使用?(Windows2021-2023版本通用)_datagrip无限试用-CSDN博客

5、DML

 DML全称为Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。

· DML - 添加数据

1、给指定字段添加数据

INSERT INTO 表名 (字段1,字段2,...) VALUES(值1,值2,...); 

2、给全部字段添加数据

INSERT INTO 表名 VALUES(值1,值2,...); 

3、批量添加数据

INSERT INTO 表名 (字段名1,字段名2,...) VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);

 INSERT INTO 表名 VALUES(值1,值2,...),(值1,值2,...),(值1,值2,...);

注意:

插入数据时,指定字段数据需要与值的顺序是一一对应的;

字符串和日期型数据应该包含在引号中;

插入数据的大小,应该在字段的规定范围内

/*为指定字段添加数据*/
insert into tr_user(id, name, age, sex) values(1,'李三',68,'男');
#给全部字段添加数据
insert into tr_user values(2,'狗蛋',20,'男');
#批量添加数据
insert into tr_user value(3,'二狗',18,'男'),(4,'林黛玉',25,'女');
select * from tr_user;

· DML - 修改数据

UPDATE 表名 SET 字段名1=值1,字段名2=值2,...[WHERE 条件];

注意:修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。 

update tr_user set name='张无忌' where id=1;
#修改id为1的数据,将name修改为小昭,sex改为女
update tr_user set name='小昭',sex='女' where id=1;
#修改表中的sex,全部改为男
update tr_user set sex='男' where id;
select * from tr_user;

 · DML - 删除数据

DELETE FROM 表名 [WHERE 条件]

注意:

DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据;

DELETE语句不能删除某一个字段的值(可以使用UPDATE) 。

#删除id=1的数据
delete from tr_user where id=1;
#删除所有数据
delete from tr_user where id;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

可用的搜索引擎

presearchhttps://presearch.com/yandexhttps://yandex.com/ 以上,目前均不需科学上网。

GEOS学习笔记(一)

下载编译GEOS 从Download and Build | GEOS (libgeos.org)下载geos-3.10.6.tar.bz2 使用cmake-3.14.0版本配置VS2015编译 按默认配置生成VS工程文件 编译后生成geos.dll,geos_c.dll 后面学习使用C接口进行编程

PCB在工业领域的应用以及人工智能的影响。

什么是pcb呢? PCB,全称Printed Circuit Board,中文名称为印制电路板,也被称为印刷线路板或印制板1。这是一种重要的电子部件,主要由绝缘基板、连接导线和装配焊接电子元器件的焊盘组成。PCB的主要作用是作为电子元器件的支撑体和电气连接的载体,它能够简化电子产品的装配…

三分钟快速搭建基于FastAPI的AI Agent应用!

点击下方“JavaEdge”,选择“设为星标” 第一时间关注技术干货! 免责声明~ 任何文章不要过度深思! 万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案…

【鸿蒙学习笔记】页面和自定义组件生命周期

官方文档:页面和自定义组件生命周期 目录标题 [Q&A] 都谁有生命周期? [Q&A] 什么是组件生命周期? [Q&A] 什么是组件?组件生命周期 [Q&A] 什么是页面生命周期? [Q&A] 什么是页面?页面生…

代码随想录算法训练营第五十二天| [KC]100. 岛屿的最大面积、101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题

[KamaCoder] 100. 岛屿的最大面积 [KamaCoder] 100. 岛屿的最大面积 文章解释 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,计算岛屿的最大面积。岛屿面积的计算方式为组成岛屿的陆地的总数。岛屿由水平方向或垂直…

开放式耳机哪个牌子好?2024热门红榜开放式耳机测评真实篇!

当你跟朋友们聊天时,他们经常抱怨说长时间戴耳机会令耳朵感到不适,后台也有很多人来滴滴我,作为一位致力于开放式耳机的测评博主,在对比了多款开放式耳机之后,你开放式耳机在保护听力方面确实有用。开放式的设计有助于减轻耳道内的…

自适应蚁群算法优化的攀爬机器人的路径规划

大家好,我是带我去滑雪! 攀爬机器人是一种能够在复杂环境中自主移动和攀爬的具有广阔应用前景的智能机器人,具有较强的应用潜力和广泛的研究价值。随着科技的不断发展,攀爬机器人在许多领域中的应用越来越广泛,例如建筑…

FastGPT 手动部署错误:MongooseServerSelectionError: getaddrinfo EAI_AGAIN mongo

在运行 FastGPT 时,mongodb 报如下错误: MongooseServerSelectionError: getaddrinfo EAI_AGAIN mongo 这是因为 mongo 没有解析出来,在 hosts 文件中添加如下信息: 127.0.0.1 mongo 重新运行 FastGPT 即可。 参考链接&#xff…

力扣随机一题 位运算/滑动窗口/数组

博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 3191.使二进制数组全部等于1的最少操作次数I【中等】 题目: 给…

C语言力扣刷题7——删除排序链表中的重复元素 II——[快慢双指针法]

力扣刷题7——删除排序链表中的重复元素 II——[快慢双指针法] 一、博客声明二、题目描述三、解题思路1、思路说明 四、解题代码(附注释) 一、博客声明 找工作逃不过刷题,为了更好的督促自己学习以及理解力扣大佬们的解题思路,开辟…

STM32将外部SDRAM空间作为系统堆(Heap)空间

概述 stm32可以外扩很大的sram,常见外部sram的初始化函数一般是c语言写的,默认写在main函数里面。stm32初始化首先进入汇编代码startup_stm32f429xx.s,在汇编代码中Reset_Handler(复位中断服务程序)里面先调用了Syste…

光明致优尊耀呈现“柏林爱乐在上海”音乐会正式开幕,奏响盛夏狂热乐章

2024年6月26日,由光明致优尊耀呈现的中国上海国际艺术节特别项目“柏林爱乐在上海”音乐会正式开幕。暌违七年,世界顶级交响乐团——柏林爱乐乐团再度访沪,在首席指挥基里尔别特连科率领下,正式在中国上海国际艺术节登台演出&…

Talk|CityU 助理教授马佳葳: CVPR 2024, 基于多模态理解的混合数据专家模型

本期为TechBeat人工智能社区第604期线上Talk。 北京时间6月27日(周四)20:00,香港城市大学助理教授—马佳葳的Talk已经准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “基于多模态理解的混合数据专家模型”,他向大家介绍了混合数据专…

x86 平台实现一个原子加法操作

1&#xff0c;先上代码 #include <iostream> #include <omp.h>int atomicAdd(int* ptr, int value) {int result;asm volatile("lock xaddl %0, %1\n": "r" (result), "m" (*ptr): "0" (value), "m" (*ptr): &…

程序猿大战Python——Python与MySQL交互三

SQL注入 目标&#xff1a;了解什么是SQL注入&#xff1f; SQL注入指的是&#xff1a;恶意篡改或注入SQL条件。 当开发者的数据条件若被恶意篡改&#xff0c;那就达不到预期的查询效果。 为了了解SQL注入是怎么回事&#xff1f;通过一个案例来分析。 例如&#xff0c;使用命令…

综合布线实训室建设可行性报告

1、 建设综合布线实训室的目的和意义 1.1 响应国家职业教育政策 在国家对职业教育的高度重视和政策支持下&#xff0c;综合布线实训室的建设不仅是对国家教育方针的积极响应&#xff0c;也是对技术教育改革的有力推动。通过这一平台&#xff0c;我们旨在培育出一批具有强烈实…

ChatGPT智能对话绘画系统 带完整的安装源代码包以及搭建教程

系统概述 ChatGPT 智能对话绘画系统是一款集智能语言处理和绘画创作于一体的综合性系统。它利用了深度学习和自然语言处理技术&#xff0c;能够理解用户的意图和需求&#xff0c;并通过与用户的交互&#xff0c;生成富有创意的绘画作品。该系统的核心是一个强大的人工智能模型…

高考后的抉择:专业优先还是学校优先?

随着2024年高考的帷幕落下&#xff0c;高考生们面临的一个重要抉择再度浮上心头&#xff1a;在分数受限的情况下&#xff0c;是选择一个心仪的专业&#xff0c;还是选择一个知名度更高的学校&#xff1f;这是一个困扰了众多考生和家长的长期难题。在这个关键的时刻&#xff0c;…

“一团乱麻”到底什么是烟雾病呢?

当我们听到“烟雾病”这个名字时&#xff0c;可能会联想到与吸烟有关的疾病&#xff0c;但实际上&#xff0c;这是一种与吸烟毫无关系的罕见脑血管疾病。它的名字来源于在脑血管造影中&#xff0c;病变的血管网看起来像一团乱麻&#xff0c;又似吸烟时吐出的烟雾。 烟雾病&…