- Mysql安装 (*****掌握*****)
- mysql的安装和卸载
- mysql卸载
- mysql的安装和卸载
1、找到mysql的安装目录:
在mysql的安装目录。找到my.ini 文件。
找到datadir 并且记录路径。 (mysql的数据文件的目录)
2、Windows7系统:
进入C盘====》点击 “工具” ====》选择“文件夹选项” ====》点击 “查看”====》将“隐藏文件和文件夹”选项改为“显示隐藏的文件、文件夹和驱动器”,如下图所示:
3、打开控制面板—卸载程序
4、卸载mysql
5、删除mysql的安装目录,删除mysql的数据文件目录datadir.第一步中记录的文件目录
mysql默认的数据文件目录,在ProgramData这个目录下,并且ProgramData这个目录是隐藏目录,需要设置显示隐藏目录。
删除ProgramDate下的mysql的相关目录。
6、运行“regedit”:删除HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Eventlog\Application\MySQL文件夹
注意:一般情况下之前5步即可,如果还不能安装,就执行步骤6,运行regedit,试着删除注册表中的数据.
-
-
- mysql的安装
-
选择第二个,自定义
\
9、选择配置方式,“Detailed Configuration(手动精确配置)”、“Standard Configuration(标准配置)”,我们选择“Detailed Configuration”,方便熟悉配置过程。
10、选择服务器类型,“Developer Machine(开发测试类,mysql占用很少资源)”、“Server Machine(服务器类型,mysql占用较多资源)”、“Dedicated MySQL Server Machine(专门的数据库服务器,mysql占用所有可用资源)”
11、选择mysql数据库的大致用途,“Multifunctional Database(通用多功能型,好)”、“Transactional Database Only(服务器类型,专注于事务处理,一般)”、“Non-Transactional Database Only(非事务处理型,较简单,主要做一些监控、记数用,对MyISAM数据类型的支持仅限于non-transactional),按“Next”继续。
12、选择数据文件安装的目录,可以选择默认
一直默认下一步,直到如下:
设置mysql数据库的默认编码集
设置环境变量和是否开机启动:
设置密码:
该过程可能有点长:
安装完后:在命令窗口输入mysql -u root -p进行登录
-
-
- 环境变量
-
在命令行中,输入mysql –u root –p 的时候,出现mysql不是内部命令。系统变量没有配置。
path后面加入:
是mysql的安装目录中的bin目录
添加path的时候,如果出现 前面的没有分号,需要自己去加上分号;要注意分号的中英文。
按照完成之后,在cmd中输入
mysql –u root –p
出现如下图,表示mysql启动成功。
使用exit可以断开连接
- 重置mysql–root密码
- 停止mysql服务 运行输入services.msc 停止mysql服务
- 在cmd下 输入: mysqld –skip-grant-tables
mysqld –skip-grant-tables:就是在启动mysql时不启动grant-tables,授权表
启动服务器 光标不动 (注意:不要关闭该窗口)
- 新打开cmd 输入mysql -u root -p 不需要密码
use mysql; 作用:使用mysql这个数据库
update user set password=password(‘123′) WHERE user=’root’;
- 关闭两个cmd窗口 注意:在任务管理器结束mysqld 进程
5) 在服务管理页面 重启mysql 服务。
重新登录的时候需要使用新的密码。
- 数据库的操作 (*****了解*****)
- mysql数据库的内部存储结构
当一台电脑安装了mysql数据库软件,就可以把这台电脑称之为数据库服务器。
登录mysql:
用户通过在dos窗口中输入:
mysql [-h 连接的主机ip -P端口3306)] -u 用户名 -p 密码
mysql -h 127.0.0.1 -P 3306 -u root -p
连接本机并且端口号默认: 省略 -h 和 -P 主机和端口。
一个数据库服务器可以有多个数据库,一个数据库中可以有多个表(就是一个二维表),一个表中可以有多条数据记录。
总结:
一个数据库软件,可以管理多个数据仓库(数据库)。
一个数据仓库可以管理多个数据表。
每个数据表中可以存储多行数据记录。
提示:每创建一个数据仓库,会在mysql的数据文件目录中多一个文件夹。
-
- sql语言
SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的关系型数据库均支持SQL。
特点:
非过程性语言。一条语句一个结果。多条语句之间没有影响。每一条SQL执行完都会有一个具体的结果出现。
SQL是用来操作关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能
-
- SQL分类
DDL (数据定义语言)
数据定义语言 – Data Definition Language
用来定义数据库的对象,如数据表、视图、索引等
create drop alter truncate
DML (数据操纵语言)
数据处理语言 – Data Manipulation Language
在数据库表中更新,增加和删除记录
如 update, insert, delete 不包含查询
DCL (数据控制语言)
数据控制语言 – Data Control Language
指用于设置用户权限和控制事务语句
如grant,revoke,if…else,while,begin transaction
DQL (数据查询语言)(★★★★★)
数据查询语言 – Data Query Language
数据表记录的查询。
select
sql能做些什么?
- 操作数据库
- 操作数据库中的表
- 操作数据库中的表记录
我们学习SQL语句的路线:
- 学习SQL语句对数据库的操作
- 学习SQL语句对数据表结构的操作
- 学习SQL语句对数据表中的数据记录操作(★★★★★)
- 数据仓库中的数据备份和恢复(CV)。
- 数据库操作的sql语句 (*****练习*****)
sql语句每一条需要有 ; 分号,表示结束。
在操作数据仓库之前,一定要 确认mysql 数据库服务启动:
1、运行窗口,输入 services.msc 打开 服务窗口
如果没有启动,选中mysql右键启动。
2、连接到数据库上
-
- 查看所有数据库
目标:
1、如何查询mysql数据库软件的所有数据仓库?
2、如何查看具体数据仓库的编码?
1、查询当前所有的数据库:
语法: show databases;
2、查看当前数据的创建方式:查看数据库的编码表
语法:show create database 库名;
当我们创建数据库的时候,如果没有指定编码表,默认使用的是安装数据库软件时指定的编码表。
需求:
1、查询mysql数据库软件的所有数据仓库
2、查看mysql数据仓库的编码
information_schema数据库:
其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。
performance_schema 数据库:
存储引擎:命名PERFORMANCE_SCHEMA ,主要用于收集数据库服务器性能参数。
mysql 数据库:
mysql库是系统库,里面保存有账户信息,权限信息,存储过程,event,时区等信息。
test 数据库:
这个是安装时候创建的一个测试数据库,和它的名字一样,是一个完全的空数据库,没有任何表,可以删除。
-
- 创建数据库
创建数据的语法:
1、create database 数据库名 :由于创建数据库时没有指定编码表,因此会使用安装数据库时默认的编码表
2、create database 数据库名 character set 编码表名; 创建数据库会使用指定的编码表
需求:数据库名称不要用中文
1、创建一个名称为mydb1的数据库。
2、创建一个使用utf8字符集的mydb2数据库。
1、创建一个名称为mydb1的数据库。
- 创建一个使用utf8字符集的mydb2数据库。
-
- 删除数据库
语法:drop database 数据库名;
需求:删除前面创建的mydb1数据库
-
- 修改数据库编码集
语法:alter database 数据库名称 character set 字符集;
需求:修改mydb2字符集为gbk
指定字符集是 utf8 utf-8 是错误的 (mysql不认识UTF-8)。
查询某个数据库的字符集,以及创建数据库的语句:show create database 数据库名;
-
- 切换数据库和查看正在使用的数据库
当我们创建好了数据库之后,最终需要给数据库中添加数据表。然后给数据表中添加数据。
在需要添加数据表之前,我们需要先切换到这个数据仓库中。
切换数据库:
语法: use 数据库名;
查询当前正在使用的数据库:
语法:select database();
重点练习: 创建库、删除库、切换库的语句
-
- 数据库操作语句小结
- 创建
create database 数据库名
- 查看所有数据库
show databases。
- 查看指定数据库建表语句及字符集
show create database 数据库名
- 删除数据库
drop database 数据库名
- 修改数据库字符集-了解
alter database 数据库名 character set ‘字符集’
- 切换数据库
use 数据库名
- 查看当前数据库名称
select database();
- 数据表结构的sql语句 (*****掌握*****)
- 数据表的创建语句
注意:创建表的时候,一定要先切换到某一个具体的数据库
语法:use 数据库名
数据表结构:
建表语句:
create table 表名(
列名 数据类型,
列名 数据类型,
……
列名 数据类型 (最后一个列不需要逗号)
);
注意:多个列之间使用逗号隔开,最后一个列不需要输入逗号。
创建表的时候,一定切换到某一个具体的数据库。
use 数据库名。
数据类型:
- 字符类型 : Java中的String 和char 类型 对应 mysql 中的 varchar(列的长度)、char(列的长度) variable 可变的
- varchar:长度可变
name varchar(20):设置name字段的长度为20,name的储存长度在20以内都可以,并且会自动适应长短。
- char:长度固定
name char(20):设置name字段的长度为20,name的存储长度在20以内,如果不满20,用空格补足。
例如:lisi
只有4个长度,剩下的用空格补足。
如果存储的长度超出了表中列的长度,存储报错。
区别:char 的性能好。 varchar可以节省空间。
通常时候,如果长度不固定,我们使用varchar。
使用char的情况。当某个字段的长度固定的时候,可以采用char。例如身份证号或者手机号。
- 大数据类型
Java中:
字节流:InputStream, outputStream
字符流:Reader, Writer
mysql中:
BLOB 保存的字节数据
TEXT 保存字符数据
通常我们不会把文件存储到数据库。(占用资源,操作速度慢)
我们会把文件的路径(通常存放在本地磁盘)存到数据库中。
- 数值型 : Java中:byte、short 、 int 、 long 、float、 double
- 整形:TINYINT 、SMALLINT、MEDIUMINT、INT、BIGINT 在创建数据表的时候,数值型也有自己的长度,一般不需要指定,使用默认的长度。
- 浮点型:FLOAT(单精度)、DOUBLE(双精度)
在定义类型的时候可以设置两个参数,如sal float(5,2):sal字段总共5位长度,可以有两位小数。
- 逻辑型
Java中的boolean
mysql中:BIT 比特位
- BIT: 1 或者0组成的数据
其数据有两种取值:0和1,长度为1位。在输入0以外的其他值时,系统均把它们当1看待。这种数据类型常作为逻辑变量使用,用来表示真、假或是、否等。
- 日期型
Java 中的日期类 : Date, SimpleDateFormat, Calendar, new Data().getTime(); -> long 类型,时间毫秒. System.currentTimeMillis;
- date :日期—-只有日期, 年月日
- time:时间—–时分秒
- dateTime:日期和时间都包含 “yyyy-MM-dd”
- timestamp:时间戳. 日期和时间都包含 ——-当数据被修改的时候
timestamp:当其他数据发生改变的时候,这个字段会自己修改为当前时间。
【示例】
需求:创建一个员工表,员工表有工号、姓名、年龄、性别、生日。
注意:如果刚连数据库的话,需要先切换一个数据库才能进行建表。
建表如下:
建表语句如下:
create table emp(
id int,
name varchar(20),
age int,
gender int,
birthday date
);
-
- ※查看表
- show tables : 查看该数据库的所有的表
- show create table 表名 :查看建表语句以及字符集—了解
- desc 表名:查看表的列的信息(查看表结构)
-
- 约束
约束:规定,限制。限制表中列的内容。需要满足一定的规则。
数据库中的约束:限制列的内容。
意义:保证数据的有效性和完整性。可以确保数据库满足业务规则。
- 主键约束
主键约束:primary key
作用:设置某一个字段为主键,主键的特性是唯一(不能重复),并且不能为空。
一般使用一个没有任何意义的字段,比如id作为一个主键(没有意义就不需要修改)。
如果主键是一个int类型,还可以设置主键自增长。(即在插入记录的时候可以不用设置主键,让其自动以递增的形式添加)
一张表中只能有一个主键。
【示例】
create table 表名 (
id int primary key auto_increment,
name varchar(20),
………….
);
- 唯一约束
唯一约束:unique 内容不允许重复,可以为null(null不算重复)。
一个表里可以添加多个唯一约束。
写法: 列名 类型(长度) unique
【示例】
create table 表名 (
id int primary key auto_increment,
name varchar(20) unique,
………….
);
唯一约束和主键约束的区别
1、唯一约束可以是空(null)。 但是主键约束不能为空
2、一张表中只能有一个主键,但是唯一约束可以有多个
- 非空约束
非空约束:not null 。不允许为空。 表示该列的内容不允许为空。
写法: 列名 类型(长度) not null,
【示例】
create table emp(
id int primary key auto_increment,
name varchar(20) unique,
age int not null,
………….
);
约束的目的。
目的:保证数据的正确性。
约束列。限制列的内容。
【示例】
需求:创建一个员工表emp2,员工有工号、姓名、年龄、性别、生日和住址。
1、要求工号是主键并且设置主键自增长
2、姓名必须是唯一性的
3、年龄必须是非空的
4、地址必须是唯一的,并且非空。
建表如下:
查看结构:
-
- 数据表结构的修改
修改数据表:
可以对表名、表中的列名、列的类型、列的约束进行增删改。
语法:alter table 表名 增/删/改 列名 类型(长度) 约束;
1、增加列 语法: alter table 表名 add 列名 类型(长度) 约束;
需求1:在emp2表上增加salary列
alter table emp2 add salary double;
- 修改现有列类型、长度和约束
语法:alter table 表名 modify 列名 类型(长度) 约束;
需求1:修改name列的长度为30
需求2:修改birthday列不能为null
- 修改现有列名称
语法:alter table 表名 change 旧列名 新列名 类型(长度) 约束;
需求:修改列名name为username
4、删除现有列 语法:alter table 表名 drop 列名 ;
需求:删除age列
5、修改表名 语法: rename table 旧表名 to 新表名;
需求:将emp2表名修改为employee表
rename table emp2 to employee;
6、修改表的字符集 语法:alter table 表名 character set 编码集;
需求7: 将employee的编码修改成utf8
查询库编码和表编码
-
- 数据表的删除
语法:drop table 表名;
需求:删除emp表
-
- 数据表操作语句小结
数据表创建
create table 表名(
列名 数据类型 约束 ,
列名 数据类型 约束 约束,
………
);
查看表
show tables:查看所有的表
show create table 表名: 查看建表语句以及字符集
desc 表名:查看表结构
show columns from 表名
修改表的语句
alter table 表名(add|modify|drop) 列名 类型(长度) 约束。-了解
alter table 表名change 旧列名 新列名 类型(长度) 约束。-了解
rename table 旧表名 to 新表名-了解
删除表
drop table 表名
- 数据记录的增删改(*****重点*****)
insert 语句—-数据记录的增加
在java代码中对数据库操作最频繁的就是对表中数据的CRUD操作:create read update delete
数据记录存储位置:表。
-
-
- 方式一:全写
-
【示例】 语法:insert into 表名 (列名,列名,列名……) values (值,值,值……);
注意事项:
1、值与列一一对应。有多少个列,就需要写多少个值。如果某一个列没有值。可以使用null。表示插入空。
2、值的数据类型,与列被定义的数据类型要相匹配。并且值的长度。不能够超过定义的列的长度。
3、字符串:插入字符类型的数据,必须写单引号。在mysql中,使用单引号表示字符串。
4、date 时间类型的数据也可以直接使用单引号表示: ‘yyyyMMdd’ ,’yyyy-MM-dd’,’yyyy/MM/dd’ 。
5、在插入数据的时候, 如果某些列可以为null, 或者是自动增长的列, 或者有默认值的, 在插入的时候可以省略. 或者编写null, 实现自动增长.
6、如果给表中的所有列插入数据, 这时可以省略表后面的列名, 直接写values.
使用select * from 表名 —查看该表的所有信息。
练习:向数据库中插入三条内容。
–如果主键是自动增长,可以直接书写null。
注意:我们需要再创建一张,建表语句如下:
create table user (
id int primary key auto_increment,
name varchar(20) unique,
age int not null,
gender int,
birthday date,
address varchar(50) unique not null
);
当插入含有中文的数据的时候,出现如下错误。
原因:dos窗口的字符集是gbk,而数据库是utf8,在数据进行保存的时候出现了编码错误。
mysql有六处使用了字符集,分别为:
- client:客户端
是客户端使用的字符集。Dos命令窗口就属于客户端
- connection:客户端
是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。
- results:客户端
是数据库给客户端返回数据时使用的字符集设定,如果没有指明,使用服务器默认的字符集。
- database:服务器
是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。
- server:服务器
是服务器安装时指定的默认字符集设定。
- system:服务器
是数据库系统使用的字符集设定。
错误的产生原因:
客户端的数据是gbk,而服务器中设置的客户端字符集是utf8的,编码格式不一致。
查看mysql服务的所有客户端和服务端使用的字符集:show variables like ‘character%’;
解决方案:
第一种-了解: set names gbk ; 临时将客户端的字符集设置为gbk
* 只对当前窗口有效,dos窗口关闭之后就会失效
第二种:配置mysql/my.ini 文件
my.ini 在mysql的安装目录:将客户端的字符集修改为gbk
注意:修改字符集之后需要重新连接数据库。退出 MySql, 重新登录即可.
在对数据表中的数据进行修改、插入的时候,使用的dos窗口,这时dos窗口需要对插入的中文进行编码,然后把数据插入到数据库中。而dos窗口中使用的编码表是gbk。但是在mysql数据库中针对客户端控制的设置的编码表是utf8.
这时只能修改数据库中默认的客户端程序的编码表。
修改mysql的配置文件,my.ini
修改为:
-
-
- 方式二:省略部分列
-
【示例】 语法:insert into 表名 (列名,列名,列名) values (值,值,值);
注意:
可以省略部分列名。某一列 有默认值,或者允许为空,才可以省略。
如果主键是自增长的认为是有默认值的。也可以省略
【示例】
需求:插入一行记录,该记录只有姓名、年龄以及住址。
常见错误如下:
- 姓名重复
- age字段不能为空
-
-
- ※方式三:省略所有的列
-
语法 : insert into 表名 values(值,值,值,值);
1、表中有多少列,就有多个值。
2、按照表的结构,列和值去对应。
【示例】
整理:
如果主键:是自增长。不需要人工赋值(可以给值null)。数据库会按照自己的算法,为主键填充值。
通常遇到主键自增长,人工赋值的时候,赋值null。mysql会自己把null替换成新的值
-
- update 语句—-修改表记录
语法: update 表名 set 列名=值,列名=值…. [ where条件语句 ];
注意事项:
1、如果不加条件,将会修改某一列的所有值。
2、一般修改数据时,都需要增加条件。
多个列使用逗号隔开。
= 表示等于
>
<
>=
<=
<> 表示不等
【示例1】:
将所有人的年龄修改为20岁。
由于没有设置条件,因此所有人的年龄改成了20岁
【示例2】
将姓名为张三的人的年龄改为18岁。
【示例3】
将姓名为李四的人的年龄改为30,地址改为航都路18号
【示例4】
将王五的年龄在原基础上增加2岁。
-
- delete语句—–删除表中数据的语句
语法:delete from 表名 [where条件语句]
删除满足条件的行的数据。delete是删除行的数据。
注意:如果没有where,删除表中的所有的记录。
delete删除的是行。
【示例1】:
删除表中名称为’王五’的记录。
【示例2】
删除年龄是30岁的用户。
【示例3】
删除表中所有记录。
-
- Truncate 语句—-删除数据
语法 : truncate table 表名:
先删除表,再创建表,就等于将数据全部删除了。
性能问题: truncate table的性能更好
【示例】
truncate table 表名;—删除表的所有记录.
面试题1:(*****了解*****)
delete删除表中的数据时没有加where 条件,会删除表中的所有数据,它与truncate 有什么区别?
- 删除过程不同
truncate 删除数据,过程先将整个表删除,再重新创建
delete 删除数据,逐行删除记录
truncate 效率要好于 delete
- 语言定义不同
truncate 属于DDL ,delete 属于DML
DDL操作了数据后,该数据不能恢复
DML 操作了数据后,数据可以恢复
面试题2:(*****了解*****)
delete from user; 和 drop table user; 有什么区别:
delete from user; 把user表中的所有数据全部删除,但是user的表还存在。
drop table user; 把user数据表从数据库中删除。
-
- 数据记录增删改小结
新增:
insert into 表名 values(值,值,值…..)
insert into 表名(列名1,列名2,列名3….) values(值1,值2,值3…..)
insert into 表名(列名2,列名4,列名5….) values(值2,值4,值5…..)
修改:
update 表名 set 列名=值,列名=值 where 条件
删除:
delete from 表名 where 条件
如果不加where 条件,就是删除所有的数据。
删除:清空数据
truncate table 表名
通过删除整张表之后再重新创建一张表来达到清空数据的目的。
delete 和 truncate的区别是delete删除的数据在事务管理的情况下还能恢复,而truncate则不能恢复。
转载于:https://my.oschina.net/u/3892666/blog/2253260
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101348.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...