1. 数据库介绍
- 世界万事万物都可以描述成数据,比如一个人、一辆车、一套房,都可以用一条数据来描述
- MySQL数据库是专门存储和管理数据的容器
- MySQL是一款开源、免费的关系型数据库管理系统
1) 关系型数据库的特点
- 数据以表格的形式出现
- 每行为各种记录名称
- 每列为记录名称所对应的数据域
- 许多的行和列组成一张表单
- 若干的表单组成
database
库
2. 数据库的安装
-
用MSI安装包安装
下载地址:https://www.mysql.com/downloads/-
第一步: 安装许可。双击安装文件,在如下图所示界面中勾选
I accept the license terms
,点击next
-
第二步: 选择设置类型。如下图所示,有5种设置类型:
Developer Default
:安装MySQL服务器以及开发MySQL应用所需的工具。工具包括开发和管理服务器的GUI工作台、访问操作数据的Excel插件、与Visual Studio集成开发的插件、通过NET/Java/C/C++/OBDC等访问数据的连接器、例子和教程、开发文档。Server only
:仅安装MySQL服务器,适用于部署MySQL服务器。Client only
:仅安装客户端,适用于基于已存在的MySQL服务器进行MySQL应用开发的情况。Full
:安装MySQL所有可用组件。Custom
:自定义需要安装的组件。
-
第三步: 安装。进入到安装步骤的界面,如果第二步选择的是其他类型也只是点击“next”即可进入到该步骤,点击
Execute
。如下图所示:
安装完成后点击“next”直到进入配置页面。
-
第四步:配置。进入到配置页面,如下图所示:
点击Content Type的下拉框,显示有三种类型:
Development Machine
:开发机器,MySQL
会占用最少量的内存。Server Machine
:服务器机器,几个服务器应用会运行在机器上,适用于作为网站或应用的数据库服务器,会占用中等内存。Dedicated Machine
:专用机器,机器专门用来运行MySQL
数据库服务器,会占用机器的所有可用内存。
根据自己的用途选择相应的类型配置,我这里为了后面做高并发性能测试便选择“Server Machine”类型。
选择好配置类型后进行连接配置,如下图:
常用的是
TCP/IP
连接,勾选该选项框,默认端口号是3306
,可在输入框中更改。若数据库只在本机使用,可勾选Open Firewall port for network access
来打开防火墙,若需要远程调用则不要勾选。
下面的Named Pipe
和Shared Memory
是进程间通信机制,一般不勾选。
Show Advanced Options
用于在后续步骤配置高级选项,为尽可能多的了解MySQL的可配置项,这里勾选该选项框。点击next
进入下一步。 -
第五步: 账户配置。进入到MySQL的账户和角色配置界面,如下图:
root账户拥有数据库的所有权限,在密码框输入自己设置的密码。数据库在开发和维护过程中为了安全性和便于管理会为不同的用户授予相应操作权限的账户密码,点击“Add User”按钮,在弹出的会话框中设置不同权限等级的账户,如下图所示:
Host表示能连接到该数据库的主机地址,可设置为本地(localhost/127.0.0.1)、一个外部IP(如218.17.224.228)、一个外部网段(如218.17.224.*)或者所有主机(%)。
Role表示该账户的角色,可选择的角色如下:
-
第六步: 配置
Windows Service
。将MySQL服务配置成Windows服务后,MySQL服务会自动随着Windows操作系统的启动而启动,随着操作系统的停止而停止,这也是MySQL官方文档建议的配置,界面如下图:
Windows service Name可设置为默认值,只要与其它服务不同名即可。在Windows系统中基于安全需求,MySQL服务需要在一个给定的账户下运行,选择默认的Standard System Account即可。保持默认配置后点击“next”。
- 第七步: 高级配置。因为在前面的第四步中勾选了“Show Advanced Options”选项,所以出现如下图所示的高级选项配置:
-
在这里可配置各种日志文件的存储路径,它默认存储在MySQL安装目录的data目录下面,若非必须不建议改动。Slow Query Log(慢查询日志)后面有一个Seconds配置项,默认值为10,表示一个SQL查询在经过10s后还没有查询出结果就会将此次查询记录到Slow Query Log中,方便DBA快速找到低效的操作。Bin Log可用于主从数据同步。最下面的Server Id用于Master-Slave配置。这些都将在后续课程中讲到,这里保持默认配置即可。点击“next”。
- 第八步: 服务器配置应用。经过上述配置后,一个MySQL数据库已基本配置完成。进入到这一步骤后点击“Execute”执行配置项,如下图:
等到出现如下界面表示安装成功,点击“Finish”完成。
-
用压缩包安装
下载地址:https://dev.mysql.com/downloads/mysql/
根据自己的操作系统下载对应的32位或64位的压缩包。按如下步骤操作:-
第一步: 解压缩。将压缩包解压到C:\Program Files\MySQL路径下,也可以自定义路径。我的路径为C:\Program Files\MySQL\mysql-5.7.10-winx64,如下图:
-
第二步: 配置环境变量。右键点击“计算机”,选择“属性”,依次打开“高级系统设置”->“环境变量”,在系统变量中选择“Path”项,并点击编辑,如下图:
保持原有值不变,并在末尾加上英文分号后追加C:\Program Files\MySQL\mysql-5.7.10-winx64\bin,将MySQL安装路径下的bin目录配置到Path变量中,使在命令行的任何目录下可以执行MySQL命令。
-
第三步: 修改配置。打开MySQL安装目录下面的my-default.ini文件,找到basedir和datadir属性项,去掉前面的注释符号#,修改值如下:
basedir = C:\Program Files\MySQL\mysql-5.7.10-winx64
datadir = C:\Program Files\MySQL\mysql-5.7.10-winx64\data
分别表示MySQL的安装目录和数据目录。如果在第一步中解压缩到其它的文件夹则修改对应的值。
再将该文件重命名为my.ini。如果不存在my-default.ini文件,则直接创建my.ini文件,把上面内容写进。 -
第四步: 安装。以管理员身份运行cmd,进入到MySQL的bin目录,执行初始化命令:
mysqld --initialize --user=mysql --console
该命令用来初始化数据,在5.7以前的版本是不需要执行该命令的。初始化完成后会提供一个临时的root密码,如下图红色方框,记下该密码。
再执行如下命令进行MySQL服务安装:
mysqld –install mysql
mysql为默认的服务名,可不写,若安装成功则有如下提示:
需要注意的是一定要以管理员身份运行cmd,否则会出现如下图所示提示:
-
第五步: 启动服务。在管理员cmd窗口中执行如下命令来启动MySQL服务:
net start mysql
当出现如下图所示提示时表示MySQL安装并启动成功。
MySQL5.7以前的版本在安装时不需要执行第四步中的mysqld –initialize命令,如果漏掉该命令后在此步骤会出现如下错误:
因为该版本的压缩包里面有些文件和文件夹(如data文件夹)需要在执行mysqld -initialize命令后才创建。
-
第六步: 登录。执行如下命令:
mysql -uroot -p
提示输入密码,输入第四步中记录下的密码,按回车后出现如下页面表示登录成功,并进入了MySQL命令行模式。
-
第七步: 修改密码。在MySQL命令行执行如下命令:
ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘new_password’
大家改成自己的密码,如下图所示表示修改成功:
-
3. MySQL数据类型
1) 整型
MySQL数据类型 | 含义(有符号) |
---|---|
tinyint(m) | 1个字节 范围(-128~127) |
smallint(m) | 2个字节 范围(-32768~32767) |
mediumint(m) | 3个字节 范围(-8388608~8388607) |
int(m) | 4个字节 范围(-2147483648~2147483647) |
bigint(m) | 8个字节 范围(±9.22*10的18次方) |
取值范围如果加了unsigned
,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)
2) 浮点数(float和double)
MySQL数据类型 | 含义 |
---|---|
float(m,d) | 单精度浮点型 8位精度(4字节) m总个数,d小数位 |
double(m,d) | 双精度浮点型 16位精度(8字节) m总个数,d小数位 |
设一个字段定义位float(5,3),如果输入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位
3) 定点数
浮点型在数据库中存放的是近似值,而定点型在数据库中存放的是精确值
decimal(m,d) 参数m<65是总个数,d<30且d<m是小数位
4) 字符串
MySQL数据类型 | 含义 |
---|---|
char(n) | 固定长度, 最多255个字符 |
varchar(n) | 固定长度,最多65535个字符 |
tinytext | 可变长度,最多255个字符 |
text | 可变长度,最多65535个字符 |
mediumtext | 可变长度,最多2的24次方-1个字符 |
longtext | 可变长度,最多2的32次方-1个字符 |
char和varchar:
1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。
3.char类型的字符串检索速度要比varchar类型的快。
varchar和text:
1.varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),text是实际字符数+2个字节。
2.text类型不能有默认值。
3.varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text,在都创建索引的情况下,text的索引似乎不起作用。
5) 日期时间类型
MySQL数据类型 | 含义 |
---|---|
date | 日期’2018-12-2’ |
time | 时间’12:25:36’ |
datetime | 日期时间’2018-12-2 22:06-50’ |
timestamp | 自动存储记录修改时间 |
若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。
6) 其他数据类型的属性
MySQL数据类型 | 含义 |
---|---|
NUll | 数据列可允许NULL值 |
NOT NULL | 数据列不允许NULL值 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键 |
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
CHARACTER SET name | 指定一个字符集 |
4. 操作数据库
- DDL语句,是对数据库内部对象进行创建、删除、修改等,涉及表的定义和结构的修改
-
创建数据库:
create database dbname
; -
查询所有数据库:
show databases
; -
使用数据库:
use dbname
; -
删除数据库:
drop database dbname
; -
创建表,创建一个完整的表,如下
create table stu( id int(10) unsigned not null auto_increment primary key comment '主键', name varchar(255) comment '姓名', sex tinyint(1) not null default 0 comment '性别:0表示男,1表示女', age int(3) not null comment '年龄', grade char(5) not null comment '班级' )engine=MyIsam default charset=utf8;
-
查看表的定义
desc tablename
;mysql> desc stu; +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(255) | YES | | NULL | | | sex | tinyint(1) | NO | | 0 | | | age | int(3) | NO | | NULL | | | grade | char(5) | NO | | NULL | | +-------+------------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec)
获得更全面表定义信息:
show create table stu \G
mysql> show create table stu \G; *************************** 1. row *************************** Table: stu Create Table: CREATE TABLE `stu` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(255) DEFAULT NULL COMMENT '姓名', `sex` tinyint(1) NOT NULL DEFAULT '0' COMMENT '性别:0表示男,1表示女', `age` int(3) NOT NULL COMMENT '年龄', `grade` char(5) NOT NULL COMMENT '班级', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 1 row in set (0.02 sec)
-
删除表命令:
drop table tablename
; -
修改表。表结构的更改都是使用
alter table
语句-
修改表
stu
的name
字段定义,将varchar(255)
改成varchar(30)
:mysql> alter table stu modify name varchar(30); -- Query OK, 0 rows affected (0.04 sec) -- Records: 0 Duplicates: 0 Warnings: 0
-
增加表字段的操作,在表
stu
中添加字段adress
,类型为varchar(128)
:mysql> alter table stu add column adress varchar(128); -- Query OK, 0 rows affected (0.01 sec) -- Records: 0 Duplicates: 0 Warnings: 0
-
删除表字段的操作,在表
stu
中删除字段adress
,age
,grade
:mysql> alter table stu drop column adress; -- Query OK, 0 rows affected (0.01 sec) -- Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table stu drop column age; -- Query OK, 0 rows affected (0.01 sec) -- Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table stu drop column grade; -- Query OK, 0 rows affected (0.01 sec) -- Records: 0 Duplicates: 0 Warnings: 0
-
字段改名,将
sex
修改成sex1
,同时修改字段类型为tinyint(2)
:mysql> alter table stu change column sex sex1 tinyint(2); -- Query OK, 0 rows affected (0.03 sec) -- Records: 0 Duplicates: 0 Warnings: 0
-
字段增加或者修改语法(
add/change/modify
)中,都有一个可选项first|after column_name
来修改字段的位置mysql> alter table stu add column age int(3) after name; -- Query OK, 0 rows affected (0.01 sec) -- Records: 0 Duplicates: 0 Warnings: 0 mysql> desc stu; +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(30) | YES | | NULL | | | age | int(3) | YES | | NULL | | | sex1 | tinyint(2) | YES | | NULL | | +-------+------------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec) mysql> alter table stu change column sex1 sex tinyint(1) after name; -- Query OK, 0 rows affected (0.01 sec) -- Records: 0 Duplicates: 0 Warnings: 0 mysql> desc stu; +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(30) | YES | | NULL | | | sex | tinyint(1) | YES | | NULL | | | age | int(3) | YES | | NULL | | +-------+------------------+------+-----+---------+----------------+ 4 rows in set (0.00 sec)
-
-
更改表名
mysql> alter table stu rename student; -- Query OK, 0 rows affected (0.00 sec)
-