简略记录了个人在Windows 10环境下安装MySQL的过程,以及一些基础的SQL语句,作为备忘录。
参考菜鸟教程-MySQL安装
环境:Windows10 1909 64位
材料:MySQL安装包
配置文件:
下载好MySQL Community Server 8.0.21后,选择一个路径解压,这里我解压到了“D:\web\mysql-8.0.21-winx64”。
在该解压路径下新建一个文件:my.ini
使用文本编辑器打开"my.ini",写入以下内容,注意修改MySQL的安装路径
[client] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] # 设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=D:\\web\\mysql-8.0.21-winx64 # 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错 # datadir=C:\\web\\sqldata # 允许最大连接数 max_connections=20 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB准备工作完成后,MySQL文件夹下的目录应如下所示
1、在路径"C:\Windows\System32"中找到"cmd.exe",右击,以管理员方式运行
2、进入MySQL安装路径下的bin目录中,我这里是"D:\web\mysql-8.0.21-winx64\bin",如果MySQL安装在其他盘,可以先输入"盘符:",回车,切换硬盘后,再使用"cd"命令进入相应的bin目录
3、初始化数据库,输入以下>后的命令,然后等待命令窗口执行完成
>mysqld --initialize --console4、执行完成后,在最下面会出现root用户的初始密码,如
... 2018-04-20T02:35:05.464644Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: APWCY5ws&hjQ ...其中"APWCY5ws&hjQ"就是初始密码,务必记录保存好,之后会介绍如何修改密码
5、安装,输入以下命令
>mysqld install6、启动,安装完成后,输入以下命令
>net start mysql7、以root账户登录,提示MySQL服务启动后,输入以下命令,回车确认后出现"Enter password:",输入初始密码
>mysql -u root -p8、登录成功后,出现如下界面
修改root密码有两种情况,第一种情况是在能登录进MySQL的情况下修改,第二种情况是在忘记密码,不能登录进MySQL的情况下修改。
能登录MySQL
输入以下SQL语句,其中’newpassword’中就是新密码,注意最后要加英文的分号
>alter user 'root'@'localhost' identified by 'newpassword';忘记初始密码,不能登录MySQL
这里直接贴上链接,里面的讲解十分详细
MySQL本身没有提供图形管理工具,日常的开发和维护需要在命令行窗口中进行,所以对于编程初学者来说,上手就略微有点困难,增加了学习成本。这里推荐几款MySQL图形化处理工具:
Navicat:适合初学者,和微软SQLServer的管理器很像,易学易用,支持中文,14天试用。
SQLyog:轻量级,易于使用、快速而简洁,需要注册码。
先切换到某个具体的数据库:use 数据库名称
create table 表名称(字段名称 字段类型(长度) 约束,字段名称 字段类型(长度) 约束……);字段类型
Java中的类型MySQL中的类型byte/short/int/longtinyint/smallint/int/bigintfloatfloatdoubledoublebooleanbitchar/Stringchar和varchar类型Datedate/time/datetime/timestamp注:
char和 varchar的区别:
char代表是固定长度的字符或字符串
varchar代表的是可变长度的字符串
datetime和timestamp区别:
datetime就是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用null存入到数据库中
timestamp也是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用当前的系统时间存入到数据库
字段约束主键约束:primary key
唯一约束:unique
非空约束:not null
先切换到某个具体的数据库:use 数据库名称
查看某个数据库下所有的表 show tables; 查看某个表的具体结构 desc 表名称;对列
添加列 alter table 表名称 add 列名称 类型(长度) 约束; 删除列 alter table 表名称 drop 列名称; 修改列名 alter table 表名称 change 旧列名 新列名 类型(长度) 约束; 修改列的类型、长度、约束 alter table 表名称 modify 列名 新类型(新长度) 新约束;对表
修改表名 rename table 表名称 to 新表名; 修改表的字符集 alter table 表名称 character set 字符集;比较查询:>, >=, <, <=, =, <>
模糊查询:like [’_‘表示一个字符,’%'表示任意字符]
范围查询:in
条件关联:and, or, not
排序查询 select [distinct] *|列1[as 列别名],列2,... from 表名称 [[where 条件] order by 列名1 asc|desc,列名2 asc|desc];分组统计查询
聚合函数 sum();count();max();min();avg(); 分组查询 select [distinct] *|列1[as 列别名],列2,... from 表名称 group by 条件1 having 条件1的条件;SFWGHO(select……from……where……group by……having……order by……)
添加外键约束
alter table 表名称1 add foreign key (外键) references from 表名称2(主键);一对一
一对多
多对多
隔离性:一个事务的执行,不应该受到其他事务的干扰。
如果不考虑隔离性(一个事务执行受到其他的事务的干扰),引发一些安全问题,主要体现在读取数据上:
脏读:一个事务读到了另一个事务未提交的效据,导致查询结果不一致
不可重复读:一个事务读到了另ー个事务已经提交的 update的数据,导致多次查询结果不一致
虚读/幻读:一个事务读到了另一个事务已经提交的 insert的数据,导致多次查询结果不一致
设置事务的隔离级别:
read uncommitted:脏读,不可重复读,虚读都有可能发生read committed :避免脏读。但是不可重复读和虚读是有可能发生repeatable read :避免脏读和不可重复读,但是虚读有可能发生serializable(串行化): 避免脏读,不可重复读,虚读 #设置事务的隔离级别的语句: set session transaction isolation level 隔离级别; #查看当前的隔离级别 select @@transaction_isolation; #8.0之后 select @@tx_isolation; #8.0之前