目前流行的数据库

MySQL  Oracle  Microsoft SQLServer  Microsoft Access

PostgreSQL  DB2/UDB  InfoMax

MySQL介绍

  世界上最流行的开源数据库,支持任何平台的操作系统,是一个强大的关系型数据库,支持SQL。值得注意的是MySQL不是语言是一个关系数据库管理系统(Relational Database Management System)应用软件

唠叨一下:强力删除MySQL,在命令行数据rpm -e --nodeps mysql

初步了解RDBMS术语:

  • 数据库: 数据库是一些关联表的集合。
  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • 列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
  • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

下载安装MySQL:

  先去官网下载MySQL5.+版本的压缩包(这里不介绍8版本的,8版本的解压压缩包之后会自动生成配置文件)

  解压压缩包之后,需要记住安装目录(我是安装在D:\Program Files\MySQL\MySQL Server5.7)

  在安装目录下创建 my.ini 配置文件,配置信息如下:

[client]
# 设置mysql客户端默认字符集
default-character-set=utf8 [mysqld]
# 设置3306端口(默认)
port = 3306
# 设置mysql的安装目录
basedir=D:\Program Files\MySQL\MySQL Server5.7
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=D:\Program Files\MySQL\MySQL Server5.7\data
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

  以管理员身份打开cmd命令行工具,切换目录  

cd D:\Program Files\MySQL\MySQL Server5.7

  初始化数据库:

mysqld --initialize --console

  初始化data目录

mysqld --initialize-insecure

  在环境变量配置MySQL,可自行百度搜索

概念:Structure Query Language(SQL)结构化查询语言

  1、为了与关系型数据库通讯的语言

  2、几乎所有的关系型数据库都支持SQL语言

  3、操作对象:table表格、view视图、index索引、program unit程序单元

SQL语言分类

  • DQL:数据查询语言 data query language

    • select 查看数据

  • DDL:数据定义语言 data definition language

    • create 创建

    • alter 修改

    • drop 删除

    • rename 重命名

    • truncate 清空

  • DML:数据操纵语言 data manipulation language

    • insert 新增

    • delete 删除

    • update 修改

    • select 查看(可以放在DQL中)

  • DCL:数据控制语言 data control language

    • grant 授权

    • revoke 撤权

  • 事务

    • start transaction 开启事务

    • commit 提交事务

    • rollback 回滚事务

    • savepoint 设置事务回滚点

MySQL登录

  • 密文登录(建议使用):mysql -u 用户名 -p

  • 明文登录:mysql -u 用户名 -p密码 (没有空格)

  • 完全登陆法:myql -u 用户名 -p密码 数据库名称 -h 服务器ip -P 端口号

    • mysql -u root -p123456 mysql -h 127.0.0.1 -P 3306

  • 修改密码:mysqladmin -u root(用户名) -p password root(新密码)

Show命令(常用)

  • 切换数据库(进入数据库):use 数据库名称 eg:use mysql

  • 查看系统数据库:show databases;

  • 查看表格(进入数据库之后):show tables;

  • 查看系统状态:show status;

  • 查看系统参数:show variables;

  • 查看系统线程:show processlist;(主要用来检测那些用户登录了mysql数据库,并检测当前进入了哪个数据库)

  • 查看系统引擎:show engines;(这三者面试常见)

    • InnoDB:现在我们用的数据库引擎默认是InnoDB,因为它支持事务、行级锁、外键

    • MyIsAm:引擎一般,MySQL5.0以下用的

    • memory:一般适用于数据不是很多,读写速率和效率比较高的时候

  • 查看表结构:show columns from tbname;

    • desc tbname

  • 查看建表过程:show create table tbname;(主要是查看建表过程的sql语句

  • 查看表索引:show index from tbname;(只有表格建立了索引,才可以查看)

  • 补充

    • %:匹配0到多个字符 eg:show tables like "test%"; 会查询以test开头的所有数据库

    • _:匹配1个字符

    • *:指代符

简单的select 语句

  • 简单计算:select 1+1;select 1+1 as sum,1*1 product;

  • 查看所处数据库:select database(); show tables; show processlist;

  • select now(),current_date,sysdate();

    • select sysdate(),sleep(3),sysdate();=====sysdate():实时时间

    • select now(),sleep(3),now();=====now():当前时间

  • select * from tbname;select host,user from tbname;

MySQL的数据类型(标记的都是常用的)

整型 (下面的M表示显示的长度,UNSIGNED表示无符号,ZEROFILL表示长度不够0填充)

TINYINT[(M)] [UNSIGNED] [ZEROFILL] 一个很小的整数。

有符号的范围是-128到127,无符号的范围是0到255。

SMALLINT[(M)] [UNSIGNED] [ZEROFILL] 一个小整数。

  有符号的范围是-32768到32767,无符号的范围是0到65535。

MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]一个中等大小整数。

  有符号的范围是-8388608到8388607,无符号的范围是0到 16777215。

INT[(M)] [UNSIGNED] [ZEROFILL] 一个正常大小整数。

  有符号的范围是-2147483648到2147483647,无符号的范围是 0到4294967295。

INTEGER[(M)] [UNSIGNED] [ZEROFILL]

  这是INT的一个同义词。

BIGINT[(M)] [UNSIGNED] [ZEROFILL]一个大整数。

  有符号的范围是-9223372036854775808到 9223372036854775807,无符号的范围是0到18446744073709551615

浮点型 (M表示显示的位数,D表示小数点后面几位)

FLOAT[(M,D)] [ZEROFILL]

  一个小(单精密)浮点数字。不能无符号。允许的值是-3.402823466E+38到1.175494351E-38,0 和1.175494351E-38到3.402823466E+38。M是显示宽度而D 是小数的位数。没有参数的FLOAT或有<24 的一个参数表示一个单精密浮点数字。

DOUBLE[(M,D)] [ZEROFILL]

  一个正常大小(双精密)浮点数字。不能无符号。允许的值是1.7976931348623157E+308到-2.2250738585072014E-308、 0和 2.2250738585072014E-308到1.7976931348623157E+308。M是显示宽度而D是小 数位数。没有一个参数的DOUBLE或FLOAT(X)(25 < = X < = 53)代表一个双精密 浮点数字。

DOUBLE PRECISION[(M,D)] [ZEROFILL]  REAL[(M,D)] [ZEROFILL]   这些是DOUBLE同义词。

DECIMAL[(M[,D])] [ZEROFILL]

一个未压缩(unpack)的浮点数字。不能无符号。

NUMERIC(M,D) [ZEROFILL]

这是DECIMAL的一个同义词。

字符型 (M表示存储的最大长度)

CHAR(M) [BINARY]

  一个定长字符串,当存储时,总是是用空格填满右边到指定的长度。M的范围是1 ~ 255个字符。

VARCHAR(M) [BINARY]

  一个变长字符串,当存储时在m的范围内,字符串的长度是多少,就存储多少长度

TINYBLOB  TINYTEXT

  一个BLOB或TEXT列,最大长度为255(2^8-1)个字符。

BLOB  TEXT

  一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。

MEDIUMBLOB   MEDIUMTEXT

  一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。

LONGBLOB   LONGTEXT

  一个BLOB或TEXT列,最大长度为4294967295(2^32-1)个字符。

枚举型和集合型

create table t4(
id int,
name varchar(50),
gender enum('male','female'....)/('','') #单选,或者数据缺失null );
create table t5(
hobby set('篮球','足球','羽毛球') # 一个或者多个组合,或者为空'',或者数据缺失null
);

日期型

DATE

  一个日期。支持的范围是'1000-01-01'到'9999-12-31'。MySQL以'YYYY-MM-DD'格式来显示 DATE值,但是允许你使用字符串或数字把值赋给DATE列。

DATETIME

  一个日期和时间组合。支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。MySQL 以'YYYY-MM-DD HH:MM:SS'格式来显示DATETIME值,但是允许你使用字符串或数字把值赋 给DATETIME的列。

TIMESTAMP[(M)]

  一个时间戳记。范围是'1970-01-01 00:00:00'到2037年的某时。MySQL以 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式来显示 TIMESTAMP值,取决于是否M是14(或省略)、12、8或6,但是允许你使用字符串或数字把值 赋给TIMESTAMP列。

TIME

  一个时间。范围是'-838:59:59'到'838:59:59'。MySQL以'HH:MM:SS'格式来显示TIME值,但 是允许你使用字符串或数字把值赋给TIME列。

YEAR[(2|4)]

  一个2或4位数字格式的年(缺省是4位)。允许的值是1901到2155,和0000(4位年格式),如果 你使用2位,1970-2069( 70-69)。MySQL以YYYY格式来显示YEAR值,但是允许你把使用字 符串或数字值赋给YEAR列。(YEAR类型在MySQL3.22中是新类型。)

了解MySQL的更多相关文章

  1. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  2. mysql每秒最多能插入多少条数据 ? 死磕性能压测

    前段时间搞优化,最后瓶颈发现都在数据库单点上. 问DBA,给我的写入答案是在1W(机械硬盘)左右. 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高(SSD硬盘) 但这东西感 ...

  3. LINUX篇,设置MYSQL远程访问实用版

    每次设置root和远程访问都容易出现问题, 总结了个通用方法, 关键在于实用 step1: # mysql -u root mysql mysql> Grant all privileges o ...

  4. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  5. MySQL高级知识- MySQL的架构介绍

    [TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...

  6. 闰秒导致MySQL服务器的CPU sys过高

    今天,有个哥们碰到一个问题,他有一个从库,只要是启动MySQL,CPU使用率就非常高,其中sys占比也比较高,具体可见下图. 注意:他的生产环境是物理机,单个CPU,4个Core. 于是,他抓取了CP ...

  7. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  8. Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制

    将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...

  9. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  10. 当忘记mysql数据库密码时如何进行修改

    因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...

随机推荐

  1. css 最后的终章

    相对定位:参考点 相对原来的位置 1.如果是一个单独的文档流盒子,及你姐设置了相对定位,和普通盒子一样 2.相对定位后,如果调整位置,会留下坑 作用:微调元素 子绝父相 提升层级 绝对定位 参考点:父 ...

  2. JS高阶---定时器相关

    首先看几个问题: [主体] (1)定时器真的时定时执行的吗? 顺序验证: 测试结果: 接下来对上述代码做下修改,增加一个长时间工作的消耗,此时再来验证下定时器运行的精准度 结果如下: (2)定时器回调 ...

  3. Python玩转微信小程序

    用Python玩转微信   Python玩转微信 大家每天都在用微信,有没有想过用python来控制我们的微信,不多说,直接上干货!  这个是在 itchat上做的封装  http://itchat. ...

  4. 201871010118-唐敬博《面向对象程序设计(java)》第十六周学习总结

    博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 <https://www.cnblogs.com/nwnu-daizh/> 这个作业的要求在哪里 <https://ww ...

  5. nginx 常见的问题

    1.server匹配优先级 nginx 读取文件名是按照文件排序优先读取的顺序    对与一样的server 优先使用先读取到的 2.location匹配优先级 =    进行普通字符精确匹配,也就是 ...

  6. spring中@Param和mybatis中@Param使用区别(暂时还没接触)

    1.spring中@Param(org.springframework.data.repository.query.Param) int selectRoleCount(@Param("bu ...

  7. uuid模块

    UUID即通用唯一标识符,对于所有的UUID它可以保证在空间和时间上的唯一性.它是通过MAC地址.时间戳.命名空间.随机数.伪随机数来保证生成ID的唯一性,有着固定的大小(128 bit).它的唯一性 ...

  8. Kettle Unable to get list of element types for namespace 'pentaho'

    我把公司的kettle5.0升级到7.0之后遇到了这个问题,困扰了很久,百度谷歌都查不到结果,所以只能自己查找原因. 由于已经被搞好了,现在无法截图了,总之就是下面这行报错,遇到这个错误的同学估计也不 ...

  9. 【2019.7.16 NOIP模拟赛 T1】洗牌(shuffle)(找环)

    找环 考虑每次洗牌其实是一次置换的过程,而这样必然就会有循环出现. 因此我们直接通过枚举找出每一个循环,询问时只要找到环上对应的位置就可以了. 貌似比我比赛时被卡成\(30\)分的倍增简单多了? 代码 ...

  10. 字段加密实践(django-fernet-fields)

    一.fernet介绍 Fernet 用于django模型字段对称加密,使用 crytography 库. 官网帮助文档 1.先决条件 django-fernet-fields 支持Django 1.8 ...