MySQL基本知识

1.数据库

1.1.创建数据库

语法:

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification[,create_specification]...]
create_specification: [DEFAULT]CHARACTER SET charset_name
[DEFAULT]COLLATE collation_name
  1. CHARACTER SET:指定数据库采用的字符集,如果不指定字符集,默认为utf8
  2. COLLATE:指定数据库字符集的校对规则(常用的uft8_bin[区分大小写]、utf8_general_ci[不区分大小写] 默认是 utf8_general_ci)

练习:

  1. 创建一个名为hsp_db01的数据库[图形和指令演示]

  2. 创建一个utf8字符集的hsp_db02的数据库

  3. 创建一个使用utf8字符集,并带校对队则的hsp_db03数据库

    指令创建:

#演示数据库的操作
#1. 创建一个名为hsp_db01的数据库
CREATE DATABASE hsp_db01; #删除数据库指令
DROP DATABASE hsp_db01; #2. 创建一个utf8字符集的hsp_db02的数据库
CREATE DATABASE hsp_db02 CHARACTER SET utf8 #3. 创建一个使用utf8字符集,并带校对队则的hsp_db03数据库
CREATE DATABASE hsp_db03 CHARACTER SET utf8 COLLATE utf8_bin
#校对规则 utf8_bin 区分大小写 默认utf8_general_ci 不区分大小写

​ 可以看见在不指定采用字符集和校验规则的情况下,字符集默认为utf8,校验规则默认为utf8_general_ci

关于字符集和校验规则:

如果在创建表的时候没有指定字符集和校验规则,则遵循和数据库一样的规则

如下:在数据库hsp_db02中创建表t1,t1设为默认字符集和校验规则。

在表t1中用select查询可以得到不区分大小写的两条数据:

在数据库hsp_03中创建同样的表t1并插入同样的数据,查询后只得到一条数据:

因为数据库hsp_03在创建时指定校验规则为utf8_bin,区分大小写,查询返回的数据也区分了大小写

数据库hsp_02没有指定大小写,返回的查询没有区分大小写

因此可知当表设置默认的字符集和校验规则时,其则遵循数据库的字符集和校验规则

1.2查看、删除数据库

  • 语法:
#显示数据库语句
#显示数据库创建时的语句
#数据库删除语句[一定要慎用]

练习

  1. 查看当前服务器中的所有数据库

    SHOW DATABASES

  2. 查看前面创建的hsp_02数据库的定义信息

    SHOW CREATE DATABASE hsp_db02

  3. 删除前面创建的数据库

  • 关键字作名字创建数据库:

    • 说明1:数据库名用反引号括起来,是为了规避数据名字为关键字

    例如:创建一个名为create的数据库,不使用反引号就会报错

    使用了反引号之后,就可以成功创建数据库


    使用关键字创建,在删除的时候也要在名字旁边反引号

    • 说明2:后面的语句用/*!40100...*/ 说明版本要在4以上执行这条语句

1.3备份恢复

1.3.1备份恢复数据库

  • 语法:

备份数据库 (注意:在DOS执行)

mysqldump -u 用户名 -p -B 数据库1 数据库2 数据库n > 文件名.sql

恢复数据库(注意:进入MySQL命令行再执行)

Source 文件名.sql

练习:备份恢复数据库

备份hsp_db02和hsp_db03库中的数据,并恢复

  1. 备份:

    如下,在Dos窗口下输入指令,指明备份的数据库和保存的文件名

在指定的路径下生成了对应的sql文件

这个备份的文件就是对应的sql语句:

  1. 恢复

首先删除掉数据库hsp_db02和hsp_db03

登录账号,进入mysql命令行,输入指令 Source d:\\\bak.sql

可以看到数据库及里面的信息成功恢复:

1.3.2备份恢复数据库表

  • 语法:

备份数据库的表

mysqldump -u 用户名 -p 数据库 表1 表2 表n > 文件名.sql

(注意:在DOS执行)


恢复和数据库同理(注意进入mysql命令行执行)

2.表

2.1创建表

  • 语法:
CREATE TABLE table_name
(
field1 datatype,
field2 datatype,
field3 datatype
)character set 字符集 collate 校对规则 engine 存储引擎 # field:指定列名 datatype:指定列类型(字段类型)
# character set:如不指定则为所在的数据库字符集
# collate:如不指定则为所在的数据库的校验规则
# engine:引擎(这个涉及较多,后面单独讲解)

练习1

在数据库hsp_db02创建一张表,根据需求的数据创建相应的列,并根据数据的类型定义相应的列类型

user表:

id  		整形
name 字符串
passwoed 字符串
birthday 日期
#id  		整形
#name 字符串
#passwoed 字符串
#birthday 日期
CREATE TABLE `user`(
id INT,
`name` VARCHAR(255),
`password` VARCHAR(255),
`birthday` DATE)
CHARACTER SET utf8 COLLATE utf8_bin ENGINE INNODB;

练习2

创建一个员工表,选用适当的数据类型

#创建表的课堂练习
CREATE TABLE emplyee(
id INT,
`name` VARCHAR(32),
sex CHAR(1),
birthday DATE,
entry_date DATE,
job VARCHAR(32),
Salary FLOAT,
`resume` TEXT ) CHARSET utf8 COLLATE utf8_bin ENGINE INNODB; -- 添加一条数据
INSERT INTO emplyee VALUES (
100,'小妖怪','男','2000-11-11',
'2010-11-10','巡山的',3000,'大王叫我来巡山'); SELECT * FROM emplyee ;

2.2删除、修改表

使用ALTER TABLE 语句追加,修改,或删除列的语法

  • 语法:

添加列:

ALTER TABLE tablename
ADD (column datatype [DEFAULT expr][,column datatype]...);

修改列:

ALTER TABLE tablename
MODIFY (column datatype [DEFAULT expr][,column datatype]...);

删除列:

ALTER TABLE tablename
DROP (column);
查看表的结构:desc 表名; -- 可以查看表的列

修改表名:

Rename table 表名 to 新表名;

修改表的字符集:

alter table 表名 character set 字符集;

应用案例

  1. 在员工表上增加一个image列,为vachar类型(要求在resume后面)
  2. 修改job列,使其长度为60
  3. 删除sex列
  4. 表名修改为emp
  5. 修改表的字符集为utf8
  6. 列名name修改为user_name
# 修改表的操作练习
-- 1. 在员工表上增加一个image列,为vachar类型(要求在resume后面)
ALTER TABLE emplyee
ADD image VARCHAR(32) NOT NULL DEFAULT ''
AFTER RESUME; -- 2. 修改job列,使其长度为60
ALTER TABLE emplyee
MODIFY job VARCHAR(60) NOT NULL DEFAULT '' -- 3. 删除sex列
ALTER TABLE emplyee
DROP sex; -- 4. 表名修改为emp
RENAME TABLE emplyee TO emp; -- 5. 修改表的字符集为utf8
ALTER TABLE emp CHARACTER SET utf8; -- 6. 列名name修改为user_name
ALTER TABLE emp
CHANGE `name` user_name VARCHAR(64) NOT NULL DEFAULT '' DESC emp -- 显示表结构,可以查看表的所有列

3.MySQL常用数据类型(列类型)

Mysql列类型即mysql的数据类型

详见MySQL的参考手册

3.1列类型之整型

  • 说明

数值型(整型)的基本使用

说明:使用规范:在能够满足需求的情况下尽量选择空间小的类型

应用实例

  • 3.1.2.1无符号TINYINT
  1. 在数据库hsp_02中创建一个表t2,在表中插入列类型tinyint,列名为id
CREATE TABLE t2(
id TINYINT);
  1. 在表中插入数据 -129,执行后提示错误,可以看到t2为空表

  1. 往表中插入数据-128,执行成功,表中成功插入数据

  1. 同理,分别往表中插入数据128、127,只有127插入成功

    说明在有符号情况下,tinyint的范围为-128~127

  • 有符号TINYINT

在列类型后面指定无符号

CREATE TABLE t3(
id TINYINT UNSIGNED);
INSERT INTO t3 VALUES(-1);#错误,超出范围
INSERT INTO t3 VALUES(0);
INSERT INTO t3 VALUES(256);#错误,超出范围
INSERT INTO t3 VALUES(255);

3.2列类型之BIT

  • 说明
  1. bit字段显示时,按照位的方式显示(按照指定位数的二进制显示)
  2. 查询的时候仍然可以使用 添加时的数值(比如十进制)来查询
  3. 如果一个值只有0,1,可以考虑使用bit(1),可以节省空间
  4. 位类型。M指定位数,默认值1,范围1-64

练习

#演示bit类型使用
#说明
#1.bit(M) M在1-64位
#2.添加数据 的范围是按照你给定的M的位数来确定,例如M=8 表示一个字节(8bit) 0~255
create table t5 (num bit(8));
INSERT INTO t5 VALUES(5);
insert into t5 values(3);
select * from t5;
#3.查询时仍然可以按照十进制数来查询
select * from t5 where num = 5;

3.3列类型之小数类型

  • 说明
  1. FLOAT/DOUBLE[UNSIDNED]

    float 单精度,double 双精度

  2. DECIMAL[M,D] [UNSIGNED]

    • 可以支持更加精确的小数位。M是小数位数(精度)的总数,D是小数点(标度)后面的位数。

    • 如果D是0,则值没有小数点或分数部分。M最大65,D最大是30。如果D被省略,默认D是0;如果M被省略,默认M是10.

    • 建议:如果希望小数点的精度高,推荐使用decimal

练习

#案例演示 float、double、decimal的使用
CREATE TABLE t6(
num1 FLOAT,
num2 DOUBLE,
num3 DECIMAL(30,20));
#添加数据
INSERT INTO t6 VALUES(88.12345678912345,88.12345678912345,88.12345678912345); #查询
SELECT * FROM t6; #decimal可以存放很大的数

3.4列类型之字符串(文本类型)

  • 说明

    字符串的基本使用:

    CHAR(size)

    固定长度字符串 最大255字符

    VARCHAR(size)

    可变长度字符串 最大65532字节

    [ utf8编码最大字符为21844字符,1-3个字节用于记录大小,uft8编码每个字符占用三个字节 ]

    如果编码是uft8 则varchar(size) size = (65535-3) / 3 = 21844

    如果编码是gbk 则varchar(size) size = (65535-3) / 2 = 32766

    错误使用:(uft8)

成功插入:(uft8)

gbk字符集下:

  • 字符串使用细节

  • 细节1:

    • 如 char(4) //这个4表示字符数(最大255),不是字节数,不管是中文还是字母都是放四个,按字符计算

    • varchar(4) //这个4表示字符数,(这四个字符占用多少个字节取决于你定义的编码) 不管是字母还是中文都以定义好的表的编码来存放数据

    上面的例子不管是中文还是字母都是最多存放4个,是按照字符来存放的

  • 细节2:

    • char(4)是定长(固定的大小),就是说,即时你插入'aa',也会占用分配的4个字符
    • varchar(4)是可变长,即如果你插入的是'aa',实际占用的空间大小并不是4个字符,而是按照实际占用空间来分配。VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节) ,因此varchar的实际长度=实际的数据大小+(1-3个字节)

  • 细节3:使用的的时机

    • 如果数据是定长,推荐使用char,比如md5的密码,邮编,手机号,身份证号码等
    • 如果一个字段的长度不定,就使用varchar,比如留言,文章
    • 查询速度 char > varchar
  • 细节4:

    • 在存放文本时,也可以使用text数据类型。可以将text列视为varchar列,注意text不能有默认值,大小 0~2^16字节
    • 如果希望存放更多字符,可以选择mediumtext 0~2^24 或者 longtext 0~2^32

例子:

在下图中,不管插入的是中文还是字母,每一个都按一个字符来算,因此'abcde'相当5个字符长度,插入失败;varchar同理。

失败:

成功:

例子2:关于text,mediumtext 和 longtext的使用

如上图所示:在插入的数据后面显示了实际使用的数值大小

content1有两个中文=2*3=6bit,每个数字占用一个字节,共计9bit

content2也有两个中文=2*3=6bit,有八个数字,共计14bit

3.5列类型之日期类型

  • 日期类型的细节说明

    TimeStamp在Insert和Update时,会自动更新

例子:

#演示时间相关的案例
#创建一张表,data ,datatime,timestamp
CREATE TABLE t13(
birthday DATE,-- 生日
job_time DATETIME,-- 记录年月日 时分秒
login_time TIMESTAMP
NOT NULL DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP);-- 登录时间,如果希望login_time列自动更新,需要配置 INSERT INTO t13(birthday,job_time)
VALUES('2022-11-11','2022-11-11 10:10:10');
#如果我们更新了t13的某条记录,login_time会自动地以当前时间来进行更新 SELECT * FROM t13;

day02-MySQL基础知识的更多相关文章

  1. mysql基础知识大全

    前言:本文主要为mysql基础知识的大总结,mysql的基础知识很多,这里作简单概括性的介绍,具体的细节还是需要自行搜索.当然本文还有很多遗漏的地方,后续会慢慢补充完善. 数据库和数据库软件 数据库是 ...

  2. mysql基础知识语法汇总整理(二)

    mysql基础知识语法汇总整理(一) insert /*insert*/ insert into 表名(字段列表) values(值列表); --蠕虫复制 (优点:快速复制数据,测试服务器压力) in ...

  3. mysql基础知识语法汇总整理(一)

    mysql基础知识语法汇总整理(二)   连接数据库操作 /*连接mysql*/ mysql -h 地址 -P 端口 -u 用户名 -p 密码 例如: mysql -u root -p **** /* ...

  4. MySQL 基础知识梳理

    MySQL 的安装方式有多种,但是对于不同场景,会有最适合该场景的 MySQL 安装方式,下面就介绍一下 MySQL 常见的安装方法,包括 rpm 安装,yum 安装,通用二进制安装以及源码编译安装, ...

  5. MySQL基础知识:启动管理和账号管理

    整理.记录常用的MySQL基础知识:时间久了,很多就忘记了. 操作系统环境为MacOS Catalina, MySQL版本为: 8.0.13 MySQL Community Server - GPL. ...

  6. MySQL基础知识:创建MySQL数据库和表

    虚构一个微型在线书店的数据库和数据,作为后续MySQL脚本的执行源,方便后续MySQL和SQL的练习. 在虚构这个库的过程中,主要涉及的是如何使用命令行管理 MySQL数据库对象:数据库.表.索引.外 ...

  7. MySQL基础知识:Character Set和Collation

    A character set is a set of symbols and encodings. A collation is a set of rules for comparing chara ...

  8. mysql基础知识详解

    分享一些mysql数据库的基础知识. 1.每个客户端连接都会从服务器进程中分到一个属于它的线程.而该连接的相应查询都都会通过该线程处理.2.服务器会缓存线程.因此并不会为每个新连接创建或者销毁线程.3 ...

  9. Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型

    1.基础知识 1.1.数据库概述 简单地说:数据库(Database或DB)是存储.管理数据的容器: 严格地说:数据库是"按照某种数据结构对数据进行组织.存储和管理的容器". 总结 ...

  10. 一、MySQL基础知识

    一.背景介绍 我们每天都在访问各种网站.APP,如微信.QQ.抖音,今日头条等,这些东西上面都存在大量的信息,这些信息都需要有地方存储,存储在哪里呢?数据库. 所有我们需要开发一个网站.APP,数据库 ...

随机推荐

  1. 升腾C92 刷 OpenWrt 作旁路由设置 DNS 服务、扩容分区、设置 swap

    最新博客文章链接 文字更新时间:2024/02/04 一直知道 OpenWrt 经常拿来做软路由软件.最近买了个二手小主机升腾 C92 来做旁路由服务器,其被归为瘦客户机一类,感觉和工控机差不多,现价 ...

  2. Windows10系统下JDK1.8的下载安装及环境变量配置

    1. JDK1.8安装 2. 环境变量配置点击此处:官网下载 根据自己的系统 ,下载相应的JDK版本. 1. JDK1.8安装双击下载的安装包(.exe文件),进行安装. 点击"下一步&qu ...

  3. .NET Core开发实战(第20课:结构化日志组件Serilog:记录对查询分析友好的日志)--学习笔记

    20 | 结构化日志组件Serilog:记录对查询分析友好的日志 之前讲解的日志框架,记录的日志都是文本,而且是非结构化的,这样一串串文本实际上不利于我们去做分析 结构化的日志它的好处就显而易见,它可 ...

  4. CentOS7.5上Oracle19c离线rpm安装

    CentOS7.5上Oracle19c离线rpm安装 一.基础环境配置及依赖安装(1)关闭系统防火墙(如外网环境不能关闭防火墙自行开放相关需要使用的端口即可) systemctl stop firew ...

  5. Net5 WorkService 继承 Quarzt 以及 Net5处理文件上传

    Net5 版本以Core为底层非framework框架的windowservice 服务. 在VS里叫WorkService 可以以CMD方式运行也可以以Windowservice方式运行,部署简单. ...

  6. 【架构师视角系列】QConfig配置中心系列之架构设计(一)

    目录 声明 配置中心系列文章 一.架构 基础模型 架构图 架构分层 运行规则 模块划分 Admin模块 Client模块 Server模块 二.总结 三.最后 声明 原创文章,转载请标注.https: ...

  7. NC19158 失衡天平

    题目链接 题目 题目描述 终于Alice走出了大魔王的陷阱,可是现在傻傻的她忘了带武器了,这可如何是好???这个时候,一个神秘老人走到她面前答应无偿给她武器,但老人有个条件,需要将所选武器分别放在天平 ...

  8. OCR 03: PaddleOCR

    Catalog OCR 01: EasyOCR OCR 02: Tesseract-OCR OCR 03: PaddleOCR About Git repository https://github. ...

  9. CSS实现渐隐渐现效果

    CSS实现渐隐渐现效果 实现渐隐渐现效果是比较常见的一种交互方式,通常的做法是控制display属性值在none和其它值之间切换,虽说功能可以实现,但是效果略显生硬,所以会有这样的需求--希望元素消失 ...

  10. Java设计模式-观察者模式Observer

    介绍 观察者模式是行为设计模式之一.当您对对象的状态感兴趣并希望在任何更改时得到通知时,观察者设计模式非常有用.在观察者模式中,观察另一个对象状态的对象被称为观察者,而被观察的对象则被称为主体. 优点 ...