DBS ------- DataBase System 数据库系统
以关系(二维表)的方式的存储数据
记录 Record
字段/属性 Column
数据库, 库
约束 Constraint
域约束:数据类型约束
保证某字段的数据类型一致
外键约束:引用完整性约束(InnoDB)
一个表中某字段的数据必须在与之相关的其他表的相关联字段中存在
主键约束
某字段能惟一标识此字段所属的实体,并且不允许为空
一个表只能有一个主键
惟一键约束
某字段能惟一标识此字段所属的实体,可以为空
一个表可以有多个惟一键
检查性约束
保证某字段中不能出现违反常理的数据,例如年龄
事务 Transaction
保证数据ACID属性
数据库管理软件:
Oracle, MySQL, MariaDB(Percona), DB2, HBase, SQ512L Server(关系型数据库管理软件)
noSQL(非关系型数据库) Redis, MongoDB, Memcached
SQL语句 结构化查询语句:
DDL 数据定义语言
DML 数据操纵语言
DCL 数据控制语言
MySQL存储引擎 Storage Engine
支持插件式存储引擎
MyISAM
不支持事务,只支持表级锁
不支持外键
支持B树索引、全文FULLTEXT索引、空间索引
支持表压缩
性能好,适用于查询较多(数据仓库)的情况
InnoDB
支持事务,保证多个操作同时成功执行
支持行级锁
支持使用表空间(Table Space)
支持raw磁盘设备(无文件系统的设备)
适用于在线事务处理系统(在线交易系统OLTP)
MRG_MYISAM
将两个或两个以上的MYISAM表(表结构要一致)合并成一个表使用
CSV
使用文本文件的方式保存表
数据库移植时使用
ARCHIVE
用于数据挖掘
MEMORY
所有表存储在内存中
用于创建临时表
不支持事务、分布式事务、检查点
BLACKHOLE
MySQL主从复制架构
不建议使用混合式存储引擎,即所有对象的存储引擎要一致
MySQL安装类型: https://www.mysql.com/
rpm软件
源码编译(cmake)
通用二进制格式
安装rpm MySQL 5.7.17
- 准备工作
关闭SELinux, 防火墙,修改主机名
- 准备本地yum仓库
[root@node01 ~]# createrepo /mysql57/
[root@node01 ~]# cat /etc/yum.repos.d/centos.repo
[centos]
name=centos7u2
baseurl=ftp://172.16.8.100/centos7u2
enabled=1
gpgcheck=0
[mysql57]
name=mysql57
baseurl=file:///mysql57
enabled=1
gpgcheck=0
[root@node01 ~]# yum clean all
[root@node01 ~]# yum makecache
- 安装mysql-server
yum install -y mysql-community-server
- 启动服务
[root@node01 ~]# systemctl start mysqld
[root@node01 ~]# systemctl enable mysqld
[root@node01 ~]#
[root@node01 ~]# ss -antp | grep "mysqld"
LISTEN 0 80 :::3306 ::?? users:(("mysqld",pid=2293,fd=22))
- 获取root用户的临时密码,并修改
[root@node01 ~]# grep "password" /var/log/mysqld.log
2017-03-09T05:48:24.711787Z 1 [Note] A temporary password is generated for root@localhost: >DK+,(%2qNl&
2017-03-09T05:51:32.429509Z 3 [Note] Access denied for user ‘root‘@‘localhost‘ (using password: NO)
方法1)
mysql -u root -p
mysql> ALTER USER ‘root‘@‘localhost‘ IDENTIFIED BY ‘Www.1.com‘; >>>修改用户密码
mysql> FLUSH PRIVILEGES; >>>>刷新授权表
mysql> exit
方法2)
[root@node01 ~]# mysqladmin -u root -p password "Www.2.com"
Enter password:
基本管理指令:
[root@node01 ~]# mysql -u root -p
Enter password:
[root@node01 ~]# mysql -uroot -pWww.1.com
数据库基本管理操作:
- 查看数据库
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
- 创建数据库
CREATE DATABASE <db_name> [CHARACTER SET=<字符集> COLLATE=<排序规则>]
mysql> CREATE DATABASE game;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE DATABASE lol
-> CHARACTER SET=utf8
-> COLLATE=utf8_general_ci;
Query OK, 1 row affected (0.01 sec)
mysql>
mysql>
mysql> SHOW CREATE DATABASE lol;
+----------+--------------------------------------------------------------+
| Database | Create Database |
+----------+--------------------------------------------------------------+
| lol | CREATE DATABASE lol
/*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
1 row in set (0.00 sec)
查看MySQL支持的字符集
mysql> SHOW CHARACTER SET;
查看字符集的排序规则
mysql> SHOW COLLATION;
默认数据目录:
/var/lib/mysql
- 查看数据库的创建信息
mysql> SHOW CREATE DATABASE game;
+----------+-----------------------------------------------------------------+
| Database | Create Database |
+----------+-----------------------------------------------------------------+
| game | CREATE DATABASE game
/*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-----------------------------------------------------------------+
- 删除数据库
mysql> DROP DATABASE lol;
- 切换数据库
mysql> USE WarCraft;
Database changed
数据表基本管理操作:
- 查看表
mysql> SHOW TABLES;
- 创建表
CREATE TABLE <表名>(字段名称 数据类型 [属性], 字段名称 数据类型 [属性], ...... ) [ENGINE=<存储引擎>]
MySQL数据类型:
数值型
精确数值
TINYINT 微整型
INT 整型
SMALLINT 小整型
MEDIUMINT 中整型
BIGINT 大整型
DECIMAL(g,f) 定点数,用于财务相关计算 DECIMAL(10,6)
f:精度
近似数值
FLOAT(g,f) 单精度浮点型
DOUBLE(g,f) 双精度浮点型
字符型
定长字符
CHAR(10) 最多存储255个字符
BINARY(10) 存储字符时区分大小写
变长字符
VARCHAR(20) 最多存储65535个字符
VARBINARY(20)
TEXT 最多存储65535个字符
TINYTEXT 最多存储255个字符
MEDIUMTEXT 最多存储16777215个字符
LONGTEXT 最多存储4294967295个字符
枚举 ENUM("男","女")
集合 SET("a","b") a , b , ab, ba
日期/时间型
DATE YYYY-MM-DD
TIME HH:MM:SS
DATETIME YYYY-MM-DD HH:MM:SS
TIMESTAMP时间戳 YYYY-MM-DD HH:MM:SS
YEAR YYYY或YY
属性:
INT UNSIGNED 无符号整型
PRIMARY KEY 主键
NOT NULL 不允许为空
DEFAULT "值" 设置字段的默认值
AUTO_INCREMENT 自动增长, 必须与主键、不允许为空同时出现
例:
mysql> CREATE TABLE game_account(
-> Account_name CHAR(15) PRIMARY KEY,
-> Account_password CHAR(25) NOT NULL,
-> Account_level TINYINT UNSIGNED,
-> Account_role CHAR(10) default "Fashi");
- 查看创建表的信息
mysql> SHOW CREATE TABLE game_account\G;
*************************** 1. row ***************************
Table: game_account
Create Table: CREATE TABLE game_account
(Account_name
char(15) NOT NULL,Account_password
char(25) NOT NULL,Account_level
tinyint(3) unsigned DEFAULT NULL,Account_role
char(10) DEFAULT ‘Fashi‘,
PRIMARY KEY (Account_name
)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
例:
mysql> CREATE TABLE t1(id INT) ENGINE=MyISAM;
Query OK, 0 rows affected (0.02 sec)
- 删除表
mysql> DROP TABLE t1;
Query OK, 0 rows affected (0.00 sec)
- 查看表结构
mysql> DESC game_account;
+------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------------------+------+-----+---------+-------+
| Account_name | char(15) | NO | PRI | NULL | |
| Account_password | char(25) | NO | | NULL | |
| Account_level | tinyint(3) unsigned | YES | | NULL | |
| Account_role | char(10) | YES | | Fashi | |
+------------------+---------------------+------+-----+---------+-------+