【数据库】MySQL库与表的基本操作

目录

一、数据库概述

1. SQL分类

2. 存储引擎

二、库的操作

1. 创建数据库

2. 字符集与校验规则

3. 查看数据库

4. 修改数据库

5. 删除数据库

6. 查看连接情况

三、表的操作

1. 创建数据表

2. 查看数据表

3. 修改数据表

4. 删除数据表


一、数据库概述

1. SQL分类

  • DDL【Data Definition Language】数据定义语言,用来维护存储数据的结构,如:create、drop、alter
  • DML【Data Manipulation Language】数据操纵语言,用来对数据进行操作,如:insert、delete、update、select(由DML有细分为DQL负责查询)
  • DCL【Data Control Language】数据控制语言,负责权限管理和事务,如:grant、revoke、commit

2. 存储引擎

存储引擎定义:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。

MySQL的核心就是插件式存储引擎,支持多种存储引擎,InnoDB是默认存储引擎。

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

二、库的操作

1. 创建数据库

-- 创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name [create_specifiction ...]create_specifiction:[DEFAULT] CHARACTER SET charset_name[DEFAULT] COLLATE collation_name-- []是可选项
-- 大小表示关键字
-- CHARATER SET 指定数据库采样的字符集
-- COLLATE 指定数据库字符集的校验规则

2. 字符集与校验规则

-- 查看当前数据库默认的字符集与校验规则
show variables like 'character_set_database';
show variables like 'collation_database';-- 查看MySQL支持的字符集与校验规则
show charset;
show collation;-- 查看当前数据库的字符集与校验规则
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME 
FROM information_schema.SCHEMATA 
WHERE SCHEMA_NAME = 'db_name';
# 我们也可以在数据库的配置文件里查看字符集和校验规则
root@ubuntu:/var/lib/mysql/d1_mytest# cat db.opt 
default-character-set=utf8
default-collation=utf8_unicode_ci
-- 字符集指定了用什么编码方式来存储数据,负责数据的写入
-- 校验规则指定了怎么比较和读取数据,负责数据的读取-- 有些字符集支持中文编码,有些不支持,utf8 和 gbk 是支持中文的
-- 在 utf8 字符集中,一个中文字符占3字节,但是从数据库的角度来看也只是一个字符-- 同一个字符集的不同校验规则有可能有不同的排序和查询规则
-- 以 utf8_general_ci 和 utf8_bin 为例,
-- utf8_general_ci 是默认的校验规则,排序和查询不区分大小写
-- utf8_bin 排序和查询会区分大小写

3. 查看数据库

-- 查看数据库
show databases;-- 显示数据库创建语句
show create database d1_mytest;
show create database d1_mytest\G-- MySQL 建议我们关键字使用大写,但是不是必须的,小写更直观
-- 数据库名称可用 `` 反引号括住,是为了防止使用的数据库名刚好是关键字

4. 修改数据库

-- 修改数据库
ALTER DATABASE d1_mytest [alter_specification ...]-- 对数据库的修改主要是指对数据库的字符集、校验规则进行修改
-- 即 alter_specification 是重置字符集和校验规则
mysql> alter database d1_mytest charset=gbk;
Query OK, 1 row affected (0.00 sec)mysql> SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME -> FROM information_schema.SCHEMATA -> WHERE SCHEMA_NAME = 'd1_mytest';
+----------------------------+------------------------+
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------------------+------------------------+
| gbk                        | gbk_chinese_ci         |
+----------------------------+------------------------+
1 row in set (0.00 sec)

5. 删除数据库

-- 删除数据库
DROP DATABASE [IF EXISTS] db_name;-- 执行删除操作之后:
-- 数据库内部看不到对应的数据库
-- 对应的数据库文件夹被删除,联级删除,里面的数据表全部删除-- 不要轻易删除数据库!!!
-- 即便是要删除,也一定要做好备份-- 数据库备份,备份的本质是将构造数据库的 SQL 语句装载进入备份文件
# mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份的文件路径
-- 在数据库名后面跟多个名字,可以同时备份多个数据库
-- 如果在备份数据库的时候没有加上 -B 选项,那么在恢复数据库时不会自动创建数据库-- 数据库恢复
mysql> source 数据库备份的文件路径;-- 如果不备份整个数据库,而是备份其中的一张表,怎么做?
# mysqldump -u root -p 密码 数据库名 表名1 表名2 > 数据表备份的文件路径

6. 查看连接情况

-- 查看连接情况
show processlist;
-- 一个数据库可用由多个用户连接
-- 但是在查看连接情况的时候,只能看到自己权限内的用户连接
-- root 用户可以查看到全部用户的连接

当数据库访问缓慢时,可以查看连接情况进行检查是否是因为数据库遭受非法入侵。

三、表的操作

1. 创建数据表

-- 创建表
CREATE TABLE [IF NOT EXISTS] table_name (field1 datatype1,field2 datatype2,filed3 datatype3
)[engine=InnoDB charset=utf8 collate utf8_general_ci];
-- 在创建表的时候,可以对表的字段进行一些约束,也可以省略
-- 若不指定表的引擎、字符集和校验规则,表会继承数据库的配置-- 创建表测试
CREATE TABLE IF NOT EXISTS test01 (id int,name varchar(32),age int
)engine=InnoDB charset=utf8 collate utf8_general_ci;CREATE TABLE IF NOT EXISTS test02 (id int,name varchar(32),age int
)engine=MyISAM charset=gbk;
-- 不同的存储引擎,在数据库目录中的文件个数不同,原因是不同引擎存储的底层数据结构不同
root@ubuntu:/var/lib/mysql/d1_mytest# ll
total 136
drwxr-x--- 2 mysql mysql  4096 Mar 19 23:47 ./
drwx------ 6 mysql mysql  4096 Mar 19 20:58 ../
-rw-r----- 1 mysql mysql    59 Mar 19 23:21 db.opt
-rw-r----- 1 mysql mysql  8614 Mar 19 23:40 test01.frm
-rw-r----- 1 mysql mysql 98304 Mar 19 23:40 test01.ibd
-rw-r----- 1 mysql mysql  8614 Mar 19 23:47 test02.frm
-rw-r----- 1 mysql mysql     0 Mar 19 23:47 test02.MYD
-rw-r----- 1 mysql mysql  1024 Mar 19 23:47 test02.MYI
root@ubuntu:/var/lib/mysql/d1_mytest# # 在文件系统中,MyISAM 和 InnoDB 都有 .frm 文件,这个文件存储了表结构
# 在 InnoDB 中,表索引和表数据都存储在 .idb 文件中
# 在 MyISAM 中,表索引和表数据分别存储在 .MYI 和 .MYD 中

2. 查看数据表

-- 查看表
show tables;-- 查看表结构
desc 表名;
mysql> desc test01;
+--------+--------------+--------+-------+---------+-------+
| Field  | Type         | Null   | Key   | Default | Extra |
+--------+--------------+--------+-------+---------+-------+
| id     | int(11)      | YES    |       | NULL    |       |
| name   | varchar(32)  | YES    |       | NULL    |       |
| age    | int(11)      | YES    |       | NULL    |       |
+--------+--------------+--------+-------+---------+-------+
3 rows in set (0.00 sec)-- 字段名   字段类型   是否允许为空  索引类型   默认值    扩充

3. 修改数据表

在实际项目中,有可能我们会需要修改表的结构,如字段名称、字段大小、字段类型,或者修改表的配置,如表的字符集、存储引擎等等,或者是增添、删除字段。

但是修改表带来的风险是和删除表相当的,所以在进行修改的时候,特别是涉及到字段的修改,一定要慎重,为了避免修改表带来的风险,最好的方式就是在定义表的时候就决定好表的结构。

-- 修改表名
ALTER TABLE table_name RENAME TO new_name;
-- 修改表名之后,其数据库中对应的文件名也会修改-- 修改列名
ALTER TABLE table_name CHANGE old_field new_field datatype [DEFAULT expr] ...;
-- 修改列名的时候,新列名需要完整定义,可以重新定义的时候修改列属性-- 添加字段
ALTER TABLE table_name ADD (column datatype [DEFAULT expr], ...);-- 修改字段
ALTER TABLE table_name MODIFY (column datatype [DEFAULT expr], ...);-- 删除字段
ALTER TABLW table_name DROP (column);
mysql> desc test01;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(32) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)mysql> alter table test01 add class int comment '班级' after id;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> alter table test01 modify name char(16);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc test01;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(11)  | YES  |     | NULL    |       |
| class | int(11)  | YES  |     | NULL    |       |
| name  | char(16) | YES  |     | NULL    |       |
| age   | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

4. 删除数据表

-- 删除表
DROP [TEMPORARY] TABLE table_name [IF EXISTS] table_name [, table_name] ...;-- 示例
drop table test_table;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PhpSpreadsheet 读取 excel 里面的图片

使用 phpSpreadSheet 插件去读取 excel 里面的图片时发现坑点很多,这里做一个总结 我使用的是 tp 框架 一、安装 phpSpreadSheet 插件 在composer.json配置 "require": {..."phpoffice/phpspreadsheet": "*" } composer安装 co…

配置环境安装包遇到的问题

1. error: could not install packages due to an oserror: [errno 28] no space left on device 说是磁盘占用过多,查看磁盘占用情况。 df -h 果然占比100% 清理了众多缓存.cache都不行,而且其他利用率很低,可能是pip install的过程中使…

代码随想录刷题随记4-链表

代码随想录刷题随记4 文章目录 代码随想录刷题随记424. 两两交换链表中的节点19.删除链表的倒数第N个节点面试题 02.07. 链表相交142.环形链表II 24. 两两交换链表中的节点 leetcode 链接 没什么技巧,主要考察链表操作的熟练程度 class Solution { public:ListNod…

qt 实现 轮播图效果,且还有 手动 上一页和下一页 已解决

QT中有 轮播图的需求,按照正常html版本 。只需要配置数组就能搞定,但是c qt版本 应该用什么了。 第一想到的是采用定时器。 // 定时器初始化{m_pTime new QTimer(this);m_pTime->start(4 * 1000);//启动定时器并设置播放时间间隔m_pAutoFlag true;/…

TikCloud天玑云微服务技术选型

单体多机负载均衡详见:PUSDN 技术选型 平台采用Java开发语言,具有可移植性、跨平台等特性。同时,平台提供跨平台技术解决方案、Windows、MacOS、Linux多端互通,pgz-serial串口、建行POS收银等,都是基于本平台衍生的跨平台案例。 功能介绍使用技术优势/特性开发语言Java主…

数据库查询所有表和字段

查询所有表和字段 介绍 有时候可能要展示所有的表以及所有的字段,下面介绍oracle和mysql的方法以及代码 oracle sql 查询所有表 select Table_NAME from all_tables where owner 表空间 查询字段 SELECT * FROM user_tab_columns where table_name upper(表名…

【python】python turtle绘制坤坤打球

一、效果图: 二、准备工作 (1)、导入必要的模块: 代码首先导入了需要使用的模块:requests、lxml和csv。 import requests from lxml import etree import csv 如果出现模块报错 进入控制台输入:建议使用国内镜像源 p…

智慧公厕:跨界融合,打造智慧城市新名片

随着城市化进程的不断加快,公共厕所建设成为一个亟待解决的问题。传统的公厕存在着管理繁琐、卫生差、服务不到位等一系列问题,与城市发展的节奏不协调。为此,推进新型智慧公厕建设成为了一个重要的解决方案。智慧公厕的建设需要推进技术融合…

Day32 贪心算法 part02

Day32 贪心算法 part02 122.买卖股票的最佳时机 II 我的思路: 只有当后一天比前一天价格高时,才出售,profit才累加 解答: class Solution {public int maxProfit(int[] prices) {if(prices.length 0) {return 0;}int profit …

【论文精读】VIT:vision transformer论文

相关文章 【论文精读】Transformer:Attention Is All You Need 文章目录 相关文章一、文章概览(一)研究背景(二)核心思路(三)相关工作(三)文章结论 二、模型细节&#x…

数据库中什么时候使用自增id,什么时候不能使用

在数据库中,自增ID的使用场景主要有以下几个: 插入记录时不需要指定ID:使用自增ID可以避免手动指定ID,从而避免了因重复ID导致的错误数据库自动编号,速度快:数据库会按照预设的步长(默认为1&am…

【MySQL系列】优化数据库时区设置,确保数据一致性与准确性

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Neo4J导入OWL文件

1.neosemantics版本分为4.0以下和4.0以上,两者区别大,我使用的是4.0以上版本,所以参考的是以下文章 owl导入Neo4j-CSDN博客 Neo4j图数据库简介、安装、使用、导入RDF文件_rdf导入neo4j-CSDN博客 2.不同版本的有些函数是不能通用的。 比如…

图论基础|深度优先dfs、广度优先bfs

dfs 与 bfs 区别 提到深度优先搜索(dfs),就不得不说和广度优先搜索(bfs)有什么区别 先来了解dfs的过程,很多录友可能对dfs(深度优先搜索),bfs(广度优先搜索…

鸿蒙Harmony应用开发—ArkTS-@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

上文所述的装饰器仅能观察到第一层的变化,但是在实际应用开发中,应用会根据开发需要,封装自己的数据模型。对于多层嵌套的情况,比如二维数组,或者数组项class,或者class的属性是class,他们的第二…

MySQL--select count(*)、count(1)、count(列名) 的区别你知道吗?

MySQL select count(*)、count(1)、count(列名) 的区别? 这里我们先给出正确结论: count(*),包含了所有的列,会计算所有的行数,在统计结果时候,不会忽略列值为空的情况。count(1),忽略所有的列…

AtCoder Beginner Contest 346

A. Adjacent Product(循环) 题意 给出 N N N个数字 A 1 , A 2 , … , A N A_1, A_2, \ldots, A_N A1​,A2​,…,AN​。定义 B i A i A i 1 ( 1 ≤ i ≤ N − 1 ) B_i A_i \times A_{i 1}(1 \le i \le N - 1) Bi​Ai​Ai1​(1≤i≤N−1)。 请你打印 B 1 , B 2 , … , B …

javase day09笔记

第九天课堂笔记 构造方法★★★★ 完成对属性赋值构造方法的名字必须与类名一致没有返回值类型public 类名(【参数】){ }构造方法在创建对象时同步执行没写无参构造,系统默认提供写了构造方法,系统不再提供构造方法:重载 引用数…

设计模式,策略模式

策略模式概述 策略模式,即与解决问题的策略有关的模式,该模式旨在更好的实现策略的实现。策略模式分为三个部分:环境、抽象策略角色、具体策略角色。策略模式能使得更好地管理和使用一类算法。 环境(context)&#xf…

【状态估计】概率论基础

《机器人学的状态估计》是入行SLAM的经典书籍之一,其中有大量的公式相关的内容,看起来还是比较艰涩的。最近重新读一遍,顺便将其中的一些内容记录下来,方便以后回看。 概率密度函数 定义 定义 x x x为区间 [ a . b ] [a.b] [a.b…