Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
什么是数据库?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,
每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
-
1.数据以表格的形式出现
-
2.每行为各种记录名称
-
3.每列为记录名称所对应的数据域
-
4.许多的行和列组成一张表单
-
5.若干的表单组成database
RDBMS 术语
在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:
-
数据库: 数据库是一些关联表的集合。.
-
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
-
列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
-
行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
-
冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
-
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
-
外键:外键用于关联两个表。
-
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
-
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
-
参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
Mysql数据库
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
-
Mysql是开源的,所以你不需要支付额外的费用。
-
Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
-
MySQL使用标准的SQL数据语言形式。
-
Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
-
Mysql对PHP有很好的支持,PHP是目前最流行的Web开发语言。
-
MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
-
Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。
Mysql下载地址为: MySQL
下载
-
MySQL - MySQL服务器。你需要该选项,除非你只想连接运行在另一台机器上的MySQL服务器。
-
MySQL-client - MySQL 客户端程序,用于连接并操作Mysql服务器。
-
MySQL-devel - 库和包含文件,如果你想要编译其它MySQL客户端,例如Perl模块,则需要安装该RPM包。
-
MySQL-shared - 该软件包包含某些语言和应用程序需要动态装载的共享库(libmysqlclient.so*),使用MySQL。
-
MySQL-bench - MySQL数据库服务器的基准和性能测试工具。
PHP提供了多种方式来访问和操作Mysql数据库记录。PHP Mysqli函数格式如下:
mysqli_function(value,value,...);
以上格式中 function部分描述了mysql函数的功能,如
mysqli_connect($connect);
mysqli_query($connect,"SQL 语句");
mysqli_fetch_array()
mysqli_close()
以下实例展示了PHP调用mysql函数的语法:
实例 (MySQLi)
<?php$retval
= mysqli_function(value,
[value,...]);if(
!$retval
){
die
(
"相关错误信息"
);}//
其他 MySQL 或 PHP 语句?>
1.创建一个 exehack 的数据库(举例)
|
mysql -uroot –p # 进入数据库控制台
|
|
|
Enter
password:
#输入数据库的 root 密码,默认不显示密码
|
|
MySQL [(none)]> create database exehacknet; #创建一个exehack的数据库 特别注意有分号
|
|
|
MySQL
[(none)]>
show
databases;
#查看数据库,除 exehacknet 数据库,
|
|
MySQL [(none)]> exit; #退出数据库控制台,特别注意有分号
|
一般情况下刚安装好的数据库后不要删除其他数据库 一般情况下有3 个系统默认库,不能删除

|
|
MySQL
[(none)]>
drop
database
exehack;
#删除 exehack 数据库
|
PS:mysql执行命令,建议手敲,复制命令有可能会不能识别,容易出错!
2.创建数据库用户
为了安全我们通常给每一个网站程序建立唯一的数据库连接帐号(帐号名不能为root)
如:添加一个用户名为 exehack,密码为 123456,授权为本机 localhost 对exehack 数据库所有权限,命令如下:
|
# mysql -uroot –p
MySQL [(none)]> grant all privileges on exehacknet.* to exehack@'localhost'identified by '123456'; #授权语句,特别注意有分号
MySQL [(none)]> flush privileges; #权限立即生效
MySQL [(none)]> exit; #退出数据库控制台,特别注意有分号
|
3.配置MySQL 远程连接
为了安全考虑,exehack 仅允许云主机本机(localhost)连接数据库,如果需要远程连接数据库,需做如下更改:
|
|
MySQL
[(none)]>
grant
all
privileges
on
exehacknet.*
to
exehack@'%'identified
by
'123456';
#授权语句,特别注意有分号
|
然后打开打开 iptables 3306 端口
|
# iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 3306-j ACCEPT -j ACCEPT
# service iptables save #保存 iptables 规则
|
4.修改一个数据库的密码
|
|
mysql>
set
password
for
用户名@localhost
=
password('新密码');
|
|
MySQL [(none)]> set password for root@localhost = password('123456');
|
上面例子将用户root的密码更改为123456,提示如下图所示即成功修改

5.导出整个数据库
|
|
mysqldump
-u
用户名
-p
--default-character-set=latin1
数据库名
>
导出的文件名(数据库默认编码是latin1)
mysqldump
-u
wcnc
-p
smgp_apps_wcnc
>
wcnc.sql
|
6..导出一个表
|
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
|
7.导出一个数据库结构
|
|
mysqldump
-u
wcnc
-p
-d
–add-drop-table
smgp_apps_wcnc
>d:wcnc_db.sql
#自定义导出路径及文件名
|
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table
8.导入数据库
A:常用source 命令
|
进入mysql数据库控制台,
如mysql -u root -p
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source wcnc_db.sql
|
B:使用mysqldump命令
|
|
mysqldump
-u
username
-p
dbname
<
filename.sql
|
C:使用mysql命令
|
|
mysql
-u
username
-p
-D
dbname
<
filename.sql
|
以下转载自http://blog.csdn.net/alex_zrz/article/details/78904659
创表、索引
INDEX普通索引:一个表中可以有多个INDEX字段,字段值可以重复,可赋予null值,经常用来查询条件的字段设置INDEX字段
UNIQUE唯一索引:一个表中可以有多UNIQUE字段,对应的字段不可重复,当将其字段值修改为不允许为NULL,则此字段限制与主键相同
primary key主键:对应的字段值不逊于有重复,且不允许赋予NULL,如需多个字段都作为主键,称为复合主键,必须一起创建,通常与AUTO_INCREMENT(自动+1,常用于ID号)连用.
foreign key外键:让当前的字段值在另外一个表中字段值的范围内选择,存储引擎必须是INNODB,字段类型要一样,被参照字段必须是索引类型的一种(primary key)
创表时增加索引:
create table 表名(
字段名1 字段类型(宽度) 约束条件,
字段名2 字段类型(宽度) 约束条件,
.. ..
index(字段名)
#unique(字段名)
#primary key(字段名)
#foreign key(表A的字段名(表A的主键))
references 表B(字段名)
on update cascade
on delete cascade
);
创表后增加索引:
create index 索引名 on 表名(字段名);
create unique index 索引名 on 表名(字段名);
alter table 表名 add primary key(字段名);
alter table 表名 add foreign key 表A(字段名) references 表B(字段名) on update cascade on delete cascade;
删除指定表的索引字段
drop index 索引名 on 表名;(删除unique一样)
alter table 表名 drop primary key;(如有自增属性,必须先去掉)
alter table 表名 drop forreign key 约束条件;(约束条件可通过show create table 表名\G;查看)
############################################################################################################
存储引擎:
mysql>show engines #查看支持的存储引擎
mysql>show variables like "default_storage_engine"; #查看当前的存储引擎
mysql>set default_storage_engine=新引擎名; #修改存储引擎
默认存储引擎可通过修改/etc/my.cnf配置文件实现
############################################################################################################
数据导入/导出、表插入/更新/删除、查询及匹配条件
导入
mysql>show variables like "%secure%"; #查看默认安全文件位置
mysql>load data infile '文件路径' into table 表名 fields terminated by "分隔符" lines terminated by '\n换行符';
导出查询结果
mysql>select * from 库.表 where 条件 into outfile '文件路径' fields terminated by '分隔符' lines terminated by '\n换行符';
插入表记录
mysql>insert into 表名(字段1,..字段N) values(字段1值,..字段N值),(字段1值,..字段N值);字符类型值需要引号括起来
更新表记录
mysql>update 表名 set 字段1=字段1值 where 条件;若不使用where限定条件,会更新所有记录
删除表记录
mysql>delete from 表名 where 条件; #仅删除符合条件的记录
mysql>delete from 表名; #删除所有的表记录
查询表记录
mysql>select 字段1,字段N from 库.表 where 条件;
条件表达式
数值比较跟平时比较一样. '!='不等于的意思;between..and:在..和..之间
逻辑比较:
or,and,! 或,与,非
in .. ,not in .. 在..范围内,不在什么范围内
is null,is not null 字段值为空,字段值不为空
distinct 不显示重复的值
运算与平时一样..... + - * / %(取余)
模糊查询
通配符_匹配单个字符、%匹配0~N个字符
mysql>select * from 表名 where 字段名 like '通配字符';
正则表达式
mysql>select * from 表名 where 字段名 regexp '正则表达式';
嵌套查询(where字查询)
mysql>select 字段名列表 from 表A where 条件(select 字段名列表 from 表A/B where 条件);
常用函数
-avg():平均值 -sum():求和 -min():最小值 -max():最大值 -count():记录的个数
查询结果排序
order by 字段名 [asc/desc] #升序,降序
group by 字段名 [having 条件表达式] #分组查询
limit n,m #显示n行开始,n后的m行
mysql>select 字段名列表 from 表名 order by 字段名 [asc/desc] limit 2; #升序/降序 限制前2行
mysql>select 字段名列表 from 表名 group by 字段名
表的复制及改名
mysql>create table 新表名 select * from 旧表
复制结构及改名
mysql>create table 新表名 select * from 旧表 where false;
mysql>alter table 旧表名 rename to 旧表名
多表查询:
mysql>select 字段1,字段N from 表A,表B where 条件;
连接查询
左连接查询
mysql>select 字段名列表 from 表A left join 表B on 条件表达式;
右连接查询
mysql>select 字段名列表 from 表A right join 表B on 条件表达式;
############################################################################################################
重置密码、修改权限
#mysqladmin -uuser -poldpass password 'newpass';
mysql> update mysql.user set authentication_string=PASSWORD('newpass')
->where user='root' and host='localhost';
重置mysql管理密码
vim /etc/my.cnf
skip_grant_tables=1
systemctl restart mysqld
#mysql -uroot -p
mysql>update mysql.user set authentication_string=PASSWORD('newpass')
->where user='root' and host='localhost';
注释掉/etc/my.cnf里面的skip_grant_tables=1
############################################################################################################
权限:权限:all代表所有权限
登陆位置: '%' 代表所有位置
'192.168.1.% or192.168.1.0/24' 匹配一个网段
'%.example.com' 匹配一个DNS区域
'192.168.1.1 or host'匹配单个主机
with grant option:让新添加的用户有授权的权限
mysql>grant 权限列表 on 库.表 to '用户名'@'登陆地址' identified by '密码' with grant option; #设置登陆权限:
mysql>grant 权限,权限(字段) on 库.表 to '用户名'@'登陆地址' identified by '密码'; #设置登陆和用户权限
mysql>select * from mysql.db where user='用户名'; #查看单库权限
mysql>select * from mysql.tables_priv where user='用户名'; #查看表权限
mysql>select * from mysql.colunms_priv where user='用户名'; #查看用户字段权限
mysql>select * from mysql.user where user='用户名'; #查看用户全库权限
mysql>show grants for '用户名'@'登陆地址'; #查看用户拥有的权限
mysql>show grants #用户查看自己拥有的权限
mysql>set password=password("新密码") #用户自己修改密码
mysql>set password for 用户名@"客户端地址"=password("新密码"); #管理员修改用户密码
mysql>revoke 权限列表 on 库.表 from '用户名'@'登陆地址'; #撤销用户权限
mysql>drop user '用户名'@'登陆地址' #删除用户
############################################################################################################
Mysql管理工具phpMyAdmin安装方法
yum包:httpd mariadb php php-mysql
rpm包:php-mbstring-5.3.3-26.el6.x86_64.rpm 安装时可添加-nodeps忽略依赖关系
修改配置文件/etc/httpd/conf/httpd.conf
ServerName localhost.localdomain
DirectoryIndex index.php index.html
phpMyAdmin套件下载地址:www.phpmyadmin.net,下载支持多语言的源码程序包phpMyAdmin-4.1.2-all-languages.zip。
解压缩,放在/var/www/html/下
cp config.sample.inc.php config.inc.php
修改config.inc.php
$cfg[‘blowfish_secret’]=’tarena’; //在单引号里随意添加字符,如果不修改这项,会报错【配置文件现在需要绝密的短语密码(blowfish_sec)
$cfg['Servers'][$i]['host'] = '192.168.4.10';
客户端即可访问.
truncate table 表名; 删除表数据
Linux下
均在控制台下操作。
导入数据库:
前提:数据库和数据表要存在(已经被创建)
(1)将数据表 test_user.sql 导入到test 数据库的test_user 表中
(2) 将数据库 test.sql 导入到 test 数据库test 中
(3)source命令不在控制台下,要进入mysql下操作
mysql> use test;
mysql>source /www/web/test/test.sql
导出数据库:
(1) 将数据库 test 导出到/www/web/test/test.sql
回车后提示输入密码
(2) 将数据库 test 中的 user 数据表 导出到 /www/web/test/user.sql