mysql 1
安装
可以选择mariadb,即mysql的一个分支版本(free)
查看环境当中是否拥有mysql/mariadb
rpm -qa | greo mariadb
rpm -qa | grep mysql
其中mariadb-devel为开发工具包
安装指令,以下这两项是必须安装的
yum install -y mariadb
yum install -y mariadb-server
启动
service mariadb restart 重启
service mariadb start 启动
service mariadb stop 停止
查看
ps aux | grep mysqld
mariadb启动之后的服务器进程名字叫做mysqld
第一个很明显就是刚才的grep进程
而后边发现存在两个mysqld,一个为mysqld,一个是mysqld_safe
mysqld:mysql服务端程序
mysqld_safe:mysql服务端的守护进程
从中可以得到以下信息:
①启动mariadb的时候,并不是直接启动了mysqld这个服务端程序,而是先启动了mysqld_safe程序,随后由mysqld_safe这个程序将mysqld拉起
②当mysqld程序异常崩溃或终止时,会被mysqld_safe快速重新启动
异常场景:
启动报错:
一般情况下都是/var/lib底下的mysql文件夹的内容和启动的服务端程序不匹配导致的
解决方案:
将mysql文件夹重命名掉,再启动
连接mysql服务端
Navicat
可视化的数据库连接软件
直接连接服务端
数据库的分层
连接层
1、建立连接
2、校验用户名和密码
3、校验客户端的ip地址
服务层
1、sql语句语法语义的检测
2、优化sql
3、执行sql
存储引擎
决定数据如何进行存储,如何进行获取,如何进行插入
执行sql
磁盘
存储数据
命令使用
查看数据库
show databases;
一般会有几个默认的数据库,一个mysqld服务端可以管理多个数据库
同时可以进入到/var/lib路径下的mysql文件夹中,可以看到数据库都是以文件夹的形式存在的
在文件夹下的内容是和数据表强相关的内容
切换数据库及查看数据库中的数据表
use mysql; 切换到名为mysql数据库
show tables; 查看数据库中的数据表
创建数据库
create database [数据库名称];
创建数据库表
create table [表名称](表字段1名称 表字段1类型, 表字段2名称 表字段2类型, ...);
查看表结构
desc [表名称];
可以查看表中每一列的具体信息,但是并不会查看表中的具体数据
show create table [表名称];
或
show create table [表名称]\G
ENGINE为存储引擎,决定了数据如何进行存储,一般选择InnoDB,因为支持事务
InnoDB:在数据库文件夹下,
.opt文件存储数据库的属性信息
.frm文件存储数据库的表结构,但不保存表当中的数据
数据库中的数据在ibdata1文件当中进行存储
CHARSET为字符集,决定数据库保存数据时采用什么字符集,即决定数据库能保存什么样的数据,一般选择 -utf8
插入数据
insert into [表] values(依次给每列数据,用“,”分隔); 全列插入(单行)
由于字符集是latin1的原因,显示出来的是??
insert into [数据表名] values(需要插入的一行数据一),(需要插入的一行数据二),...; 多行插入
多行插入也是全列插入
insert into [表名](列1, 列2, 列3, ...) values (数据1, 数据2, 数据3, ...); 在指定列进行插入
增加一列
alter table [表名] add [列名] [数据类型];
或是指定位置插入列
修改列数据类型
alter table [表名] modify [列名] [想要更改为的数据类型];
删除列
alter table [表名] drop [列名];
注意:如果删除了一列,那么这一列中的数据也被干掉了
修改表名字
alter table [表名] rename [to](可以要也可以不要) [新名字];
删除表
drop table [表名];
一切和删除有关的都要慎用!!
更改字符集
可以在创建数据库时添加语句来更改数据库的字符集
create database [数据库名称] charset=utf8;
这样一来这个数据库中的所有数据都是utf8了
可以看到字符集改变了,添加数据试试
或使用
alter database [数据库名称] charset=[字符集];
修改数据库字符集
alter table [数据表名称] charset=[字符集];
修改数据表字符集
设置是否区分大小写
不区分大小写
create database [数据库名称] collate utf8_general_ci;
区分大小写
create database [数据库名称] collate utf8_bin;
数据库删除
drop database [数据库名称];
备份
mysqldump -P3306 -u -root -p 密码(没有则不写) -B [数据库名] > [目标路径目标文件名].sql
如果只想备份其中的一张表
mysqldump -P3306 -u -root -p [数据库名] [表名1] [表名2] > [目标路径目标文件名].sql
如果想同时备份多个数据库
mysqldump -P3306 -u -root -p -B [数据库名1] [数据库名2] ... > [目标路径目标文件名].sql
恢复
mysql > source [目标目录目标文件].sql;
查看链接情况
show processlist
或者更直接一点
netstat -anp | grep 3306
SQL语句分类
DDL数据定义语句
用来维护存储数据的结构
create,drop,aler,...
DML数据操纵语句
用来对数据进行操作
insert,delete, update,...
其中单独分了一个DQL,数据查询语句,代表语句:select
DCL数据控制语句
负责权限管理与事务
grant,revoke,commit,...
存储引擎
MyISAM
在数据目中有三个不同的文件,分别是:
.frm 表结构
.MYD 表数据
.MYI 表索引
InnoDB
在数据库文件夹下,
.opt文件存储数据库的属性信息
.frm文件存储数据库的表结构,但不保存表当中的数据
数据库中的数据在ibdata1文件当中进行存储
表结构
Field:字段名字
Type:字段类型
Null:是否允许为空
Key:索引类型
Default:默认值
Extra:扩充
数据类型分类(大小写不敏感)
数值类型
①BIT(M):位类型。M指定位数,默认值为1,范围1-64
②TINYINT [UNSIGNED]:带符号的范围为[-128, 127],无符号范围为[0, 255],默认有符号
如果给的数据超过能表示的上限便会产生截断现象
③BOOL:使用 0 和 1 表示真和假
④SMALLINT [UNSIGNED]:带符号为[-2的15次方, 2的15次方-1],无符号为[0,2的16次方-1]
⑤INT [UNSIGNED]:带符号为[-2的31次方, 2的31次方-1],无符号为[0,2的32次方-1]
⑥BIGINT [UNSIGNED]:带符号为[-2的31次方, 2的31次方-1],无符号为[0,2的64次方-1]
⑦FLOAT [(M, D)] [UNSIGNED]:M指定显示长度,D指定小数位数,占用4字节
超过D设置的长度后超出部分会自动进行四舍五入处理
⑧DOUBLE [(M, D)] [UNSIGNED]:表示比float精度更大的小数,占用空间8字节
⑨DECIMAL [(M, D)] [UNSIGNED]:M指定显示长度,D指定小数位数
文本、二进制类型
①CHAR(size):固定长度字符串,最大255,注意单位是字符,不是字节
所占用的字节数量和字符集强相关,不管用与不用都是占用那么大的空间
②VARCHAR(SIZE):可变长度字符串,最大长度65535字节
在varchar中会在尾部用1-3个字节来描述所使用的字符长度,所以在utf8字符集下最大能有(65535-3)/3 = 21844字符
与char不同的是varchar在使用时是根据已使用的空间来计算大小的
③BLOB:二进制数据
④TEXT:大文本,不支持全文索引,不支持默认值
时间日期
DATE/DATETIME/TIMESTAMP:日期类型(yyyy-mm-dd)(yyyy-mm-dd hh:mm:ss),而timestamp为自动填入当前时间
String类型
①ENUM类型:ENUM是一个字符串对象,其值来自表创建时在列规定中显示枚举的一个列值
即列举出可能出现的情况,为单选
②SET类型:SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值,指定包括多个set成员的set列值时各
成员之间用逗号间隔开,这样set成员本身不能包含逗号
多选
查询
find_in_set(想要查询的字符串,数据表名);
若存在返回下标,不存在返回0