1. 安装
下载地址:官网download地址
- 注意1:当前MySQL Community Server 5.7.21版本是免安装版,不是exe文件
- 注意2:不要下载Windows (x86, 64-bit), ZIP Archive Debug Binaries & Test Suite版
安装参考:
Win7安装MySQL 64位解压缩版
Windows 10下mysql 64位 安装(mysql-5.7.11-winx64安装)
要点归纳: - 选择正确版本
- 设置环境变量
- 配置my.ini文件
- 管理员运行cmd,
- data路径初始化:cd 到mysql bin文件夹中运行mysqld --initialize --console
2018-04-14T03:15:52.711719Z 1 [Note] A temporary password is generated for root@localhost: k9CRxtbKgt?j
记住这里的密码:root@localhost: k9CRxtbKgt?j
- 安装MySQL服务:mysqld -install
- 启动MySQL服务:net start mysql
报错:
(C:\Users\leegang\Anaconda3) D:\MySQL\bin>net start mysql
MySQL 服务正在启动 .
MySQL 服务无法启动。
服务没有报告任何错误。
解决办法:
重新运行mysqld --initialize进行初始化,必要时可把之前配置的data文件夹删除
再次尝试启动MySQL 服务:net start mysql
(C:\Users\leegang\Anaconda3) D:\MySQL\bin>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。
- 进入MySQL,修改root密码为123456
mysql -u root -p
alter user root@localhost identified by "123456";
需要确保①已经启动MySQL服务:net start mysql;②用管理员方式打开cmd
安装结束,记住启动MySQL服务的命令,记住你的root密码
2. 数据库系统DBS(Database System)
DBS=DBMS + DB
- 数据库DB(database):存储数据的介质。分为
-- 关系型数据库SQL:Qracle, DB2, mysql, access
特点:安全(保存到磁盘基本不会丢失)、容易理解,但浪费空间(二维表)
-- 非关系型数据库NoSQL(Not only SQL):mongodb, redis
特点:效率高,但不安全(断电丢失) - 关系型数据库:是一种建立在关系模型(数学模型)上的数据库。
-- 关系模型包含三个方面:数据结构(行列二维表)、操作指令集合(所有SQL语句)、完整性约束(表内数据约束、表与表之间的约束) - 数据库管理系统DBMS(Database Management System):管理数据库的软件
- 数据库应用程序:数据库管理系统的补充
- SQL语言:对数据库进行查询和修改的语言
--DDL:数据定义definition语言,用来维护存储数据的结构。如:create,drop,alter等;
--DML:数据操作manipulation语言,用来对数据进行操作。如:insert,delete,update等;
--DCL:数据控制control语言,主要是负责权限管理。如:grant,revoke等。
补充:SQL是一种约束,但不强制,不同的数据库产品内部可能会有一些细微差别。类似W3C与各类浏览器的关系。
Q:关系型数据库的设计?
01.找出系统中的存在的实体对象。比如:教师、学生、教师
02.找出实体对象应该存在的数据信息:
--教师:姓名、性别、工资、年龄
--学生:姓名、性别、学号、学科
--班级:班级名字、教师编号
03.设定table表单,明确字段信息之间的关系和约束条件
3. MySQL数据库
MySQL数据库 是一种C/S结构的软件:客户端/服务端。
C/S结构特点:
- 服务器一直在运行状态,客户端在需要的时候运行;
- 若想访问服务器,必须通过客户端。
交互方式:
- 客户端连接认证,连接服务器,认证身份:mysql.exe -hPup
2.客户端发送SQL指令
3.服务器接收SQL指令:处理SQL指令,返回操作结果
4.客户端接收结果,显示结果
5.断开连接(释放资源):exit,quit,\q
例如:mysql.exe -hlocalhost -p3306 -uroot -p
(-h+主机)+(-p+端口,端口用于找软件)+(-u+)+(-p)
结构:
- 数据库管理系统:DBMS
- 数据库:DB
- 数据表:Table
- 字段:filed
4. SQL基本操作
分为三类:库操作、表操作、数据操作
前注:
- 1.必须用分号;结尾,\g也等价于分号
- 2.可以跨行,因为MySQL会自动寻找分号作为结束标记;
- 3.通常不区分大小写
4.1库操作
A.新增数据库:
create database 数据库名字 [库选项];
- 库选项:用来约束数据库,分为字符集设定charset、校对集设定collation
注:常用字符集为GBK、utf8
例如:
create database mydatabase charset utf8;
创建中文名的database:
set names gbk
create database 我的数据库 charset utf8;
执行结果:
- 会在data目录中创建相应的文件夹
- 每个数据库文件夹中都会有opt文件,保存着库选项(charset和collations)
B.查看数据库:
- 查看所有数据库:
show databases;
- 查看指定部分的数据库,即模糊查询
show databases like 'pattern';
-- pattern表示正则匹配模式
C.查看数据库的创建语句:
show create database 数据库名字
D.更新、修改数据库:
--数据库名字不可以修改
--数据库仅允许修改:字符集charset和校对集collation
- 修改字符集charset
alter database 数据库的名字 charset GBK;
E.删除数据库:
drop database 数据库名字
注意:删除不可逆
4.2 表操作
前注:表与字段是密不可分的;表的创建必须先明确所依附的数据库
A.新增数据表:
create table if not exists 表名(字段名字 数据类型,字段名字 数据类型)[表选项];
- if not exists:如果表名不存在,就创建,否则不执行创建代码。
- 字符集:charset
- 校对集:collation
- 存储引擎:engine,包括innodb和myisam
方法1显式指定该表所依附的数据库:
create table if not exists mydatabase.student(name varchar(10), gender varchar(10),
number varchar(10), age int)charset utf8;
方法2隐式指定该表所依附的数据库:
- 先进入某个数据库环境
- 再创建table表
use mydatabase;
create table student(name varchar(10), gender varchar(10),
number varchar(10), age int)charset utf8;
B.查看数据表:
- 查看所有表:
show tables
- 查看部分表:
show tables like 'pattern'
-- pattern表示正则匹配模式
- 查看表的创建语句:
show create table 表名;
- 查看表结构:查看表中的字段信息
desc columns from 表名
或者:
describe columns from 表名
或者:
show columns from 表名
C.修改数据表:
包括修改表本身、修改表中字段两类
- 修改表本身:表名、表选项(charset collation)
修改表名:
rename table 老表名 to 新表名
修改表选项:
alter table my_student charset utf8
- 修改表字段:新增、修改、删除、重命名
--新增字段:
alter table 表名 add columns 字段名 数据类型 [列属性][位置];
位置:first、“after 字段名”(默认在最后)
alter table my_student add column id int first;
其中:
my_student为目标数据表;
id为新增字段的名称;
int为新增字段的属性;
first为新增字段的位置。
--修改字段:
alter table 表名 modify 字段名 数据类型 [属性] [位置];
--重命名字段
alter table 表名 change 旧字段 新字段名 数据类型 [属性] [位置];
--删除字段
alter table 表名 drop 字段名;
D.删除数据表
drop table 表名;
4.3数据操作
A.新增数据:insert
场景1:给table中的所有字段都插入数据:无需指定字段所属的列,但要求数据的顺序必须与表中字段列的顺序一致
insert into 表名 values (1列的值,2列的值,3列的值,……);
场景2:只在部分字段中插入数据,则需要选定字段列表:
insert into 表名 字段列表 values (值列表1),(值列表2),……;
insert into my_student(number, sex, name, id) values(“itcast001”,“male”,“Tom”,“3”,),(“itcast002”,“female”,“Mary”,“15”,)
B.查看数据
查看表中全部数据:
select * from 表名
按条件查看数据:
select 筛选列名 from 表名 where 筛选条件;
select id,number,sex from my_student where id=1;
C.更新数据
update 表名 set 字段 = 值 [where 筛选条件]
#这里不加table
D.删除数据
delete from 表名 where 筛选条件
#这里不加table
5.中文数据问题
参考:玩转MySQL数据库P20
编码矛盾:
- MySQL服务器默认用utf8编码格式来解析输入的数据
- 然而,输入汉字时,它的编码格式是gbk
- 因此,解析错误
第一步:查看服务器用于与客户端进行沟通的字符编码格式
show variables like 'character_set%';
第二步:修改服务器与客户端沟通的编码格式为gbk
set character_set_client = gbk;
--服务器端的中文显示正确!
第三步:修改服务器反馈给客户端的数据编码格式为GBK
set character_set_results = gbk;
--客户端从服务器接收中文数据后也能正确显示!
第四步:set = value的更改方法只是当前对话有效,重启后失效。
措施:
set names = gbk;
等效于设置服务器的编码:
set character_set_client, character_set_connection, character_set_results = gbk
其中,character_set_connection是连接层的编码格式,能够提高转码效率,不设也能正常转码。
6. Web乱码问题
参考:玩转MySQL数据库P22
动态网站由三部分构成:浏览器、apache、数据库服务器
7. 校对集问题
参考:玩转MySQL数据库P21
校队集:数据比较的方式,只有当数据产生比较的时候,校对集才会生效。
校对集的三种格式:
_bin:binary,二进制比较,取出二进制位,一位一位的比较,区分大小写;
_cs: case sentive, 大小写敏感,区分大小写;
_ci: case insensitive, 大小写不敏感,不区分大小写;
查看校对集:
show collation;
创建table表时指定校对集:
create table my_table(name char(a))charset utf8 collate utf8_bin;
这里指定了校对集为collate utf8_bin。在对该table进行排序等比较时,将按照二进制进行比较。
修改已存在table的校对集:
修改无效!
8.MySQL的数据类型
列类型
第一类:数值型
整数型:系统为了节省磁盘空间,将其细分为5类。
- tinyint(常用): 迷你整型,使用1个字节存储,最多为256种;
- smallint:小整型,使用2个字节存储;
- mediumint:中整型,使用3个字节存储;
- int(常用):标准整型,使用4个字节存储;
- bigint:大整型,使用8个字节存储;
创建整型数据表:
create table my_table_int(
name1 tinyint, name2 smallint,
names int, name4 bigint
)charset utf8;
指定数据的显示宽度:当数据不够显示宽度的时候,就会自动添加前导0让数据变成相应的显示宽度。
create table my_table_int(name1 tinyint(5))charset utf8;
#这里name1 tinyint(5)的5就是指定显示宽度,不影响内部运算时的数据类型
第二类:小数型
SQL中将小数型又细分为浮点型和定点型。
- 定点型decimal:保证整数部分绝对不会被四舍五入,而小数部分有可能丢失精度。
----引用方法:decimal(M,D)
其中,M为总长度,不能超过65;D为小数部分长度,不能超过30;整数部分长度为M-D - 浮点型float、double:是一种精度型数据,因为超出范围后会自动四舍五入。
----引用方法:float(M,D)
其中,M为总长度,D为小数部分长度,整数部分长度为M-D