目录
一、数据库的概述
-
数据库作用:数据持久化保存,高可靠,高可用,数据的快速提取。
-
数据库存储类型:关系型数据库 非关系型数据库。
1.1、关系型数据库
-
其存储结构是二维表格,反映事物及其联系的数据是以表格形式保存的
-
在每个二维表中,每一行称为一条记录,用来描述一个对象的信息,每一列称为一个字段,用来描述对象的一个属性。
-
关系型数据库:
MySQL(oracle公司),sql server(微软公司),access(微软公司),oracle,db2(IBM公司),sybase(sybase公司)
1.2、非关系型数据库
-
非关系型数据库存储方式
- 键-值方式(key–value),以键为依据存储、删、改数据
- 列存储(Column-oriented), 将相关的数据存储在列族中
- 文档的方式,数据库由-系列数据项组成,每个数据项都
- 有名称与对应的值
-
非关系型数据库(统称NOSQL):
- redis(内存数据库/缓存数据库): K-V键值对 key-value 变量名-值
- memcache (内存数据库/缓存数据库) :K-V键值对
-
非关系型数据库的优点:
- 数据库高并发读写的需求
- 对海量数据高效率存储与访问
- 数据库的高扩展性与高可用性的需求
二、mysql数据库的安装
mysql数据库的安装非常简单,这里我整理出了一份安装mysql-5.7.20的脚本。
#安装编译环境
yum install gcc gcc-c++ ncurses ncurses-devel bison cmake -y
#创建mysql系统用户且无法登陆
useradd -s /sbin/nologin mysql
#解压安装包
tar xzvf mysql-boost-5.7.20.tar -C /opt/
#移动到安装包路径下
cd /opt/mysql-5.7.20/
#编译安装
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-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
make && make install
#mysql安装目录的属组和属组修改
chown -R mysql:mysql /usr/local/mysql
#修改配置文件
vim /etc/my.cnf
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysql]
port = 3306
default-character-set=utf8
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
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
#更改配置文件的属主和属组
chown mysql:mysql /etc/my.cnf
#系统识别mysql命令,加入环境变量
echo 'PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
echo 'export PATH' >> /etc/profile
source /etc/profile
#初始化数据库
cd /usr/local/mysql/
bin/mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
#复制启动脚本使系统可以启动
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld
#开启开机自启动mysql
systemctl enable mysqld
#设置数据库管理员密码
mysqladmin -u root -p password
Enter password:
New password:
Confirm new password:
#登陆数据库
mysql -uroot -p
#给root用户设置权限
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
三、mysql的基本操作
3.1、首先启动mysql查看3306端口是否开启。
[root@localhost ~]# netstat -anpt | grep mysql
tcp6 0 0 :::3306 :::* LISTEN 1080/mysqld
3.2、进入数据库:mysql -uroot -p
[root@localhost ~]# mysql -uroot -p
Enter password: #密码
3.3、查看数据库的列表信息
mysql> show databases; #命令不区分大小写,大写可Tab键补齐
3.4、查看数据库中的数据表信息
mysql> use mysql; #use后跟库名
mysql> show tables; #查看库中的表
3.5、显示数据表的结构
describe [数据库名.]表名
例如:
describe student.stu;
或者
先切换到student库,再显示表结构。
四、SQL语句
4.1、SQL语言分类
4.4.1、SQL语言
- 是Structured Query Language的缩写,即结构化查询语言
- 是关系型数据库的标准语言
- 用于维护管理数据库,如数据查询、数据更新、访问控制、对象管理等功能
4.4.2、SQL分类
- DDL:数据定义语言
- DML:数据操纵语言
- DQL:数据查询语言
- DCL:数据控制语言
4.2、DDL语句
- DDL语句用于创建数据库对象,如库、表、索引等
1、使用DDL语句新建库、表
创建数据库
创建数据表:CREATE TABLE 表名(字段定义…)
mysql> create table 表名称(
#定义字段
#字段名、类型、是否为空;定义主键(唯一)
id int(4) not null primary key,
name char(10) not null,
address varchar(50) default 'nj');
2、使用DDL语句删除库、表
删除指定的数据表:DROP TABLE [数据库名.]表名 (若在数据库中,命令不带库名即可删除)
删除指定的数据库:DROP DATABASE 数据库名
4.3、DML语句
DML语句用于对表中的数据进行管理
包括以下操作:
- INSERT:插入新数据
- UPDATE:更新原有数据
- DELETE :删除不需要的数据
1、向数据表中插入新的数据记录
- INSERT INTO 表名(字段1,字段2, …) VALUES(字段1的值,字段2的值,…)
- INSERT INTO 表名 VALUES(字段1的值,字段2的值,…)
#第一种插入记录的方法:
insert into stu (id,name,address) values (2,'lisi','上海'),(3,'wangwu','北京');
#第二种插入记录方式:
insert into stu values (4,'yiyi','北京');
注意:如果 id 类型设定为 auto_increment ,则插入记录时不需要再写每条记录的id号,可以自动生成,但是insert 插入记录时不能用第二种方式,只能用第一种。
#decimal 指浮点类型 primary key 指主键
#auto_increment 指字阵列 varchar指可变长字符串
mysql> create tabl(id int not null primary key auto_increment,name char(20) not null,address varchar(50) not null default '南京');
2、修改、更新数据表中的数据记录
update 表名 set 字段名1=值1[,字段名2=值2] where 条件
表达式
update stu set address='温州' where id=4;
3、在数据表中删除指定的数据记录
delete from 表名 where 条件表达式
delete from stu where name='wangwu';
4.4、DQL语句
DQL是数据查询语句,只有一条: SELECT
- 用于从数据表中查找符合条件的数据记录
- 查询时可不指定条件
select 字段名1,字段名2… from 表名
select * from stu; # ’*‘ 匹配所有字段
select name from stu; # 指定name字段
- 查询时指定条件
select 字段名1,字段名2… from 表名 where 条件表达式
select * from stu where id=2; # 查询id=2 的所有字段内容
4.5、DCL语句
- 设置用户权限(用户不存在时,则新建用户)
grant 权限列表 on 数据库名表名 to '用户名'@'来源地址' identified by ‘密码';
- 查看用户的权限
show grants for 用户名@来源地址
- 撤销用户的权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'来源地址';