一.数据库的基本概念
数据库的作用
- 让数据可以持久化保存、具有高可靠性、高可用性、数据能够快速提取
- 数据库的存储类型
- 关系型数据库:存储的数值,字符,字符串,布尔值。mysql(oracle)、sql server(微软)、oracle、db2(IBM)、access(微软office)、sybase
- 非关系数据库:存储的是图片,视频,语音。NOSQL(统称)、MongoDB、redis(内存数据库/缓存数据库)、memcache(内存数据库/缓存数据库)
数据库的基本概念
- 数据:描述事物的符号记录,包括数字、文字、图形、图像、声音、档案记录等,以“记录”形式按统一的格式进行存储
- 数据表:将不同的记录组织在一起,就形成了“表”,是用来存储具体数据的
- 数据库:就是表的集合,存储数据的仓库,以一定的组织方式存储的相互有关的数据
二.非关系型数据库
非关系型数据库的介绍
- 非关系数据库也被称为NoSQL,存储数据不以关系模型为依据,不需要固定的表格式,非关系型数据库作为关系数据库的一个补充,在日益快速发展的网站时代,发挥着高效率与高性能。
- 非关系数据库的优点:数据库高并发读写的需求;对海量数据高效率存储与访问;数据库的高扩展性与高可用性的需求
- 非关系型数据库的存储方式
- 键-值方式,以键为依据存储、删、改数据。
- 列存储,将相关的数据存储在列族中
- 文档的方式,数据库由一系列数据项组成,每个数据项都有名称与对应的值
- 图形方式,实体为顶点,关系为边,数据保存为一个图形
三.MySQL数据库搭建
- MySQL是Oracle旗下一款开源关系型数据库,遵守GPL协议,可以免费使用与修改
- 具有以下特点:性能卓越、服务稳定、开源、无版权限制、成本低、多线程、多用户、基于C/S架构、安全可靠
- 分为MySQL商业版和社区版
安装MySQL-5.6版本的具体操作
//安装环境依赖包
yum install -y ncurses-devel autoconf cmake gcc gcc-c++
//解压缩包
tar xzvf mysql-5.6.26.tar.gz
cd mysql-5.6.26
//配置过程
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ //定义安装目录
-DDEFAULT_CHARSET=utf8 \ //安装中文识别的字符集
-DDEFAULT_COLLATION=utf8_general_ci \ //安装中文识别的字符集
-DEXTRA_CHARSETS=all \
-DSYSCONFIDIR=/etc \ //定义配置文件安装目录
-DMYSQL_DATADIR=/home/mysql/ \ //数据存放位置目录
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock //连接数据库文件
//安装与编译
make && make install
//覆盖原有的主配置文件
cp support-files/my-default.cnf /etc/my.cnf
//复制一份启动脚本文件到service中
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld //添加权限
chkconfig --add /etc/init.d/mysqld //添加,可使用service管理数据库
chkconfig mysqld --level 35 on //添加,开机自启动
//设置环境变量,是系统识别mysql数据库内部命令
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
echo $PATH
//创建管理用户
useradd -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql/
//初始化数据库
/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql
//建立软连接文件
ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock
//指向路径
vim /etc/init.d/mysqld
basedir=/usr/local/mysql //数据库目录
datadir=/home/mysql //数据存放目录
//开启服务
service mysqld start
netstat -anpt | grep 3306
//添加账户,进入数据库
mysqladmin -u root -p password "abc123" //给root账号设置密码
mysql -u root -p
四.数据库的基本命令操作
查看数据库列表的信息
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.01 sec)
mysql>
查看数据库中的数据表的信息
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
28 rows in set (0.00 sec)
五.SQL基本命令
- SQL语言,是结构化查询语言,在关系型数据库中充当标准语言,用于维护管理数据库,如数据的增删查改
- SQL分类:DDL:数据定义语言;DML:数据操纵语言;DQL:数据查询语言;DCL:数据控制语言
DDL,数据定义语言
- 创建数据库,create database 数据库名
mysql> create database name;
Query OK, 1 row affected (0.00 sec)
- 创建数据表,create table 表名
mysql> create table info ( //创建表
-> id int(4) not null,
-> name char(10) not null,
-> score decimal,
-> primary key (id)); //定义主键
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| info |
+----------------+
1 row in set (0.00 sec)
- 查看表的结构
mysql> describe info;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id | int(4) | NO | PRI | NULL | |
| name | char(10) | NO | | NULL | |
| score | decimal(10,0) | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
- 删除库与表
//删除表
mysql>drop table school.student;
//删除库
mysql>drop database school;
DML:数据操纵语言
- 使用insert ,插入新的数据
- insert into student(id,name,age) values(“1001”,“yun”,“90”)
insert info (id,name,score) values (1,'yun',90);
Query OK, 1 row affected (0.00 sec)
mysql> select * from info;
+----+------+-------+
| id | name | score |
+----+------+-------+
| 1 | yun | 90 |
+----+------+-------+
1 row in set (0.00 sec)
mysql>
- 使用update ,替换原有数据
- update 数据库名.表名 set 字段1=值1where 条件表达式
mysql> select * from info;
+----+-------+-------+
| id | name | score |
+----+-------+-------+
| 1 | yun | 90 |
| 2 | pan | 88 |
| 3 | zhang | 87 |
+----+-------+-------+
3 rows in set (0.00 sec)
mysql> update info set name='qi' where id=1 and name='yun';
Query OK, 1 row affected (0.00 sec)
mysql> select * from info
-> ;
+----+-------+-------+
| id | name | score |
+----+-------+-------+
| 1 | qi | 90 |
| 2 | pan | 88 |
| 3 | zhang | 87 |
+----+-------+-------+
3 rows in set (0.00 sec)
- 使用delete ,删除指定的数据
- delete from 表名 where 条件表达式
mysql> delete from info where id=3;
Query OK, 1 row affected (0.01 sec)
mysql> select * from info;
+----+------+-------+
| id | name | score |
+----+------+-------+
| 1 | qi | 90 |
| 2 | pan | 88 |
+----+------+-------+
2 rows in set (0.00 sec)
DQL:数据查询语言
- select语句,用于从指定的表中查询符合条件的数据记录
- select 字段1,字段2,... from 表名 where 条件表达式
- 表示所有字段时可以用 * 表示
mysql> select id,name from info where id=1;
+----+------+
| id | name |
+----+------+
| 1 | qi |
+----+------+
1 row in set (0.00 sec)
DCL:数据控制语言
- 设置用户权限(用户不存在时,则新建用户)
- grant 权限列表 on 数据库名 表名 to 用户名@来源地址 [ identified by ‘密码’]
查看用户的权限
show grants for 用户名@来源地址
撤销用户的权限
revoke 权限列表 on 数据库名.表名 from 用户名@来源地址