文档章节

MySQL(1)

jit-hakase
 jit-hakase
发布于 2017/09/03 17:30
字数 2350
阅读 1
收藏 0
点赞 0
评论 0

MySQL基础

概述

数据库管理系统常用数学模型有 层次模型 网状模型 关系模型 面向对象模型等 其中**关系型数据库管理系统(RDBMS)**占主导地位

RDBMS记录数据的方式是二维表 其中又称字段属性, 又称记录元组.

名词解释

数据库(DB): 按照某种数据结构对数据进行组织, 存储和管理的容器. 数据库管理系统(DBMS): 安装在操作系统之上, 管理和和控制数据库中各种数据库对象的系统软件. SQL(Structured Query Language): 应用最为广泛的关系数据库语言. E-R图: 数据库设计时常用的图模型

范式(NF)

范式是符合某一种级别的关系模式的集合

函数依赖: A决定B, 则B函数依赖于A.

主键: 可以唯一标识

  • 1NF: 表中列不可重复, 都是单一属性, 不可再分.
  • 2NF: 基于1NF, 所有非主键列都函数依赖于主键.
  • 3NF: 基于2NF, 不存在非主键列对任一候选列的函数依赖.
  • BCNF: 基于2NF, 不存在任何列对任一候选列的函数依赖.

存储引擎

MySQL使用插件式存储引擎, 不同的表可以使用不同的存储引擎. 使用命令show engines;查看MySQL支持的存储引擎 常用的存储引擎有MyISAM和InnoDB

InnoDB: 事务安全, 支持外键. MyISAM: 非事务安全, 不支持外键, 但是查询速度很快.

设置默认存储引擎 临时修改: 使用命令 set default_storage_engine=ENGINE 永久修改: 修改my.cnf文件中default-storage-engine参数值

需要执行大量增删改操作, 出于安全考虑, 选择InnoDB更好.

数据类型

整数类型

类型大小
tinyint1字节
smallint2字节
mediumint3字节
int或integer4字节
bigint8字节

使用unsigned关键字能使数字类型变为无符号(非负)

小数类型

类型大小
float4字节
double8字节
demical(len, prec)由len和prec决定

使用unsigned关键字能使数字类型变为无符号(非负)

demical: 最精确的表示小数的类型 len表示数据的长度(不包括小数点和负号) prec表示表示小数点后数字的位数

字符串类型

类型大小适用
char(n)0-255字符定长字符串
varchar(n)0-65 535字节变长字符串
tinytext0-255字节文本字符串
text0-65 535字节文本字符串
mediumtext0-16 777 215字节文本字符串
longtext0-4 294 967 295字节文本字符串

char(n)类型存储的大小为 字符数*单个字符占用的字节 其他类型实际占用的字节数就是字符串实际占用的字节数

二进制类型

类型大小
bit(n)0-64位
binary(n)0-255字节
varbinary(n)0-65 535字节
tinyblob0-255字节
blob0-65 535字节
mediumblob0-16 777 215字节
longblob0-4 294 967 295字节

binary(n)占用n个字节, bit(n)占用n个位. 其他类型实际占用的字节数就是二进制实际占用的字节数

日期类型

类型大小格式用途
time3字节HH:MM:SS时间值或持续时间
year1字节YYYY年份值
date3字节YYYY-MM-DD日期值
datetime8字节YYYY-MM-DD HH:MM:SS混合值
timestamp4字节YYYY-MM-DD HH:MM:SS混合值或时间戳

取值范围 time: -838:59:59 ~ 838:59:59 year: 1901 ~ 2155 date: 1000-01-01 ~ 9999-12-31 datetime: 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 timestamp: 1970-01-01 00:00:01 ~ 2037-12-31 23:59:59

填入当前时间 除了timestamp类型可以填入NULL以外, 其他类型必须使用now()函数.

now()函数有一个别名函数curtime() now(n), n<=6, 可以显示更精确的时间 microsecond(now(n)) 用于获取微秒时间

复合类型

enum类型: 从一个集合中取得单个值, 类似单选框. set类型: 从一个集合中取得N个值, 类似复选框.

表示形式: TYPE('VALUE','VALUE',...) 填入set类型数据: 'VALUE,VALUE,...'

使用这两种类型可以实现简单的字符串类型数据的检查约束.

特殊值NULL

公式结果
null+1null
null=nullnull
null!=nullnull
null is null1(true)

除了is运算符之外, 无法与null特殊值进行任何有意义的运算.

数据库管理

查看数据库: show databases; 创建数据库: create database DB_NAME; 查看数据库结构: show create database DB_NAME; 选择数据库: use DB_NAME 删除数据库: drop database DB_NAME;

备份与恢复

备份数据库

  1. 停止MYSQL服务 或使用命令flush tables with read lock;设置只读锁 等备份完成之后再使用unlock tables;解锁
  2. 根据表的存储引擎的不同选择将需要的文件进行备份(建议连my.cnf一起备份) MyISAM存储引擎只需备份数据库目录 InnoDB存储引擎不仅要备份数据库目录, 还需备份表空间文件和日志文件. (ibdata1, ib_logfile0, ib_logfile1)

恢复数据库

  1. 停止MYSQL服务
  2. 将备份的数据复制到对应目录

如果新旧MYSQL服务器的数据库目录不同, 还需修改my.cnf中的datadir参数信息.

也可用mysqldump命令生成sql文件用于备份和恢复

表结构管理

查看表: show tables; 创建表: create table TBL_NAME(...); 查看表结构: desc TBL_NAME; 删除表: drop table TBL_NAME

查看表结构也可使用以下命令来查看原生创建命令. show create table TBL_NAME;

创建表

create table TBL_NAME(
	ATTR TYPE [CONSTRAINT],
	...
	ATTR TYPE [CONSTRAINT]
)[OTHER OPTIONS];

使用约束条件(CONSTRAINT)

mysql不支持check约束, 利用其他方法(复合数据类型, 触发器等)实现.

  • primary key: 主键, 唯一标识记录的字段.
  • not null: 字段不能设为NULL
  • default VAR: 设置字段默认值
  • unique: 字段的值在表中唯一
  • auto_increment: 自增长(从1开始, 每次+1.)
  • foreign key: 外键, 指向其他表的主键 外键的级联: 当父表记录发生删除或修改时所执行的操作.
    • cascade: 自动删除或修改子表中对应的记录
    • set null: 将子表中与之对应的外键值设为NULL
    • no action: 若子表存在对应记录, 则删除或修改操作失败
    • restrict: 同no action, 是外键级联的默认值.

外键语法 外键: 约束表与表之间的关系, 外键字段的取值, 是其他表中的主键取值或者NULL. 语法理解: 表A的外键参照表B的主键

constraint 约束名 foreign key 表A字段 references 表B字段 [on delete 级联选项] [on delete 级联选项]

主键约束也可以使用外键的语法, 通常用于多主键的表. 唯一约束也可以使用外键语法.

使用其他选项(OTHER OPTIONS)

  • engine=ENGINE 设置存储引擎
  • default charset=CHARSET 设置默认字符集
  • pack_keys=PACK_TYPE 设置索引关键字压缩类型(仅MyISAM存储引擎有效)

复制表

仅复制表结构 create table TBL_NAME like OLD_TBL_NAME; 复制表结构以及记录 create table TBL_NAME select * from OLD_TBL_NAME;

无法复制表的约束条件和外键关系, 如果要完全复制, 可借助mysqldump工具.

修改表

修改表名

使用以下任意一条语句 rename table OLD_TBL_NAME to NEW_TBL_NAME; alter table OLD_TBL_NAME rename NEW_TBL_NAME;

修改列

删除字段 alter table TBL_NAME drop ATTR; 添加字段 alter table TBL_NAME add NEW_ATTR [CONSTRAINT] [first | after OLD_ATTR]; 修改字段 修改字段名的同时修改数据类型 alter table TBL_NAME change OLD_ATTR NEW_ATTR NEW_TYPE; 仅修改数据类型 alter table TBL_NAME modify ATTR NEW_TYPE;

修改约束条件

添加约束条件 alter table TBL_NAME add constraint 约束名 约束类型 (字段名); 删除约束条件 删除主键约束条件 alter table TBL_NAME drop primary key; 删除外键约束条件 alter table TBL_NAME drop foreign key 外键约束名; 删除唯一性约束条件 alter table TBL_NAME drop index 唯一约束名;

修改其他选项

其他选项包括存储引擎, 默认字符集, 自增字段初始值, 索引关键字压缩类型等 alter table TBL_NAME OTHER_OPTION=NEW_OPTION;

表记录操作

插入新记录(insert)

插入一条记录 insert into TBL_NAME[(ATTR...)] values(VALUE...);

插入批量记录

insert into TBL_NAME[(ATTR...)] values
(VALUE...),
...
(VALUE...);

Oracle数据库不支持插入批量记录

插入查询结果集 insert into TBL_NAME[(ATTR...)] select ...;

向auto_increment字段插入数据时, 最好用NULL值. 向默认值约束字段插入数据时, 可用default关键字 若有外键约束关系, 原则上先给父表插入数据, 再给子表插入数据 即使insert操作执行失败, auto_increment的值也会递增.

更新记录(update)

更新符合条件的记录

update TBL_NAME
set ATTR=VALUE,
...
set ATTR=VALUE
where ...;

删除记录(delete)

删除符合条件的记录 delete from TBL_NAME where ...; 清空表记录 truncate TBL_NAME;

使用truncate会重置自增列的序号

替换记录(replace)

replace语句与insert语句的唯一区别: 当插入新记录时, 若新记录的主键或唯一约束的字段值和旧记录相同, 则旧记录先被删除, 然后再插入新记录, 也就是把deleteinsert合在一起组成了一个原子操作, replace语句也可以使用update的语法格式.

© 著作权归作者所有

jit-hakase
粉丝 0
博文 26
码字总数 30408
作品 0
南京
程序员
二进制安装mysql的shell脚本

配合文档看,挺简单的。 #!/bin/bash ###2016-3-23 ###version 1.0 ####tishi yonghu cat<< AA you must mv the mysql_package to /root/tools/ . AA sleep 2 ###define var tools_dir="/roo......

弓长善慈 ⋅ 2016/03/23 ⋅ 0

zabbix 清理历史数据

项目上线不到一个月,zabbix数据居然快100G,监控项太多,数据量太大,zabbix负载重,暂时不想升级硬件,只好内部挖掘下,清除下历史数据;一般保留1个月的数据,zabbix这个项目只是做监控报...

hnxy2001 ⋅ 2016/10/28 ⋅ 0

源码编译安装mysql5.7.18

#yum install -y gcc-c++ cmake vim ncurses-devel wget #useradd mysql -s /home/nologin #mkdir /soft/mysql,chown mysql:mysql !$ #mkdir /data/mysql,chown mysql:mysql !$ #tar xvf mys......

笔下生辉 ⋅ 2017/07/18 ⋅ 0

MySQL5.5/5.6/5.7的安装脚本

!/bin/bash passwd=version=version_1=`uname -m`m=if [ $m != 5 ]thenif [ $m != 6 ]thenm=fifiecho "################################################################################"......

王占兴 ⋅ 2017/12/20 ⋅ 0

人工误删除InnoDB ibdata数据文件与ib_logile重做日志文件如何恢复详细过程

有人因为不熟悉InnoDB引擎,而误删除innoDB ibdata(数据文件)和ib_logfile(redo log重做事务日志文件),结果导致了悲剧的发生。如果有做主从复制同步那还好,如果是单机呢?如何恢复? 1)...

jxzhfei ⋅ 2015/10/28 ⋅ 0

Ubuntu12.04中编译Mysql5.6.17

1.安装Mysql (1)安装编译源码需要的包 sudo apt-get install make cmake gcc g++ bison libncurses5-dev (2)下载并解压缩 wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.17......

恒者 ⋅ 2014/04/14 ⋅ 0

CMAKE安装MYSQL 5.6.10

mysql5.6.10不支持configure安装了,提供了CMAKE安装方式 #sudo groupadd mysql #sudo useradd mysql -g mysql #sudo mkdir -p /home/mysql/data #sudo mkdir /usr/local/mysql #sudo mkdir......

丰圣谋 ⋅ 2013/04/28 ⋅ 2

percona server 安装

1、源码包的装备 可以去http://www.percona.com/downloads/下载你需要的版本 2、安装系统环境准备 可以yum安装相应服务,yum install -y gcc gcc-c++ autoconf automake zlib fiex libxml n...

RoyeeD ⋅ 2014/09/10 ⋅ 0

使用标准源分发安装MySQL

编译前安装准备 OS:CentOS 6.9 Mysql:5.7.18 下载Mysql源 官网源:mysql-boost mysql 搜狐源:mysql-boost mysql 安装Mysql之前卸载原有的版本 查询Mysql目录文件 卸载原有MySQL # rpm -qa |...

耐心是美德 ⋅ 2017/06/05 ⋅ 0

conflicts with file from package mariadb-libs-1:5.5.44-2.el7.centos.x86_64

[root@localhost mysql5.6.34]# rpm -ivh MySQL-server-5.6.34-1.el7.x86_64.rpm warning: MySQL-server-5.6.34-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY P......

pcdog ⋅ 2016/11/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(十)JavaScript的DOM基础

JavaScript零基础入门——(十)JavaScript的DOM基础 欢迎大家回到我们的JavaScript零基础入门,上一节课,我们了解了JavaScript中的函数,这一节课,我们来了解一下JavaScript的DOM。 第一节...

JandenMa ⋅ 57分钟前 ⋅ 0

Spring mvc DispatchServlet 实现原理

在Spring中, ContextLoaderListener只是辅助类,在web 容器启动的时候查找并创建WebApplicationContext对象,通过该对象进行加载spring的配置文件。而真正的逻辑实现其实是在DispatcherSer...

轨迹_ ⋅ 今天 ⋅ 0

Weex起步

本教程假设你已经在你的本地环境安装了node 其实weex起步教程在 https://github.com/lilugirl/incubator-weex 项目说明文件中都已经有了,但为了有些同学看到英文秒变文盲,所以这里我重新写...

lilugirl ⋅ 今天 ⋅ 0

Jenkins实践1 之安装

1 下载 http://mirrors.jenkins.io/war/latest/jenkins.war 2 启动 java -jar jenkins.war 前提:安装jdk并配置环境变量 启动结果节选: ************************************************......

晨猫 ⋅ 今天 ⋅ 0

组合数学 1-2000 中,能被6或10整除的数的个数

1--2000 中,能被6或10整除的数的个数 利用集合的性质 能被6整除的个数 2000/6 = 333 能被10整除的个数 2000/10 = 200 能被6和10整除的个数 2000/30 = 66 能被6或10整除的个数 333+200-66 =...

阿豪boy ⋅ 今天 ⋅ 0

一篇文章学懂Shell脚本

Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。 Shell可以直接使用在win/Unix/Linux上面,并且可以调用...

Jake_xun ⋅ 今天 ⋅ 0

大数据工程师需要精通算法吗,要达到一个什么程度呢?

机器学习是人工智能的一个重要分支,而机器学习下最重要的就是算法,本文讲述归纳了入门级的几个机器学习算法,加大数据学习群:716581014一起加入AI技术大本营。 1、监督学习算法 这个算法由...

董黎明 ⋅ 今天 ⋅ 0

Kylin 对维度表的的要求

1.要具有数据一致性,主键值必须是唯一的;Kylin 会进行检查,如果有两行的主键值相同则会报错。 2.维度表越小越好,因为 Kylin 会将维度表加载到内存中供查询;过大的表不适合作为维度表,默...

无精疯 ⋅ 今天 ⋅ 0

58到家数据库30条军规解读

军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及...

kim_o ⋅ 今天 ⋅ 0

代码注释中顺序更改 文件读写换行

`package ssh; import com.xxx.common.log.LogFactory; import com.xxx.common.log.LoggerUtil; import org.apache.commons.lang3.StringUtils; import java.io.*; public class DirErgodic ......

林伟琨 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部