【MySQL】数据库基础、库的操作、表的操作、数据类型

目录

  • 1. 数据库基础
    • 1.1 MySQL是什么
    • 1.2 使用案例
    • 1.3 服务器,数据库,表关系
  • 2. 库的操作
    • 2.1 字符集和校验规则
      • 2.1.1 查看系统默认字符集以及校验规则
      • 2.1.2 查看数据库的字符集和校验规则
      • 2.1.3 修改数据库的字符集和校验规则
    • 2.2 库的操作
      • 2.2.1 创建数据库
      • 2.2.2 查看当前数据库
      • 2.2.3 显示创建语句
      • 2.2.4 数据库删除
      • 2.2.5 数据库的备份和恢复
        • 2.2.5.1 备份
        • 2.2.5.2 还原
      • 2.2.6 查看数据库被连接情况
  • 3. 表的操作
    • 3.1 创建表
    • 3.2 查看表
      • 3.2.1 查看当前数据库的全部表
      • 3.2.2 查看特定表的结构
    • 3.3 修改表
    • 3.4 删除表
  • 4. 数据类型
    • 4.1 数据类型分类
    • 4.2 数值类型
      • 4.2.1 bit类型
      • 4.2.2 小数类型
        • 4.2.2.1 float
        • 4.2.2.2 decimal
    • 4.3 字符串类型
      • 4.3.1 char
      • 4.3.2 varchar
    • 4.4 日期和时间类型
    • 4.5 enum和set
      • 4.5.1 enum
      • 4.5.2 set
        • 4.5.2.1 集合查询使用find_ in_ set函数

1. 数据库基础

1.1 MySQL是什么

  1. mysql它是数据库服务的客户端
  2. mysqld它是数据库服务的服务器端
  3. mysql本质:基于C(mysql) S(mysqld)模式的一种网络服务
  4. 一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据管理能力(用户角度)。数据库本质:对数据内容存储的一套解决方案,你给数据库字段或者要求,数据库直接给你结果。
  5. mysql是一套给我提供数据存取的服务的网络程序,而数据库一般指的是,在磁盘或者内存中存储的特定结构组织的数据 - 将来在磁盘上存储的一套数据库方案
  6. 数据库服务- mysqld
    在这里插入图片描述

1.2 使用案例

样例:
使用mysql建立一个数据库,建立一张表结构,插入一些数据

  1. 连接服务器
mysql -h 127.0.0.1 -P 3306 -u root -p
or
mysql -uroot -p

在这里插入图片描述

  1. 显示数据库
mysql> show databases;
  1. 建立数据库
mysql> create database helloworld;
  1. 使用数据库
mysql> use helloworld;
  1. 创建数据库表
create table student(
id int,
name varchar(32),
gender varchar(2)
);
  1. 表中插入数据
insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');
or
insert into student (id, name, gender) values 
(1, '张三', '男'),
(2, '李四', '女'),                     
(3, '王五', '男');                   
  1. 查询表中的数据
select * from student;

注意如果在第六步-----表中插入数据过程中出现了:

MySQL数据插入错误: Incorrect string value:"XXXXXX"for column'trurname' at row 1

那么在建库,建表的步骤都要标明utf8,如下:

  1. 使用数据库
mysql> use helloworld charset utf8;
  1. 创建数据库表
create table student(
id int,
name varchar(32),
gender varchar(2)
)charset utf8;

案例总结:

  1. 建立数据库,本质就是Linux下的一个目录
  2. 在数据库内建立表,本质就是在Linux下创建对应的文件即可!
  3. 数据库本质其实也是文件! 只不过这些文件并不由程序员直接操作,而是由数据库服务帮我们进行操作

1.3 服务器,数据库,表关系

  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据
  • 数据库服务器、数据库和表的关系如下:
    在这里插入图片描述

2. 库的操作

2.1 字符集和校验规则

2.1.1 查看系统默认字符集以及校验规则

show variables like 'character_set_database';
show variables like 'collation_database';

在这里插入图片描述

2.1.2 查看数据库的字符集和校验规则

字符集:

show charset;

字符集主要是控制用什么语言。比如utf8就可以使用中文。

校验规则:

show collation;

注意:在数据库对应的db.obj文件(路径为:/var/lib/mysql/数据库名/db.obj)中也可以看到该数据库的字符集和校对规则

2.1.3 修改数据库的字符集和校验规则

在这里插入图片描述

2.2 库的操作

2.2.1 创建数据库

  • 创建名为 db1 的数据库:
create database db1;
  • 在创建数据库时,我们可以设置它的字符集和校验集。当我们创建数据库没有指定字符集和校验规则时,系统使用默认字符集:utf8,校验规则是:utf8_ general_ ci(不区分大小写)
    在这里插入图片描述

2.2.2 查看当前数据库

show databases;

2.2.3 显示创建语句

show create database 数据库名;

示例:

mysql> show create database mytest;
+----------+----------------------------------------------------------------+
| Database | Create Database                                                |
+----------+----------------------------------------------------------------+
| mysql | CREATE DATABASE `mytest` /*!40100 DEFAULT CHARACTER SET utf8 */   |
+----------+----------------------------------------------------------------+

说明:

  • MySQL 建议我们关键字使用大写,但是不是必须的。
  • 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
  • /*!40100 default… */ 这个不是注释,表示当前mysql版本大于4.01版本,就执行这句话

2.2.4 数据库删除

drop database db_name;  //db_name指数据库名字

执行删除之后的结果:

  • 数据库内部看不到对应的数据库
  • 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删

2.2.5 数据库的备份和恢复

2.2.5.1 备份
  • 备份一个或多个数据库
//语法:
# mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径
//实例:
# mysqldump -P3306 -u root -p -B mytest > /home/xl/MySQL/mytest.sql

MySQL中没有mytest.sql文件夹,就会自动生成一个mytest.sql文件夹。

  • 备份表
# mysqldump -u root -p 数据库名 表名1 表名2 > /home/xl/MySQL/mytest.sql(路径)
2.2.5.2 还原
mysql> source /home/xl/MySQL/mytest.sql(路径);

还原操作后,原本备份在mytest.sql里的内容,全部会还原。
注意:如果备份数据库时,没有带上-B参数, 那么在恢复数据库时,需要先创建空数据库,然后使用数据库,再使用source来还原

2.2.6 查看数据库被连接情况

语法:

mysql> show processlist;

示例:

+----+------+-----------+------+---------+------+-------+------------------+
| Id | User |   Host    |  db  | Command | Time | State | Info             |
+----+------+-----------+------+---------+------+-------+------------------+
| 2  | root | localhost | test |  Sleep  | 1386 |       | NULL             |
| 3  | root | localhost | NULL |  Query  |  0   |  NULL | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+

可以告诉我们当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。以后大家发现自己数据库比较慢时,可以用这个指令来查看数据库连接情况。

3. 表的操作

3.1 创建表

语法:

CREATE TABLE table_name (
   field1 datatype,
   field2 datatype,
   field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
//也可以:charset=字符集 collate=校验规则 engine=存储引擎;

说明:

  • field 表示列名
  • datatype 表示列的类型
  • 如果没有指定字符集 / 校验规则 / 存储引擎,则以所在数据库的 字符集 / 校验规则 / 存储引擎 为准
  • 不同的存储引擎,创建表的文件不一样

实例:

create table users (
   id int,
   name varchar(20) comment '用户名',
   password char(32) comment '密码是32位的md5值',
   birthday date comment '生日'
) character set utf8 engine MyISAM;

3.2 查看表

3.2.1 查看当前数据库的全部表

show tables;

3.2.2 查看特定表的结构

方法一:

desc 表名;

实例:
在这里插入图片描述
方法二:
通过查看创建表时的详细信息。
在这里插入图片描述

3.3 修改表

实例:

create table users (
   id int,
   name varchar(20) comment '用户名',
   password char(32) comment '密码是32位的md5值',
   birthday date comment '生日'
) character set utf8 engine MyISAM;
  • 在users表添加二条记录
mysql> insert into users values(1,'a','b','1982-01-04'),(2,'b','c','1984-01-04');
or 
mysql> insert into users (id,name,password,birthday) values(1,'a','b','1982-01-04'),(2,'b','c','1984-01-04');   
//id,name,password,birthday可以打乱,只要一一对应就好。
  • 改变表中某一行数据:改为 id=3
update users set id=3;  若只有一行数据,可改变某一列数据
update users set id=3 where name='张三';   指name='张三'的那一行
  • 修改表名
alter table 原表名 rename to 新表名;
or
rename table old_table1 to new_table1, old_table2 to new_table2; 

 to:可以省掉

  • 在users表添加一个字段
mysql> alter table users add image_path varchar(100) comment '这是图片的路径' after birthday;
//新增的一列名称为:image_path  位置在birthday后
  • 修改name,将其长度改成60
mysql> alter table users modify name varchar(60);
or 
mysql> alter table tt3 change a name varchar(60);
  • 删除password列
mysql> alter table users drop password;
  • 将name列修改为xingming
mysql> alter table 表名 change name xingming varchar(60); --新字段需要完整定义

3.4 删除表

drop table 表名;

4. 数据类型

4.1 数据类型分类

在这里插入图片描述

4.2 数值类型

在这里插入图片描述

  • 如果数据不合法,不符合数值范围,则插入会失败

4.2.1 bit类型

bit[(M)] : 位字段类型。
M表示每个值的位数(即最多有多少个比特位),范围从164。如果M被忽略,默认为1

bit使用的注意事项:

  • bit字段在显示时,是按照ASCII码对应的符号显示。
  • 如果我们有这样的值,只存放0或1,这时可以定义bit(1)。这样可以节省空间。

4.2.2 小数类型

4.2.2.1 float

语法:

float[(m, d)] [unsigned] : M指定显示长度(小数位数+整数位数),d指定小数位数

实例:

float(4,2) 表示的范围是-99.99 ~ 99.99。
float(4,2) unsigned 表示的范围是0.00~ 99.99。

注意:

  • 如果传入的数精度过高,MySQL在保存值时会进行四舍五入。
  • 当传入的数小数位数不够时,MySQL会自动在后面添0
4.2.2.2 decimal

语法:

decimal(m, d) [unsigned] : M指定显示长度(小数位数+整数位数),d指定小数位数

实例:

decimal(4,2) 表示的范围是-99.99 ~ 99.99。
decimal(4,2) unsigned 表示的范围是0.00~ 99.99。

注意:

  • decimalfloat 很像,但是有区别。 float和decimal表示的精度不一样。
  • float 表示的精度大约是7位。decimal整数最大位数m为65。
  • decimal 支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10
  • 如果希望小数的精度高,推荐使用decimal。

4.3 字符串类型

4.3.1 char

语法:

char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255

实例:

mysql> create table tt9(id int, name char(2));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into tt9 values(100, 'ab');   //要加单引号
Query OK, 1 row affected (0.00 sec)

注意:

  • utf8_ general_ ci校验规则中,一个汉字是一个字符。
  • 添加时要加单引号,因为是字符串

4.3.2 varchar

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节
  • utf8字符集中,一个字符是3个字节
  • varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。有效字符数是65532%3=21844
  • varcharchar 比较:
    在这里插入图片描述

4.4 日期和时间类型

常用的日期有如下三个:

  • date :日期 ‘yyyy-mm-dd’ ,占用三字节
  • datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从 1000 到 9999 ,占用八字节
  • timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,为记录的当前时间,占用四字节
  • 添加数据时,时间戳自动补上当前时间;更新数据,时间戳会更新成当前时间

4.5 enum和set

4.5.1 enum

语法:
enum:枚举,“单选”类型;
enum(‘选项1’,‘选项2’,‘选项3’,…);
在插入时,可以插入枚举常量或枚举下标(下标从1开始)。

4.5.2 set

set:集合,“多选”类型;
set(‘选项值1’,‘选项值2’,‘选项值3’, …);

插入方法:

  1. 直接插入集合常量:插入时,可以插入一个或多个集合常量,如果是多个的话,用逗号分隔。
  2. 插入一个数字:使用数字标识每个有哪些集合常量的时候,采用位图的方法
mysql> create table votes(
-> username varchar(30),
-> hobby set('骑车','滑雪','篮球','武术'), 
-> gender enum('男','女'));

insert into votes values('张三', '滑雪, 武术', '男');
insert into votes values('李四', 3, 2);
insert into votes(username,gender) values('赵王', '女');
insert into votes(username,hobby,gender) values('张丽',0 ,'女');
select * from votes;
+----------+---------------+--------+
| username |     hobby     | gender |
+----------+---------------+--------+
|   张三   |    滑雪, 武术   ||
+----------+---------------+--------+
|   李四   |    篮球,武术   ||
+----------+---------------+--------+
|   赵王   |      NULL      ||
+----------+---------------+--------+
|   张丽   |                ||
+----------+---------------+--------+

李四hobby位图分析:
在这里插入图片描述

4.5.2.1 集合查询使用find_ in_ set函数

find_in_set(a,b)

  • 如果 集合a 在 集合b 中,则返回下标(下标是从1开始);如果不在,返回0;
  • b是用逗号分隔的字符串。但是b只能是一个不含逗号的字符串

实例:
在这里插入图片描述

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

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

相关文章

c++算法第4天

本篇文章包含三道算法题&#xff0c;难度由浅入深&#xff0c;适合新手练习哟 第一题 题目链接 牛牛的快递_牛客题霸_牛客网 题目解析 <1kg -------> 20元 大于1kg&#xff1a;超出部分每千克1元 加急 5元 代码原理 代码编写 #include …

QT 实现自定义水波进度条

1.界面实现效果 以下是具体的项目需要用到的效果展示。 2.简介 原理:随着进度的改变,在我们的绘制图像void paintEvent(QPaintEvent *) override;事件中绘制图形。 使用QPainter来绘制正弦波,通过定时器,不断的更新我们绘制的图形,动态改变正弦波的参数来创建动画效果…

【从零开始的LeetCode-算法】3099. 哈沙德数

如果一个整数能够被其各个数位上的数字之和整除&#xff0c;则称之为 哈沙德数&#xff08;Harshad number&#xff09;。给你一个整数 x 。如果 x 是 哈沙德数 &#xff0c;则返回 x 各个数位上的数字之和&#xff0c;否则&#xff0c;返回 -1 。 示例 1&#xff1a; 输入&am…

提高阅读效率:三种读书笔记方法的实践

你是否曾经感到&#xff0c;尽管阅读了大量书籍&#xff0c;却很少有几本能够留下持久的印象&#xff0c;甚至书中的人物也逐渐从记忆中消失。实际上&#xff0c;这种阅读方式可能并没有太大的价值。要想真正从阅读中获益&#xff0c;培养良好的阅读习惯至关重要&#xff0c;而…

IDEA下lombok安装及找不到get,set的问题的解决方法

在IDEA中使用Lombok,但是在编译时&#xff0c;提示找不到set()和get()方法&#xff0c;明明在javabean中使用了Data注解&#xff0c;但是编译器就是找不到。 Idea下安装Lombok(需要二步) 第一步&#xff1a; pom.xml中加入lombok依赖包 1 2 3 4 5 6 7 <!-- https://mvnre…

Linux的开发工具gcc Makefile gdb的学习

一&#xff1a;gcc/g 1. 1 背景知识 1. 预处理&#xff08;进行宏替换) 预处理 ( 进行宏替换 ) 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项的作用是让 gcc 在预处理结…

如何在算家云搭建PhotoMaker(图像生成)

一、PhotoMaker简介 PhotoMaker是一种高效、个性化的文本转图像生成方法&#xff0c;能通过堆叠 ID 嵌入自定义的逼真人类照片。相当于把一张人类照片的特征提取出来&#xff0c;然后生成你想要的不同风格照片&#xff0c;如写真等等。 主要特点&#xff1a; 在几秒钟内快速…

远控代码的重构-远控网络编程的设计上

套路化代码 但是我们这是一个MFC工程,我们需要考虑不是所有操作都需要到main函数里面实现,有些操作可以在main函数之前完成,有些可以在main函数返回以后完成,静态全局变量满足这个需求,我们需要添加一个自己的类 编辑器细节1 添加类和添加类向导的区别,一个是添加自己的类,一…

ESP8266 模块介绍—AT指令学习 笔记

零、简介 感谢百文网韦东山 老师对ESP8266模块的讲解 笔记在CSDN也有文章备份 大家可以在我的gitee仓库 中下载笔记源文件、ESP8266资料等 笔记源文件可以在Notion中导入 一、ESP8266-01S模块详细介绍 1. 名字的由来 ESP8266 是方形的主控芯片旁边的长方形是一个Flash-0…

000010 - Mapreduce框架原理

Mapreduce框架原理 1. InputFormat 数据输入1.1 切片与 MapTask 并行度决定机制1.2 Job 提交流程源码和切片源码详解1.2.1 Job 提交流程源码详解1.2.2 FileInputFormat 切片源码解析&#xff08;input.getSplits(job)&#xff09; 1.3 FileInputFormat 切片机制1.3.1 切片机制1…

基于Springboot个性化图书推荐系统的设计与实现

基于Springboot个性化图书推荐系统的设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;idea 源码获取&#xff1a;…

整理—计算机网络

目录 网络OSI模型和TCP/IP模型 应用层有哪些协议 HTTP报文有哪些部分 HTTP常用的状态码 Http 502和 504 的区别 HTTP层请求的类型有哪些&#xff1f; GET和POST的使用场景&#xff0c;有哪些区别&#xff1f; HTTP的长连接 HTTP默认的端口是什么&#xff1f; HTTP1.1怎…

兴业周报|央行宣布“有力度的降息”他来了

耕天下4号楼1单元5-103室&#xff08;复式&#xff09; 稀有户型&#xff1a;标的物为二环内南北通透4居室复式&#xff0c;低密度花园洋房&#xff0c;小区中心位置&#xff0c;前后不临街。 黄金地段&#xff1a;耕天下东接天坛公园、西靠陶然亭公园、南临南护城河、北抵先…

基于微信小程序二手物品调剂系统设计与实现

文章目录 前言项目介绍技术介绍功能介绍核心代码数据库参考 系统效果图文章目录 前言 文章底部名片&#xff0c;获取项目的完整演示视频&#xff0c;免费解答技术疑问 项目介绍 二手物品调剂系统是一种在线平台&#xff0c;旨在促进用户之间的二手物品交易。该系统提供了一个…

优雅的入参校验,Valid常用校验

更好的阅读体验&#xff1a;优雅的入参校验&#xff0c;Valid常用校验 对于前端传递的参数&#xff0c;正常情况下后端是要进行一些必要的校验&#xff0c;最简单的做法是用 if 效果是可以&#xff0c;但不优雅。使用 Validator 代替 if&#xff0c;就会优雅很多 ps&#xff…

【从零开发Mybatis】引入MapperConfig.xml和Mapper映射配置

引言 学习MyBatis源码之前&#xff0c;了解它是如何通过JDBC查询数据库数据的基础知识是非常有用的。 上一篇我们编写了一个最简单的示例&#xff0c;通过JDBC查询数据库数据&#xff0c;从本文开始&#xff0c;我们将正式开始Mybatis框架的开发。 通过JDBC查询数据库数据存…

中国移动机器人将投入养老场景;华为与APUS共筑AI医疗多场景应用

AgeTech News 一周行业大事件 华为与APUS合作&#xff0c;共筑AI医疗多场景应用 中国移动展出人形机器人&#xff0c;预计投入养老等场景 作为科技与奥富能签约&#xff0c;共拓智能适老化改造领域 天与养老与香港科技园&#xff0c;共探智慧养老新模式 中山大学合作中国…

改变函数调用上下文:apply与call方法详解及实例

目录 改变函数调用上下文&#xff1a;apply与call方法详解及实例 一、什么是 apply 方法&#xff1f; 1、apply 语法 2、apply 示例 二、什么是 call 方法&#xff1f; 1、call 语法 2、call 示例 三、apply 和 call 的共同与差异 1、apply 和 call 的共同点 2、apply…

opencv学习:基于计算机视觉的表情识别系统

简介 基于计算机视觉的表情识别系统&#xff0c;该系统能够从视频流中实时检测人脸&#xff0c;并识别出两种基本表情&#xff1a;大笑和微笑。实验通过分析人脸关键点来计算表情特征指标&#xff0c;从而判断表情类型。 原理 基于以下原理进行&#xff1a; 人脸检测&#x…

Transformer(Vit+注意力机制)

文献基本信息&#xff1a; Encoder-Decoder&#xff1a; Transformer的结构&#xff1a; 输入编码器解码器输出 Transformer的工作流程&#xff1a; 获取输入句子的每一个单词的表示向量X&#xff0c;X由单词的embedding&#xff08;embedding是一种将高维特征映射到低维的技…