MySql 基础

1.认识Mysql

  1. MySql 三层结构
  • DBMS 数据库管理系统

    • DataBase1
      • 表2…..
    • DataBase2
      • 表1
      • 表2…..
    • DataBase……
  • MySql 不区分大小写

我们所说的数据库包含上述三层结构,当然除了上述内容外还有些其他功能结构。

客户端——> 通过port 3306 —–>数据库(数据存储的各种数据)

数据库分为;

  1. 关系型数据库

    通过表和表之间,行和列之间的关系进行数据的存储

  2. 非关系型数据库

    Redis,MongDB

2.创建一个数据库

  • CHARACTER SET:指定数据采用的字符集如果不指定 默认为uft_8
  • COLLATE:指定数据可字符集的校对规则(常用utf_bin【严格区分大小写】、utf8_general_ci 【不区大小写 默认】)

注意:

​ 校对 不区分大小写,如果表中数据存在相同字段但大小写不同,只会显示一条结果;


CREATE DATABASE [IF NOT EXISTS] name CHARACTER 字符集名称 COLLATE 校对规则

[IF NOT EXISTS] 如果DB存在不会执行

省略后如果创建书库存在则会报错,

创建数据库&删除数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14

#创建数据库 不指定字符集 和 校对规则 则默认 一般为utf8(mb3) 新版的utf8mb4
CREATE DATABASE hsp_db01

#删除数据库
DROP DATABASE hs_db01
DROP DATABASE hsp_da02

#创建一个使用utf8mb4 的字符集 的 hsp_da02数据库
CREATE DATABASE hsp_da02 CHARACTER SET utf8mb4

#创建一个使用utf8mb4 校对规则为utf8mb4_bin 不区分大小写
CREATE DATABASE hsp_da03 CHARACTER SET utf8mb4 COLLATE utf8mb4_bin

1
2
3
4
5
6
#显数DB
SHOW DATABASES
#显示差创建的数据库语句
SHOW CREATE DATABASE db_name
#删除 DB
DROP DATABASE [IF EXISTS] name

3.备份数据库

Dos命令行

​ 备份数据库

mysqldump -u user_name -p -B DB1 DB2 … > file_name.sql

​ 备份数据库中的表

mysqldump -u user_name -p DB1 tb1 tb2 … > file_name.sql

注意:

  1. 添加环境,每天加去bin目录启动
  2. 不要在sql控制台输入 会报错
  3. -p 后密码不要输入 回车后输入

恢复数据库

Source file_name


4.创建表

1
2
3
4
5
6
7
8
CREATE TABLE (
file1 datatype,
file2 datatype,
...
)character set 字符集 collate 校对规则 engine 引擎

#character set 默认与数据库一致
#collate 默认与数据库一致

创建表示注意确认当前是在那个数据库


5.MySql 数据类型

  • 也称作列类型

引入一下整形 范围和 正负的 理解,我们都知道1byte等于8bit

char c; 这个字符c 能表示的范围为 2^8 也就是0-255

short int i; 短整形 站2byte 2^16 也就是 -32768 — + 32767

unsigned short int; 这个无符号类型 则是 0-65535

在二进制中正负实现规则为下,任意一个非unsigned整形 最高位是用来存放0 1 0表示没有符号也就是为正 1表示有符号也就为负

所以 实际存放数值的只有15位二进制数,2^15 就为 0-32767了

数值类型

  • 整形

    • bit(M) [m指定位数 默认1 范围1-64]是以二进制输出的 比如 bit(8) =255 输出的 ‘11111111’
    • tinyint [1byte]
    • smallint [2byte]
    • mediumint [3byte]
    • int [4byte]
    • bigint [8byte]
  • 小数类型

    • float [单精度 4byte]
    • double [双精度 8byte]
    • decimal(M,D) [大小不确定]
  • 文本类型

    • char [0-255 字符]
    • varchar [0-65535 字节 utf8编码 最大为21844字符 1-3个字节用于记录大小 如果编码为gbk 2个字符用记录大小]
    • text [0-65535]
    • longtext[0-2^32-1]
  • 二进制数据类型

    • blob [0- 2^16-1]
    • longblob [0-2^32-1]
  • 时期类型

    • date [日期 年月日]
    • year [年]
    • time [时间 时分秒]
    • datetime [年月日 时分秒]
    • timestamp [时间戳]

使用规则:保小不保大

在满足需求的情况下,经理选择占用空间较小的类型

decimal(M,D)

定点数精度非常高

双精度,两个参数decimal(m,d) m <= 65 D <= 30 D默认为0 M默认为10

M为总小数位数 D为小数点后位数 D为0则内有小数点或者分数部分。

字符串

char(size ) size 表示的是字符数(不论是否是中文还是其他)而不是字节,注意不好搞混了

varchar(size) 同理

1
2
3
4
5
6
CREATE TABLE `tb`(
`char` CHAR(),
`varchar` VARCHAR()
);
INSERT INTO `tb` VALUES('四个字符', 'abcd');

image-20221106221218148

1_CHAR 和 VARCHAR

char() 类型和数组一样 是定长的不可改变其大小,如果超出就会报错

优点:适合定长的字符串 并且执行效率很高

缺点:长度不定时容易产生错误

varchar() 类型 是一种可边长数组 不定长

优点:varchar 在对于不知道字符有多长时 有用处

缺点:搜索没有char快速,并且空间利用也没有char高效

2_TEXT、MEDIUMTEXT、LONGTEXT

text 0-2^16

mediumtext 0-2^24

longtext [0-2^32-1]

文本类型,可替换varchar类型也是不定长字符串。适合用于非常长的字符串比如文章

1
2
3
4
5
6
7
CREATE TABLE [IF NOT EXISTS] `tb3` (
`text` TEXT,
`mediumtext` MEDIUMTEXT,
`longtext` LONGTEXT
);

INSERT INTO [IF NOT] `tb3` VALUE('这个类型很长', '可变长字符串', '汉子3字节1111这个一字节编码不同可能不一样');

image-20221106222840415

—-注意后面的字节数