什么是数据库?php
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。html
每一个数据库都有一个或多个不一样的 API 用于建立,访问,管理,搜索和复制所保存的数据。node
咱们也能够将数据存储在文件中,可是在文件中读写数据速度相对较慢。mysql
因此,如今咱们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。linux
RDBMS 即关系数据库管理系统(Relational Database Management System)的特色:web
RDBMS 术语sql
在咱们开始学习MySQL 数据库前,让咱们先了解下RDBMS的一些术语:数据库
MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"能够理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的几个表格:编程
MySQL数据库windows
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不一样的表中,而不是将全部数据放在一个大仓库内,这样就增长了速度并提升了灵活性。
全部平台的 MySQL 下载地址为: MySQL 下载 。 挑选你须要的 MySQL Community Server 版本及对应的平台。
注意:安装过程咱们须要经过开启管理员权限来安装,不然会因为权限不足致使没法安装。
Linux/UNIX 上安装 MySQL
Linux平台上推荐使用RPM包来安装Mysql,MySQL AB提供了如下RPM包的下载地址:
# 安装前,咱们能够检测系统是否自带安装 MySQL: rpm -qa | grep mysql
# 若是你系统有安装,那能够选择进行卸载: rpm -e mysql # 普通删除模式 rpm -e --nodeps mysql # 强力删除模式,若是使用上面命令删除时,提示有依赖的其它文件,则用该命令能够对其进行强力删除
安装 MySQL:
接下来咱们在 Centos7 系统下使用 yum 命令安装 MySQL,须要注意的是 CentOS 7 版本中 MySQL数据库已从默认的程序列表中移除,因此在安装前咱们须要先去官网下载 Yum 资源包,下载地址为:https://dev.mysql.com/downloads/repo/yum/
# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm # rpm -ivh mysql-community-release-el7-5.noarch.rpm # yum update # yum install mysql-server
# 权限设置: chown mysql:mysql -R /var/lib/mysql
# 初始化 MySQL: mysqld --initialize
# 启动 MySQL: systemctl start mysqld # 查看 MySQL 运行状态: systemctl status mysqld
注意:若是咱们是第一次启动 mysql 服务,mysql 服务器首先会进行初始化的配置。
此外,你也可使用 MariaDB 代替,MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 受权许可。开发这个分支的缘由之一是:甲骨文公司收购了 MySQL 后,有将 MySQL 闭源的潜在风险,所以社区采用分支的方式来避开这个风险。
# MariaDB的目的是彻底兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。 yum install mariadb-server mariadb # mariadb数据库的相关命令是: systemctl start mariadb #启动MariaDB systemctl stop mariadb #中止MariaDB systemctl restart mariadb #重启MariaDB systemctl enable mariadb #设置开机启动
验证 MySQL 安装
在成功安装 MySQL 后,一些基础表会表初始化,在服务器启动后,你能够经过简单的测试来验证 MySQL 是否工做正常。
使用 mysqladmin 工具来获取服务器状态:
使用 mysqladmin 命令来检查服务器的版本, 在 linux 上该二进制文件位于 /usr/bin 目录,在 Windows 上该二进制文件位于C:\mysql\bin 。
[root@host]# mysqladmin --version
linux上该命令将输出如下结果,该结果基于你的系统信息:
mysqladmin Ver 8.23 Distrib 5.0.9-0, for redhat-linux-gnu on i386
若是以上命令执行后未输出任何信息,说明你的Mysql未安装成功。
使用 MySQL Client(Mysql客户端) 执行简单的SQL命令
你能够在 MySQL Client(Mysql客户端) 使用 mysql 命令链接到 MySQL 服务器上,默认状况下 MySQL 服务器的登陆密码为空,因此本实例不须要输入密码。
命令以下:
[root@host]# mysql
以上命令执行后会输出 mysql>提示符,这说明你已经成功链接到Mysql服务器上,你能够在 mysql> 提示符执行SQL命令:
mysql> SHOW DATABASES; +----------+ | Database | +----------+ | mysql | | test | +----------+ 2 rows in set (0.13 sec)
Mysql安装后须要作的
Mysql安装成功后,默认的root用户密码为空,你可使用如下命令来建立root用户的密码:
[root@host]# mysqladmin -u root password "new_password";
如今你能够经过如下命令来链接到Mysql服务器:
[root@host]# mysql -u root -p Enter password:*******
注意:在输入密码时,密码是不会显示了,你正确输入便可。
Windows 上安装 MySQL
Windows 上安装 MySQL 相对来讲会较为简单,最新版本能够在 MySQL 下载 中下载中查看(更详细安装:Windows 上安装 MySQL)。
点击 Download 按钮进入下载页面,点击下图中的 No thanks, just start my download. 就可当即下载:
下载完后,咱们将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 C:\web\mysql-8.0.11 下。
接下来咱们须要配置下 MySQL 的配置文件
打开刚刚解压的文件夹 C:\web\mysql-8.0.11 ,在该文件夹下建立 my.ini 配置文件,编辑 my.ini 配置如下基本信息:
[client] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] # 设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=C:\\web\\mysql-8.0.11 # 设置 mysql数据库的数据的存放目录,MySQL 8+ 不须要如下配置,系统本身生成便可,不然有可能报错 # datadir=C:\\web\\sqldata # 容许最大链接数 max_connections=20 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 建立新表时将使用的默认存储引擎 default-storage-engine=INNODB
接下来咱们来启动下 MySQL 数据库:
cd C:\web\mysql-8.0.11\bin
mysqld --initialize --console
... 2018-04-20T02:35:05.464644Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: APWCY5ws&hjQ ...
APWCY5ws&hjQ 就是初始密码,后续登陆须要用到,你也能够在登录后修改密码。
mysqld install
net start mysql
# 注意: 在 5.7 须要初始化 data 目录: cd C:\web\mysql-8.0.11\bin mysqld --initialize-insecure # 初始化后再 # 运行 net start mysql 便可启动 mysql。
登陆 MySQL
当 MySQL 服务已经运行时, 咱们能够经过 MySQL 自带的客户端工具登陆到 MySQL 数据库中, 首先打开命令提示符, 输入如下格式的命名:
mysql -h 主机名 -u 用户名 -p
mysql -u root -p
Enter password:
若密码存在, 输入密码登陆, 不存在则直接按回车登陆。登陆成功后你将会看到 Welcome to the MySQL monitor... 的提示语。
而后命令提示符会一直以 mysq> 加一个闪烁的光标等待命令的输入, 输入 exit 或 quit 退出登陆。
Windows 系统下
在 Windows 系统下,打开命令窗口(cmd),进入 MySQL 安装目录的 bin 目录。
启动:
cd c:/mysql/bin
mysqld --console
关闭:
cd c:/mysql/bin
mysqladmin -uroot shutdown
Linux 系统下
首先,咱们须要经过如下命令来检查MySQL服务器是否启动:
ps -ef | grep mysqld
若是MySql已经启动,以上命令将输出mysql进程列表, 若是mysql未启动,你可使用如下命令来启动mysql服务器:
root@host# cd /usr/bin ./mysqld_safe &
若是你想关闭目前运行的 MySQL 服务器, 你能够执行如下命令:
root@host# cd /usr/bin ./mysqladmin -u root -p shutdown Enter password: ******
若是你须要添加 MySQL 用户,你只须要在 mysql 数据库中的 user 表添加新用户便可。
如下为添加用户的的实例,用户名为guest,密码为guest123,并受权用户可进行 SELECT, INSERT 和 UPDATE操做权限:
root@host# mysql -u root -p Enter password:******* mysql> use mysql; Database changed mysql> INSERT INTO user (host, user, password, select_priv, insert_priv, update_priv) VALUES ('localhost', 'guest', PASSWORD('guest123'), 'Y', 'Y', 'Y'); Query OK, 1 row affected (0.20 sec) mysql> FLUSH PRIVILEGES; Query OK, 1 row affected (0.01 sec) mysql> SELECT host, user, password FROM user WHERE user = 'guest'; +-----------+---------+------------------+ | host | user | password | +-----------+---------+------------------+ | localhost | guest | 6f8c114b58f2ce9e | +-----------+---------+------------------+ 1 row in set (0.00 sec)
在添加用户时,请注意使用MySQL提供的 PASSWORD() 函数来对密码进行加密。 你能够在以上实例看到用户密码加密后为: 6f8c114b58f2ce9e.
注意:在 MySQL5.7 中 user 表的 password 已换成了authentication_string。
注意:password() 加密函数已经在 8.0.11 中移除了,可使用 MD5() 函数代替。
注意:在注意须要执行 FLUSH PRIVILEGES 语句。 这个命令执行后会从新载入受权表。
若是你不使用该命令,你就没法使用新建立的用户来链接mysql服务器,除非你重启mysql服务器。
你能够在建立用户时,为用户指定权限,在对应的权限列中,在插入语句中设置为 'Y' 便可
Select_priv
Insert_priv
Update_priv
Delete_priv
Create_priv
Drop_priv
Reload_priv
Shutdown_priv
Process_priv
File_priv
Grant_priv
References_priv
Index_priv
Alter_priv
另一种添加用户的方法为经过SQL的 GRANT 命令,如下命令会给指定数据库TUTORIALS添加用户 zara ,密码为 zara123 。
root@host# mysql -u root -p Enter password:******* mysql> use mysql; Database changed mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP -> ON TUTORIALS.* -> TO 'zara'@'localhost' -> IDENTIFIED BY 'zara123';
以上命令会在mysql数据库中的user表建立一条用户信息记录。
注意: MySQL 的SQL语句以分号 (;) 做为结束标识。
/etc/my.cnf 文件配置
通常状况下,你不须要修改该配置文件,该文件默认配置以下:
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock [mysql.server] user=mysql basedir=/var/lib [safe_mysqld] err-log=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
在配置文件中,你能够指定不一样的错误日志文件存放的目录,通常你不须要改动这些配置。
如下列出了使用Mysql数据库过程当中经常使用的命令:
mysql> use RUNOOB;
Database changed
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | RUNOOB | | cdcol | | mysql | | onethink | | performance_schema | | phpmyadmin | | test | | wecenter | | wordpress | +--------------------+ 10 rows in set (0.02 sec)
mysql> use RUNOOB; Database changed mysql> SHOW TABLES; +------------------+ | Tables_in_runoob | +------------------+ | employee_tbl | | runoob_tbl | | tcount_tbl | +------------------+ 3 rows in set (0.00 sec)
mysql> SHOW COLUMNS FROM runoob_tbl; +-----------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+---------+-------+ | runoob_id | int(11) | NO | PRI | NULL | | | runoob_title | varchar(255) | YES | | NULL | | | runoob_author | varchar(255) | YES | | NULL | | | submission_date | date | YES | | NULL | | +-----------------+--------------+------+-----+---------+-------+ 4 rows in set (0.01 sec)
mysql> SHOW INDEX FROM runoob_tbl; +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | runoob_tbl | 0 | PRIMARY | 1 | runoob_id | A | 2 | NULL | NULL | | BTREE | | | +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 1 row in set (0.00 sec)
mysql> SHOW TABLE STATUS FROM RUNOOB; # 显示数据库 RUNOOB 中全部表的信息 mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'; # 表名以runoob开头的表的信息 mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'\G; # 加上 \G,查询结果按列打印
mysqli_function(value,value,...);
mysqli_connect($connect); mysqli_query($connect,"SQL 语句"); mysqli_fetch_array() mysqli_close()
# 实例 (MySQLi) <?php $retval = mysqli_function(value, [value,...]); if( !$retval ) { die ( "相关错误信息" ); } # 其余 MySQL 或 PHP 语句 ?>
使用mysql二进制方式链接
您可使用MySQL二进制方式进入到mysql命令提示符下来链接MySQL数据库。
实例
[root@host]# mysql -u root -p Enter password:******
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2854760 to server version: 5.0.9 Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> exit
Bye
使用 PHP 脚本链接 MySQL
语法
mysqli_connect(host,username,password,dbname,port,socket);
参数说明:
参数 描述 host # 可选。规定主机名或 IP 地址。 username # 可选。规定 MySQL 用户名。 password # 可选。规定 MySQL 密码。 dbname # 可选。规定默认使用的数据库。 port # 可选。规定尝试链接到 MySQL 服务器的端口号。 socket # 可选。规定 socket 或要使用的已命名 pipe。
语法
bool mysqli_close ( mysqli $link )
实例
你能够尝试如下实例来链接到你的 MySQL 服务器:
# 链接 MySQL <?php $dbhost = 'localhost'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = '123456'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' . mysqli_error());
}
echo '数据库链接成功!';
mysqli_close($conn);
?>
CREATE DATABASE 数据库名;
[root@host]# mysql -u root -p Enter password:****** # 登陆后进入终端 mysql> create DATABASE RUNOOB;
使用 mysqladmin 建立数据库
[root@host]# mysqladmin -u root -p create RUNOOB Enter password:******
以上命令执行成功后会建立 MySQL 数据库 RUNOOB。
使用 PHP脚本 建立数据库
语法
mysqli_query(connection,query,resultmode);
参数 描述 connection # 必需。规定要使用的 MySQL 链接。 query # 必需,规定查询字符串。 resultmode
# 可选。一个常量。能够是下列值中的任意一个: MYSQLI_USE_RESULT(若是须要检索大量数据,请使用这个) MYSQLI_STORE_RESULT(默认)
实例
如下实例演示了使用PHP来建立一个数据库:
# 建立数据库 <?php $dbhost = 'localhost'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = '123456'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('链接错误: ' . mysqli_error($conn)); } echo '链接成功<br />'; $sql = 'CREATE DATABASE RUNOOB'; $retval = mysqli_query($conn,$sql ); if(! $retval ) { die('建立数据库失败: ' . mysqli_error($conn)); } echo "数据库 RUNOOB 建立成功\n"; mysqli_close($conn); ?>
执行成功后,返回以下结果:
若是数据库已存在,执行后,返回以下结果:
drop 命令删除数据库
drop 命令格式:
drop database <数据库名>;
例如删除名为 RUNOOB 的数据库:
mysql> drop database RUNOOB;
使用 mysqladmin 删除数据库
[root@host]# mysqladmin -u root -p drop RUNOOB Enter password:******
Dropping the database is potentially a very bad thing to do. Any data stored in the database will be destroyed. Do you really want to drop the 'RUNOOB' database [y/N] y Database "RUNOOB" dropped
使用PHP脚本删除数据库
语法
mysqli_query(connection,query,resultmode);
参数 描述 connection # 必需。规定要使用的 MySQL 链接。 query # 必需,规定查询字符串。 resultmode # 可选。一个常量。能够是下列值中的任意一个: MYSQLI_USE_RESULT(若是须要检索大量数据,请使用这个) MYSQLI_STORE_RESULT(默认)
实例
# 删除数据库 <?php $dbhost = 'localhost:3306'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = '123456'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('链接失败: ' . mysqli_error($conn)); } echo '链接成功<br />'; $sql = 'DROP DATABASE RUNOOB'; $retval = mysqli_query( $conn, $sql ); if(! $retval ) { die('删除数据库失败: ' . mysqli_error($conn)); } echo "数据库 RUNOOB 删除成功\n"; mysqli_close($conn); ?>
执行成功后,数结果为:
注意: 在使用PHP脚本删除数据库时,不会出现确认是否删除信息,会直接删除指定数据库,因此你在删除数据库时要特别当心。
从命令提示窗口中选择MySQL数据库
实例
如下实例选取了数据库 RUNOOB:
[root@host]# mysql -u root -p Enter password:****** mysql> use RUNOOB; Database changed mysql>
使用PHP脚本选择MySQL数据库
语法
mysqli_select_db(connection,dbname);
参数 描述 connection # 必需。规定要使用的 MySQL 链接。 dbname # 必需,规定要使用的默认数据库。
实例
# 选择数据库 <?php $dbhost = 'localhost:3306'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = '123456'; // mysql用户名密码 $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('链接失败: ' . mysqli_error($conn)); } echo '链接成功'; mysqli_select_db($conn, 'RUNOOB' ); mysqli_close($conn); ?>
数值类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 字节 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,若是M>D,为M+2不然为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
日期和时间类型
类型 | 大小 (字节) |
范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 |
YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
以上内容是对 MySQL的数据库简单介绍和怎么操做,后续还会对表的操做进行更新,详细请听下回分解