MySQL数据库
1.1 数据库的发展史
1.1.1 萌芽阶段——文件系统
文件系统
1.1.2 第一代数据库——层次模型、网状模型
1.1.2.1层次模型
这是一种导航结构,导航结构的优点:分类管理;导航结构的缺点:如果保存不是同一类的数据,效率很低。
层次结构最大问题是失去了数据的完整性
1.1.2.2网状模型
1.1.3 第二代数据库——关系型数据库
每一个存放数据的表都是独立的,通过公共字段建立关系。
1、 优点:
a) 每个都独立了,查询的时候效率高
b) 对数据的约束功能强大
2、 缺点:多表查询效率低。
多学一招:非关系型数据库(NoSQL),这种数据库是一种键值对形式的数据库,查询效率高,但对数据约束功能很低。(redis、mongodb)。非关系型数据库是对关系型数据库的一种补充。
1.2 数据库系统
数据库的本质就是文件
数据库系统(DBS)=数据库(DB)+数据库管理系统(DBMS)
也就是说:数据库系统包括数据库文件和操作数据库文件的软件。
1.3 SQL
SQL是Structured Query Language(结构化查询语言)缩写,用来操作关系型数据库的语言。
SQL语句是一个标准SQL,可以用来操作所有的关系型数据库。
1.3.1 关系型数据库
每个公司为了更多的占有市场份额,在原来的标准SQL基础上扩展自己独有的东西用来吸引消费者。
数据库 |
使用语言 |
开发公司 |
access |
SQL |
微软 |
SQL Server |
T-SQL |
微软 |
MySQL |
MySQL |
Oracle公司收购 |
Oracle |
PL/SQL |
甲骨文公司 |
问题:已知MySQL和Oracle都支持标准SQL(SQL-92),请问在MySQL上编写的MySQL语句能否运行在Oracle上?
答:不能,因为MySQL是MySQL扩展的东西。不能运行在Oracle上。他们只能相互运行标准SQL。
1.4 MySQL操作过程
1.5 启动\关闭MySQL服务
1.5.1 方法一:在服务面板中启动或关闭
多学一招:通过命令打开服务面板
打开运行面板(win+R),在面板中输入services.msc
1.5.2 方法二:通过命令行启动和关闭
启动服务:net start +服务名
关闭服务:net stop +服务名
多学一招:net start 显示当前所有的服务列表。
1.6 MySQL客户端
1.6.1 MySQL自带的命令行客户端
安装MySQL后,会自带一个MySQL 5.5 Command Line Client命令行客户端。
双击打开,输入密码,就连接上服务器了。
缺点:此客户端只能连接本地的MySQL服务器。
1.6.2 window界面客户端
1、 MySQL-Front
2、 Navicat
1.6.3 web界面
phpMyAdmin
1.6.4 windows的命令行
运行——cmd
1.7 windows命令行连接服务器
host主机-h
username用户名-u
password密码-p
port端口-P
注意:如果配置了MySQL的环境变量,执行mysql命令就不需要进入mysql.exe的目录。
127.0.0.1表示本地地址,等价于localhost
多学一招:如果连接的是本地的MySQL服务器,-h可以省略;如果使用的是3306端口,-P也可以省略
可以通过密文来登录
1.8 退出MySQL客户端并关闭连接
1、 exit
2、 quit
3、 \q
1.9 数据库基本概念
1、 数据库和表
数据库用来存放表,表里面存放数据,一个数据库可以存放多个表,一个表中存放多个数据
2、 关系:两个表的公共字段称为关系
3、 行:也称为记录,也称为实体
4、 列:也称为字段,也称为属性
在结构上称为行和列
在数据上称为记录和字段
5、 数据冗余:相同的数据存储在不同地方
脚下留心:冗余只能减少,不能杜绝。减少冗余后,表的数量就增加了。
6、 数据完整性=正确性+准确性
正确性:数据类型正确
准确性:数据的范围准确
思考:学生年龄是int型,输入10000岁,正确性和准确性如何?
答:正确的,但是不准确
1.10 数据库操作
1.10.1 创建数据库
1、语法:create database if not exists`数据库名` charset=字符编码
2、如果创建的数据库已经存在,则会报错
解决:创建时候判断一下,数据库是否存在,如果不存在就创建
3、如果数据库名是关键字或特殊字符会报错
解决:是数据库名上加上反引号
为了保证创建数据库成功,可以在所有的数据库名上加上反引号
4、可以给创建的数据库指定字符编码
1.10.2 MySQL数据库目录
1、 此目录在安装mysql服务器的时候选择路径
2、 可以在my.ini中查看并更改
3、 创建一个数据库就在data文件夹下创建一个与数据库同名的文件夹,并在此文件夹下多了一个db.opt文件。db.opt文件是设置数据库的字符集和校对集。
1.10.3 显示数据库
语法:show databases;
information_schema:存储了mysql服务器的管理数据库的信息。比如:数据库名、表名、字段名、字段的数据类型、访问权限
performance_schema:MySQL5.5新增的一个数据库,主要用来收集数据库服务器性能参数。
mysql:mysql系统数据库,保存比如用户名、密码
test:给用户学习测试用的数据库
1.10.4 显示创建数据库的SQL语句
语法:show create database `数据名`
1.10.5 修改数据库
只能修改数据库字符编码
语法:alter database `数据库名` charset=字符编码
1.10.6 删除数据库
1、语法:drop database [if exists] `数据库名`
2、如果删除的数据库不存在会报错
解决:删除之前判断一下,存在就删除
1.10.7 选择数据库
语法:use `数据名`
1.11 表的操作
1.11.1 创建表
语法:
create table [if not exists] `表名`(
字段名 数据类型 [null|not null] [default] [auto_increment] [primary key] [comment],
……
)[engine=存储引擎] [charset=字符编码]
null|not null:是否为空
Default: 默认值
Auto_increment: 自动增长
Primary key: 主键
Comment: 备注
Engine:存储引擎,不同存储引擎表示不同的数据存储方式
Charset:设置表的字符编码
1、创建最简单的表
2、创建复杂的表
1.11.2 数据表文件
一个数据库对应一个文件夹,一个表对应一个或多个文件。
1、引擎是myisam,一个表对应三个文件
2、引擎是innodb,一个表对应是一个文件
所有的innodb的数据放在一个统一的文件中管理,路径在data文件夹下ibdata1文件。如果数据量很多,mysql会自动的生成ibdata2,ibdata3,…文件
多学一招:myisam引擎的表相互之间独立, Myisam的表可以随意的拷贝粘贴。innodb引擎的表相互之间不独立,
1.11.3 myisam和innodb引擎
1、 Myisam
a) 读取速度快
b) 对数据的约束能力低(不支持触发器,存储过程等等)
c) 容易产生大量碎片
2、 Innodb
a) 读取速度没有myisam快
b) 对数据的约束能力强(支持触发器,存储过程等等)
c) 不产生碎片
1.11.4 给指定的数据库中创建表
1.11.5 显示表
语法:show tables;
1.11.6 显示表的创建语句
语法:show create table 表名[\G]
\G的作用:
\G是将显示的字段竖着排列
1.11.7 查看表结构
语法:describe[desc] 表名
1.11.8 复制表
基于现在的表创建一个新表
语法一:create table 新表 select 字段1,字段2 from 旧表
脚下留心:这种方式创建表不能从父表中复制主键,自动增长;但是父表中的数据被复制过来。
语法二:create table 新表 like 旧表
脚下留心:like的方法只能复制表结构,不能复制表数据。
1.11.9 修改表
语法:alter table 表名,可以对表添加字段,删除字段等等操作
1、 添加字段 add [column]
1、在最后一列后面添加字段
2、将字段添加到第一列
3、将添加的字段放在指定字段之后
2、 删除字段
不能清空所有的字段。
3、 修改字段 modify change
a) 只改字段属性,不改字段段名(modify)
将name的属性改为varchar(30),并将位置移动到第一列
能修改字段的所有属性,除了字段名和默认值,备注,可以添加任意属性,
b) 改属性并改字段名
将name改名为myname varchar(10)并将位置放在id的后面
能修改字段的所有属性,可以添加任意属性,除了默认值,如果想设置
4、 修改引擎
5、 修改表名 rename to
6、将stu1表移动到data数据库下并改名为stu.
1.11.10 删除表
语法:drop table [if exists] 表1,表2.表3,…
删除多个表
删除之前可以判断表是否存在
可以一次判断多个表是否存在
1.12 数据操作
新建测试表
create table stuinfo(
id int auto_increment primary key comment '主键',
name varchar(20) not null comment '姓名',
sex char(1) not null default '男' comment '性别',
score int comment '成绩'
)engine=innodb charset=utf8;
1.12.1 插入数据
语法:insert into 表名 (字段名) values (值)
总结:
1、 值的个数、顺序和插入字段的个数、顺序必须一致。
2、 自动增长列可以手动输入数字,也可以通过null让MySQL自动增长
3、 插入字段和表字段顺序可以不一致,但是插入的值必须和插入字段的顺序一致。
4、 如果插入值的顺序、个数和表字段的顺序个数一致的话,插入字段可以省略
5、 插入默认值
a) 如果一个字段有默认值,此字段上没有值的插入就会自动的插入默认值
b) 通过default关键字插入默认值
6、 一次插入多条数据
7、 使用insert…set插入数据
1.12.2 修改数据
语法:update 表名 set 字段名=值 [where 条件] [order by 排序] [limit 限制]
将rose的性别改成“女”,成绩改成66
将班级的前3名同学性别改成男
1.12.3 删除数据
语法:delete from 表 [where条件] [order by 排序 asc|desc] [limit 数量]
--删除学号是1的学生
--删除第一名
--删除成绩在80分以下的
--清空表
多学一招:清空表的方法有两个,第一个是delete from 表名,还有一个是truncate table 表名。delete from 表名执行过程是将数据一条一条的依次删除。truncate table执行过程是将整个表删除同时创建一个相同的表,很显然这种方式清空表的效率高。
Select * from 表名 删除表的时候自增长的属性还在,在重新加入的时候会延续自增长的键值。
1.13 字符集
字符集:可见字符在保存和传输时对应的二进制编码集合。由概念可知,字符
集在两个地方使用
1、 数据存储的时候
2、 数据传输的时候
1.13.1 数据存储的时候使用字符集
MySQL可以在服务器、数据库、表、字段上设置字符编码
注意:字符编码在数据库上设置就可以了。
1.13.2 数据在传输的时候使用字符集
场景:
1、 创建表的时候只用中文就报错
2、 在插入数据中出现中文报错
分析
客户端发送的编码有客户端决定的。我们现在用的客户端是windows的命令行,查看命令行的编码:客户端右键——属性——
查看服务编码
解决:告诉服务器通过gbk编码解析发送SQL语句。语法:set 变量名=值
现在插入成功!
场景:查看插入的数据
原因:返回的编码是utf8,客户端用gbk去解析的。
解决:将返回的结果编码设置为gbk;
再次查询,成功
注意:我们一般只执行set names ‘字符编码’,因为这个SQL语句可以一次更改3个变量。
1.14 校对集
1.14.1 概念
在某种字符集下,字符和字符的比较关系。比如a和B的大小关系,如果区分大小写a>B,如果不区分大小写a<B。这种比较的关系是有校对集决定的。
校对集依赖于字符集,不同的字符集他们的比较规则也不一样,如果字符集发生更改,校对集也要重新定义。
不同的校对集对同一组字符比较结果不一致的。
1.14.2 定义校对集
语法:collate=校对集
定义两个表,校对集不一样
create table t1(
name char(1)
)charset=utf8 collate=utf8_general_ci;
create table t2(
name char(1)
)charset=utf8 collate=utf8_bin;
插入测试数据
insert into t1 values ('a'),('B');
insert into t2 values ('a'),('B');
通过排序查看结果
校对集名字规则
_bin:表示按二进制编码进行比较
_ci:不区分大小写
_cs:区分大小写
中文排序规则:按照汉字的拼音来排序
1.14.3 显示所有的字符集
1.14.4 显示所有的校对集
MySQL数据库的更多相关文章
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- 当忘记mysql数据库密码时如何进行修改
因为长时间没有使用数据库了,或者把密码改完之后就忘了数据库密码,不能正常进入数据库,也无法修改密码,有一个简单的常用修改密码方式: 1.首先找到和打开mysql.exe和mysqld.exe所在的文件 ...
- MySQL数据库和InnoDB存储引擎文件
参数文件 当MySQL示例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认情况下,MySQL实例会按照一定 ...
- 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库
说起Oracle数据库,以前没用过Oracle不知道,但是这1年用Oracle后,发现真的是想狂吐槽,特别是那个.NET驱动和链接字符串,特别奇葩.总归是和其他数据库不一样,标新立异,不知道为何.另外 ...
- CentOS下mysql数据库常用命令总结
mysql数据库使用总结 本文主要记录一些mysql日常使用的命令,供以后查询. 1.更改root密码 mysqladmin -uroot password 'yourpassword' 2.远程登陆 ...
- [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...
- mysql数据库主从同步
环境: Mater: CentOS7.1 5.5.52-MariaDB 192.168.108.133 Slave: CentOS7.1 5.5.52-MariaDB 192.168. ...
- PDO连接mysql数据库
1.PDO简介 PDO(PHP Data Object) 是PHP 5 中加入的东西,是PHP 5新加入的一个重大功能,因为在PHP 5以前的php4/php3都是一堆的数据库扩展来跟各个数据库的连接 ...
- mysql数据库开发常见问题及优化
mysql 数据库是被广泛应用的关系型数据库,其体积小.支持多处理器.开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高.在使用 mysql 的过程中不规范的 SQL 编写.非最优的 ...
- 如何在删除ibdata1和ib_logfile的情况下恢复MySQL数据库
昨天,有个朋友对公司内部使用的一个MySQL实例开启binlog,但是在启动的过程中失败了(他也没提,为何会失败),在启动失败后,他删除了ibdata1和ib_logfile,后来,能正常启动了,但所 ...
随机推荐
- 重温JSP学习笔记--三大指令九大内置对象
最近在温习javaweb的相关基础知识,鉴于我弄丢了记满了整整一本的笔记,决定以后把笔记和一些学习上的心得以及碰到的一些问题统统都放在网上,今天看了一下jsp的相关基础,以下是笔记: JSP三大指令: ...
- WebSocket 介绍(一)
WebSocket 发起单个请求,服务端不需要等待客服端,客户端在任何时候也能发消息到服务端,减少了轮询时候的延迟.经历一次连接后,服务器能给客户端发多次.下图是轮询与WebSocket的区别. 基于 ...
- activity结束之后刷新之前的activity的内容
点击添加按钮之后-----弹出一个新的activity--------在新的activity将数据输入保存之后,关闭当前的activity回到之前的activity刷新内容 实现:使用onActivi ...
- 大型网站提速关键技术(页面静态化,memcached,MySql优化)(一)
一:关键技术介绍: 衡量是否为大型网站的要素: A:PV值(page views 页面浏览量) 访问量大: 带来的问题:1:流量大 -->解决方案:增加带宽,优化程序(视频和图片较浪费带宽,尽量 ...
- Android APP压力测试(三)之Monkey日志自动分析脚本
Android APP压力测试(三) 之Monkey日志自动分析脚本 前言 上次说要分享Monkey日志的分析脚本,这次贴出来分享一下,废话不多说,请看正文. [目录] 1.Monkey日志分析脚本 ...
- [Asp.net 5] Localization-resx资源文件的管理
上一篇博文地址:[Asp.net 5] Localization-简单易用的本地化-全球化信息 本文继续介绍asp.net 5多语言.今天重点讲的是多语言的resx文件.涉及到的工程有:Microso ...
- 关于xamarin.forms在MVVM情况下如何DisplayActionSheet
最近一直在研究Xmarin.forms,碰到了一个棘手的问题,就是在MVVM的情况下如何在ViewModel中去使用DisplayActionSheet,然而我使用的是XAML模式,也就是说,只有在后 ...
- Java 9将采用新的版本字符串格式
在现有的版本编码格式使用了两年之后,从Java 9开始,Java版本方案将根据业内软件版本编码的最佳实践进行修改.使用或解析Java版本字符串的应用程序开发人员要注意了,因为这种变化 ...
- Java代码优化(长期更新)
前言 2016年3月修改,结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化.在修改之前,我的说法是这样的: 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸 ...
- 转载:《TypeScript 中文入门教程》 13、类型兼容性
版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 TypeScript里的类型兼容性基于结构子类型的. 结构类型是只一种只使用其成 ...