day02-MySQL基础知识

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

day02-MySQL基础知识

关于字符集和校验规则:

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

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

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

day02-MySQL基础知识

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

day02-MySQL基础知识

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

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

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

1.2查看、删除数据库

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

练习

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

day02-MySQL基础知识
2. 查看前面创建的hsp_02数据库的定义信息
SHOW CREATE DATABASE hsp_db02

day02-MySQL基础知识
3. 删除前面创建的数据库
  • 关键字作名字创建数据库:
  • 说明1:数据库名用反引号括起来,是为了规避数据名字为关键字 例如:创建一个名为create的数据库,不使用反引号就会报错 day02-MySQL基础知识 使用了反引号之后,就可以成功创建数据库day02-MySQL基础知识day02-MySQL基础知识 使用关键字创建,在删除的时候也要在名字旁边反引号day02-MySQL基础知识
  • 说明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窗口下输入指令,指明备份的数据库和保存的文件名

day02-MySQL基础知识

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

day02-MySQL基础知识

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

day02-MySQL基础知识
  1. 恢复

首先删除掉数据库hsp_db02和hsp_db03

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

day02-MySQL基础知识

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

day02-MySQL基础知识

1.3.2备份恢复数据库表

  • 语法:

备份数据库的表

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

(注意:在DOS执行)

day02-MySQL基础知识day02-MySQL基础知识

恢复和数据库同理(注意进入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;

day02-MySQL基础知识

练习2

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

day02-MySQL基础知识
#创建表的课堂练习
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 ;

day02-MySQL基础知识

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 -- 显示表结构,可以查看表的所有列

day02-MySQL基础知识

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

day02-MySQL基础知识

day02-MySQL基础知识

Mysql列类型即mysql的数据类型

详见MySQL的参考手册

3.1列类型之整型

  • *说明

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

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

day02-MySQL基础知识

应用实例

  • 3.1.2.1无符号TINYINT

  • 在数据库hsp_02中创建一个表t2,在表中插入列类型tinyint,列名为id

CREATE TABLE t2(
id TINYINT);
  1. 在表中插入数据 -129,执行后提示错误,可以看到t2为空表

day02-MySQL基础知识 day02-MySQL基础知识
  1. 往表中插入数据-128,执行成功,表中成功插入数据

day02-MySQL基础知识 day02-MySQL基础知识
  1. 同理,分别往表中插入数据128、127,只有127插入成功 说明在有符号情况下,tinyint的范围为-128~127

day02-MySQL基础知识
  • 有符号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);

day02-MySQL基础知识

3.2列类型之BIT

  • 说明

  • bit字段显示时,按照位的方式显示(按照指定位数的二进制显示)

  • 查询的时候仍然可以使用 添加时的数值(比如十进制)来查询
  • 如果一个值只有0,1,可以考虑使用bit(1),可以节省空间
  • 位类型。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列类型之小数类型

  • 说明

  • FLOAT/DOUBLE[UNSIDNED]

    float 单精度,double 双精度

  • 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可以存放很大的数

day02-MySQL基础知识

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)

    day02-MySQL基础知识

成功插入:(uft8)

day02-MySQL基础知识

gbk字符集下:

day02-MySQL基础知识
  • 字符串使用细节
  • 细节1:
  • 如 char(4) //这个4表示字符数(最大255),不是字节数,不管是中文还是字母都是放四个,按字符计算
  • varchar(4) //这个4表示字符数,(这四个字符占用多少个字节取决于你定义的编码) 不管是字母还是中文都以定义好的表的编码来存放数据 上面的例子不管是中文还是字母都是最多存放4个,是按照字符来存放的
  • 细节2:
  • char(4)是定长(固定的大小),就是说,即时你插入’aa’,也会占用分配的4个字符
  • varchar(4)是可变长,即如果你插入的是’aa’,实际占用的空间大小并不是4个字符,而是按照实际占用空间来分配。VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节) ,因此varchar的实际长度=实际的数据大小+(1-3个字节)

day02-MySQL基础知识
  • 细节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同理。

失败:

day02-MySQL基础知识

成功:

day02-MySQL基础知识

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

day02-MySQL基础知识

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

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基础知识

Original: https://www.cnblogs.com/liyuelian/p/16747574.html
Author: 一刀一个小西瓜
Title: day02-MySQL基础知识

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/598544/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 云上RDS架构

    概述 越来越多的企业选择上云,最基础的云服务就是IaaS(Infrastructure as a Service)服务,直观理解就是虚拟主机,用户不用再自建机房,自己购买服务器,而…

    数据库 2023年6月9日
    0108
  • eclipse反编译插件

    1、在eclipse的help—》Install New Software…中添加新软件开发,添加它的源: undefined name : jd – ec…

    数据库 2023年6月11日
    082
  • 【黄啊码】使用think-queue产生大量日志文件怎么办?

    有时候某些原因程序出错,会有大量日志生成,最好调整下日志,单独出来。在配置文件config/queue.php开头添加: use think\facade\Log;Log::ini…

    数据库 2023年6月16日
    089
  • 阿里巴巴编码规范-考试认证

    阿里巴巴编码规范-考试认证 雨打梨花深闭门,忘了青春,误了青春。 1、注册阿里云账号 2、购买认证 需要怒支付一顿早餐Q,可以用支付宝支付,选择支付宝支付然后直接输入支付密码就OK…

    数据库 2023年6月14日
    0182
  • docker的相关命令

    docker的相关命令 1.安装docker: (1)yum -y install docker ​ sudo sh get-docker.sh 2.从远程拉取应用的镜像源: do…

    数据库 2023年6月16日
    076
  • Spring Security OAuth 笔记

    1 单点登录 关于单点登录的原理,我觉得下面这位老哥讲的比较清楚,有兴趣可以看一下,下面我把其中的重点在此做个笔记总结 https://juejin.cn/post/6844904…

    数据库 2023年6月14日
    082
  • [LeetCode]28. 实现 strStr()

    实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始…

    数据库 2023年6月9日
    088
  • XPath和Selenium的使用

    XPath 是一门在 XML 文档中查找信息的语言 /: ——># 从根节点选取: //: ——># 不管位置,直接找 /@属性名 ——># 获取对应属性值 /t…

    数据库 2023年6月9日
    075
  • 线程的生命周期

    线程的生命周期​ 线程具有生命周期,其中包含 5种状态(出生状态,就绪状态,运行状态、暂停状态、死亡状态)。 出生状态就是线程被创建时的状态:当线程对象调用 start()方法 后…

    数据库 2023年6月16日
    0115
  • 数据库的主从搭建

    数据库(mariadb)主从搭建 1,准备两台虚拟机(本文使用centos7演示)! 一:启动虚拟机配置环境安装数据库(俩节点都要执行操作) setenforce 0 Origin…

    数据库 2023年6月16日
    0140
  • 钻石价格预测的ML全流程!从模型构建调优道部署应用!⛵

    💡 作者:韩信子@ShowMeAI📘 数据分析 ◉ 技能提升系列:http://www.showmeai.tech/tutorials/33📘 AI 面试题库系列:http://w…

    数据库 2023年6月15日
    091
  • Mysql8.0修改lower_case_table_names参数导致重启失败

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。 GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。 事件起因:在测试一个数据迁移工具…

    数据库 2023年5月24日
    0103
  • MySQL高可用安装

    MySQL HA部署 环境准备 创建本地yum源 确认关闭 SELinux 防火墙设置 MySQL安装 使用 root 用户操作创建相关的用户组和用户 上传/解压介质 设置自启动 …

    数据库 2023年5月24日
    0104
  • mysql常用操作汇总

    工作中经常用会遇到这种情况,可以访问mysql所在的服务器,但是服务器端口不对外暴露(通常因为安全原因)。这时,操作数据库只能通过命令行和 mysql client窗口来实现。我对…

    数据库 2023年5月24日
    076
  • MySQL实战45讲 3

    03 | 事务隔离:为什么你改了我还看不见? 事务 Transaction TRX 事务就是 要保证一组数据库操作,要么全部成功,要么全部失败。 MySQL 原生的 MyISAM …

    数据库 2023年6月16日
    090
  • Linux下搭建git分布式管理

    VMware 虚拟机中搭建步骤 一、 1.查一下ip 2.和Xshell连接起来 3.看是否连接上 4.这就ok了 5.输入 yum install git yum install…

    数据库 2023年6月6日
    091
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球