目录
数据库分类
关系型数据库
非关系型数据库
数据库编译安装
MySQL中的SQL语句
数据库分为关系型数据库和非关系型数据库
关系型数据库的结构是二维表格,二维表格中每一行是一个记录,每一列是一个属性;每一个记录用来描述一个对象的完整信息,每一个属性用来描述对象关系(如:一个人为对象,这个人的身高,姓名,年龄,性别等都是这个人的属性)。
优点:
1、易于维护:都是使用表结构,格式一致;
2、使用方便:SQL语言通用,可用于复杂查询;
3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点:
1、读写性能比较差,尤其是海量数据的高效率读写;
2、固定的表结构,灵活度稍欠;
3、高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
优点:
1、格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、
图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
2、速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
3、高扩展性;
4、成本低:nosql数据库部署简单,基本都是开源软件。
缺点:
1、不提供sql支持,学习和使用成本较高;
2、无事务处理;
3、数据结构相对复杂,复杂查询方面稍欠。
#安装编译环境
yum -y install gcc gcc-c++ cmake bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel
#创建mysql管理用户
useradd -M -s /sbin/nologin mysql
#提前导入mysql的压缩安装包,并切换到导入的目录,安装包已上传,可自行下载
cd /opt
#解压mysql的压缩安装包
tar zxvf mysql-boost-5.7.20.tar.gz
#切换到解压后的安装包中
cd /opt/mysql-5.7.20/
#编译mysql
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
#安装mysql
make -j2 && make install
#修改配置文件
vim /etc/my.cnf
#文件内容全删,并添加如下内容
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
#给mysql安装目录修改属主和属组
chown -R mysql:mysql /usr/local/mysql/
#给mysql配置文件修改属主和属组
chown mysql:mysql /etc/my.cnf
#修改PATH环境
echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
#重新加载
source /etc/profile
#切换到mysql启动目录下
cd /usr/local/mysql/bin/
#初始化数据库
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
#将mysql数据库服务添加到systemd中管理
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
#重新加载systemd管理
systemctl daemon-reload
#启动mysql数据库
systemctl start mysqld.service
#创建mysql远程登录用户和密码
mysqladmin -u root -p password "123123"
#远程登录mysql
mysql -u root -p
查看有哪些数据库
show databases;
创建数据库
create database 数据库名;
切换数据库
use 数据库名;
删除数据库
drop database 数据库名;
查看数据库中有哪些数据表
show tables;
创建数据表
create table 数据表名;
删除数据表
drop table 数据表名;
向数据表中插入数据
insert into 表名 values (字段1的值,字段2的值,....);
查询数据表中的数据
select 要查询的东西 from 表名 [ where 条件 ];
select * from 表名 limit n; 查询表中前多少行数据
select * from 表名 limit n,m; 查询表中第n行后连续m行数据
修改数据表中数据
update 表名 set 需要修改的字段=修改值 [ where 条件表达式 ] ;
#如果不加where子句,将修改全表
删除数据表中数据
delete from 表名 [ where 条件表达式 ] ;
#如果不加where子句,将删除全表内容
修改数据表名
alter table 旧表名 rename 新表名;
在数据表中添加字段
alter table 表名 add 字段名 字段类型;
修改数据表中的字段
alter table 表名 change 旧字段名 新字段名 新字段类型;
删除数据表中字段
alter table 表名 drop 字段名;
克隆数据表
方法一:保留数据表的结构(主键,索引,外键等属性)
create table 新表名 like 旧表名;
insert into 新表名 (select * from 旧表名);
方法二:仅克隆了数据,不保留数据表的结构
create table 新表名 select * from 旧表名;
清空数据表中的数据
方法一:一行一行删除,效率慢
delete from 表名;
方法二:直接格式化表,效率快
truncate table 表名;
创建临时表
create temporary table 表名(字段1 类型, 字段2 类型,....);
#临时表在其他窗口不存在,仅在当前窗口中,关闭窗口临时表就消失了
给数据表添加主键
方法一:新建表时添加主键
create table 表名(字段1 类型, 字段2 类型,..., primary key(字段));
方法二:新建表时添加主键
create table 表名(字段1 类型 primary key, 字段2 类型,...);
方法三:对已创建了数据表还未添加主键的表
alter table 表名 add primary key(字段);
给数据表添加外键
方法一:
create table 表名(字段1 类型, 字段2 类型,..., foreign key(字段) references 主表名(字段) );
方法二:
alter table 表名 add foreign key(字段) references 主表名(字段);
创建mysql的登录用户
create user '用户名'@'来源地址' [ identified by ‘密码’ ] ;
#如果不使用 identified by 添加密码,将创建空密码的用户,很不安全
查看当前登录的用户
select user();
重命名用户
rename user '旧用户名'@'来源地址' to '新用户名'@'来源地址';
删除用户
drop user '用户名'@'来源地址';
修改当前用户登录密码
set password=password('新密码');
修改其他用户的登录密码
set password for '用户名'@'来源地址'=password('新密码');
忘记密码数据库登录密码,如何解决?
1、在/etc/my.cnf文件中的 [mysql] 下添加语句 skip-grant-tables ,然后重启mysql服务
2、使用 mysql 命令直接登录到mysql中
3、使用 update 命令修改密码
update mysql.user set authentication_string=password('新密码') where user='需要修改密码的用户名';
4、然后再把/etc/my.cnf文件中的 [mysql] 下添加的语句 skip-grant-tables 删除掉,再重启mysql服务。
给用户授权
grant 授予的权限 on 允许操作的数据库.数据表 to '用户名'@'来源地址' [ identified by '新密码' ];
#如果加 identified by 是授予权限并修改了登录密码,在数据库5.0版本可以有如此操作,数据库8.0版本仅授权,没有授予权限并修改密码的操作
例子:
grant select on test.abc to ‘abc’@'%';
查看用户的权限
show grants for '用户名'@'来源地址';
收回授予用户的权限
revoke 要收回的权限 on 允许操作的数据库.数据表 from '用户名'@'来源地址';