MYSQL是个好东西啊,只是比较会折腾人,所以我先记录一下MySQL 数据备份的基础知识,省得以后又去东找西找

Windows文件名、目录名不区分大小写,Linux区分大小写

查看MySQL中的数据库

这里有一个shop的数据库,

information_schema(系统数据库定义了所有数据库对象的元数据信息)、

mysql(记录MySQL账号信息以及账户的访问权限)、

performance_schema(收集MySQL服务器的性能数据)、

sys(这个库是通过视图的形式把information_schema 和performance_schema结合起来,查询出更加令人容易理解的数据存储过程可以可以执行一些性能方面的配置,也可以得到一些性能诊断报告内容存储函数可以查询一些性能信息)

查看数据库放置路径

路径下的shop文件夹中的db.opt记录着当前数据库默认字符集及字符序等信息,可直接对其修改,或者 MySQL命令行:alter database shop character set gbk;

查看shop数据库信息

删除shop,再来创建一个shop

创建表(记得先指明数据库:use shop;)

执行sql脚本,使用的资料可以去这里下载

查看表

指明要查看表的结构

查看存储引擎

可以看到InnoDB是默认的存储引擎,如果想临时修改会话的引擎可以使用

如果想要更改表的存储引擎可以使用

以shop数据库,shohin表为例

MyISAM的文件结构

shop文件夹中

shohin.frm 记录了表的结构

shohin.MYD 表数据文件

shohin.MYI 表索引文件

工作原理

MyIASM

记录首先在MySQL服务器内存上产生,然后写入到外存中的MYD中,最后将索引信息写入到MYI中,产生时间延迟主要是缓存的原因

MyIASM备份很简单,直接复制shop文件夹即可

InnoDB的文件结构

shop文件夹中

shohin.frm 记录了表的结构

db.opt 数据库的字符集和字符序等信息

table_name.ibd 独享表空间存放另一个表的数据文件

shop文件同级目录下

ibdata1 表空间文件存放数据(共享的)后面还有独享的

ib_logfile0、ib_logfile1 重做日志文件信息

不知道重做日志,故百度内容如下:

重做日志redo log file是LGWR进程从Oracle实例中的redo log buffer写入的,是循环利用的。就是说一个redo log file(group) 写满后,才写下一个。

归档日志archive log是当数据库运行在归档模式下时,一个redo log file(group)写满后,由ARCn进程将重做日志的内容备份到归档日志文件下,然后这个redo log file(group)才能被下一次使用。

不管数据库是否是归档模式,重做日志是肯定要写的。而只有数据库在归档模式下,重做日志才会备份,形成归档日志。

一般来说,归档日志结合全备份,用于数据库出现问题后的恢复使用。

重做日志是循环使用的。比如说,有三个重做日志组A、B、C。那么,当A写满后,系统就调用ARCn进程,将A备份为归档日志,同时B已经开始使用了。

工作原理

InnoDB

记录首先在MySQL服务器内存上产生,然后写入到外存中的ibdata1中,最后将重做日志信息写入到ib_logfile0、ib_logfile1中,基本没有时间延迟

InnoDB备份,首先复制shop文件夹,然后复制ibdata1、ib_logfile0、ib_logfile1文件

值得注意的是ibdata1是InnoDB的共享表空间,

InnoDB的表空间

共享表空间

存放了所有InnoDB表的数据信息、索引信息、各种元数据信息以及事务回滚信息,默认情况下存放在data根目录下的ibdata1中

独享表空间

存放的是该表的信息,一般命名为table_name.ibd,路径是:本文在shop数据库中

默认是关闭独享表空间,可使用set @@global.innodb_file_per_table=ON;开启

但操作独享表空间依然会影响到ibdata1、ib_logfile0、ib_logfile1文件,

变量

分为系统变量(全局变量、会话变量)、用户自定义变量(以后有时间再说)

查看系统变量

全局变量(393个): show global variables;

会话变量(393+12):show session variables;

@@能标记会话系统变量,若会话系统变量不存在则标记全局变量,查看会话变量不存在时,返回全局变量

备份时:

flush tables with read lock; 可以禁止更新,但无法禁止查询

unlock tables; 可以解锁前面的禁止

表结构

先来看看MySQL的数据类型

好家伙,还挺多。。。

日期时间型的datetime和timestamp区别

每次启动前记得. E:\mysql\init.sql设置一下字符集,如有不懂可参照MYSQL之字符问题探究

创建一个表实验一下

插入数据(数据只能一行一行的插入):

timestamp是记录当前服务器的时间,所以即使插入null,它也是会记录当前时间的,事实上日期时间型属于数值类型可进行简单加减运算

通过show variables like ‘time_zone%’;可查看当前MySQL的时间设置

MySQL复合类型(set、enum)

enum只能从集合中取一个值,set可以取多个值

例子:

创建一个含set、和enum集合的表

插入数据(报错:ERROR 1265 (01000): Data truncated for column ‘interest’ at row 1)

解决: MySQL默认strict mode,即严格sql语句模式,可以临时修改为”ansi”模式,语句:set sql_mode=’ansi’;

修改成功

选择

因为只能选择set集合里面的东西,所以上面的音乐就忽略掉了。

MySQL约束(6种)

1、主键约束

字段名 数据类型[其他约束条件] primary key

若为复合主键:primary key(字段名1,字段名2)

2、非空约束

字段名 数据类型 not null

3、检查约束

MySQL事实上不支持检查约束

若为字符串类型,则可用enum或set实现检查约束

若为数值类型,则用触发器实现

若为其他类型,最好用触发器实现

4、默认值约束

字段名 数据类型[其他约束条件] default 默认值

5、唯一性约束

字段名 数据类型 unique

6、外键约束

外键约束只要用于定义表与表之间的关系,表A外键字段要么是NULL,要么函数依赖于表B主键字段的值,(此时将表A称为表B的子表,表B称为表A的父表)

constraint 约束名 foreign key (表A字段名或者字段名列表) references 表B (字段名或字段名列表)[on delete级联选项][on update级联选项]

级联选项4种取值如下:

cascade:父表记录的删除或者更新操作会自动删除或更新子表中与之对应的记录

set null:父表记录的删除(delete)或者更新会将子表中与之对应记录的外键值自动设置为null值

no action:父表记录的删除或更新操作如果子表存在与之对应的记录那么删除或更新操作将失败

restrict :与no action功能相同,且为级联选项的默认值

注意: 如果某个字段存在多种约束条件,则约束条件的顺序是任意的。

自增型字段

字段名 数据类型 auto_increment

注意 自增型字段的数据类型必须为整数,若向自增型字段插入一个NULL值或0,字段值会被自动设置为比前一个值大1,即字段值总是比前一个字段值大,最好将自增型字段设置为主键,否则可能将出现一些错误

创建表时,可以在表的括号外面设置engine=存储引擎类型 default charset=字符集类型 (若省略则将沿用character_set_database的默认值)

ps: 仅对MyISAM存储引擎有用的选项

pack_keys=压缩类型

0 取消所以索引中所以关键字的压缩

1 将压缩索引中所有关键字的存储空间

default 表示只压缩索引中字符串类型的关键字,但不压缩数值类型的关键字

复制一个表结构

法一:

create table new_table like old_table;

法二:

create table new_table select * from old_table

小结

MySQL确实很实在,对我而言命令行操作也确实十分的带劲,各种炫酷的语句,很快,好使,不错,加油!

mysql初级数据库_MYSQL初级数据库操作相关推荐

  1. mysql做关系型数据库_MySQL关系型数据库基础操作

    MySQL基础 一.MySQL常用数据类型 1.常用数值类型(INT,DOUBLE,FLOAT) ① int 或者 integer 类型: 大小(字节):4字节: 范围: (有符号: -2147483 ...

  2. mysql导入数据库_mysql 导入数据库 命令操作

    window下 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u dbuser -p dbname > dbname.sql ...

  3. mysql e 导出数据库_mysql导出数据库几种方法

    方法一 cmd 到mysql bin目录下用 如下命令 mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-lock-tables ...

  4. mysql with语句_MySQL列举数据库(SHOW DATABASES语句)

    数据库是一个专门存储数据对象的容器,每一个数据库都有唯一的名称,并且数据库的名称都是有实际意义的,这样就可以清晰的看出每个数据库用来存放什么数据.在 MySQL 数据库中存在系统数据库和自定义数据库, ...

  5. mysql字段命名_Mysql 01—数据库表字段的命名规则

    摘要:当前测试工作为自研数据库测试,同时需要为自动化执行处理入库数据表,为让自己看起来专业些,特查找资料学习数据库的各种规范使用. 本文是一篇包含了数据库命名.数据库表命名.数据库表字段命名及SQL语 ...

  6. 菜鸟教程mysql创建表_MySQL 创建数据库 | 菜鸟教程

    MySQL 创建数据库 使用 mysqladmin 创建数据库 使用普通用户,你可能需要特定的权限来创建或者删除 MySQL 数据库. 所以我们这边使用root用户登录,root用户拥有最高权限,可以 ...

  7. mysql删除库_MySQL 删除数据库的两种方法

    使用 mysqladmin 删除数据库 使用普通用户登陆mysql服务器,你可能需要特定的权限来创建或者删除 MySQL 数据库. 所以我们这边使用root用户登录,root用户拥有最高权限,可以使用 ...

  8. mysql .frm 损坏_mysql innodb数据库损坏导致无法启动

    生产环境中的mysql突然启动不了,查了原因是innodb库错误,以前就遇到过这个问题,稀里糊涂的没解决,结果导致大量数据丢失.这些又遇到这个问题,果断把那个有问题的数据库移动了别的地方,启动了mys ...

  9. mysql navicate查询_Mysql Navicate 基础操作与SQL语句 版本5.7.29

    SQL数据的增删改查:此部分所有SQL语句在navicat中与mysql命令行执行效果一样,只是mysql服务端在命令行执行,而navicat只是在客户端的图形化打开操作. 一.进入数据库 .连接数据 ...

最新文章

  1. Java8新特性整理篇
  2. 地球自转减速影响世界时 格林尼治时间或成历史
  3. python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹
  4. sql简介_SQL简介
  5. 全新 HTML 5.1 工作草案发布
  6. K8S 的报错问题解决
  7. 数家韩国银行出现网路钓鱼网站
  8. iOS平台下闪退原因汇总(一):Ran out of trampolines of type 0/1/2 运行时间错误
  9. Linux下黑白棋c语言程序,黑白棋c语言程序.doc
  10. 【算法•日更•第五十五期】知识扫盲:什么是卡常数?
  11. springboot+quartz定时任务
  12. OSI七层模式简单通俗理解
  13. BUUCTF笔记之Basic部分WP
  14. 点集拓扑学思维导图(附pdf源文档)
  15. 利用OpenGL设计贪吃蛇游戏
  16. Jetson TX1 开发教程(1)--配置与刷机
  17. GIF修复(图片隐写)
  18. 2021年氯化工艺考试报名及氯化工艺考试试卷
  19. redis命令---redist键命令(key)---redis字符串命令(str)
  20. windows win7 64位 win7 32位 win10共享打印机提示0x000006cc的解决方法

热门文章

  1. C++17新特性之std::string_view
  2. Windows平台RTMP|RTSP播放器实现画面全屏功能
  3. java.util.concurrent.TimeUnit
  4. 浅谈对称加密与非对称加密
  5. win8.1已阻止java_win8系统下打开java程序时出现应用程序已被安全设置阻止的解决方法...
  6. 达梦数据库导入oracle数据_达梦数据库和oracle数据的一些区别
  7. JS在html中加法器,JavaScript_JavaScript程序设计之JS调试,本文主要通过一个加法器,介 - phpStudy...
  8. mcp证书有什么用_建造师的行情怎么样呢?建造师证书有什么用?
  9. Spring Cloud —— 消息队列与 RocketMQ
  10. Java并发编程实战————Executor框架与任务执行