MySql入门
MySQL简介:MySQL是开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL5.5版本之后都是由Oracle发布的版本,MySQL之前被SUN公司收购,而SUN公司现在又被Oracle公司收购,所以现在MySQL也是属于Oracle旗下的一款产品。
1.什么是MySQL?
维基百科上这么解释:
MySQL原本是一个开放源码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,该公司于2008年被昇阳微系统(Sun Microsystems)收购。2009年,甲骨文公司(Oracle)收购昇阳微系统公司,MySQL成为Oracle旗下产品。
MySQL在过去由于 性能高、成本低、可靠性好,已经成为最流行的开源数据库,因此被广泛地应用在Internet上的中小型网站中。随着MySQL的不断成熟,它也逐渐用于更多大规模网站和应用
但被甲骨文公司收购后,Oracle大幅调涨MySQL商业版的售价,且甲骨文公司不再支持另一个自由软件项目OpenSolaris的发展,因此导致自由软件社群们对于Oracle是否还会持续支持 MySQL社群版(MySQL之中唯一的免费版本 有所隐忧,MySQL的创始人麦克尔·维德纽斯以MySQL为基础,成立分支计划MariaDB。而原先一些使用MySQL的开源软件逐渐转向MariaDB或其它的数据库
2.为什么要使用MySQL?
主要有以下几点:
(1).mysql性能卓越,服务稳定,很少出现异常宕机。
(2).mysql开放源代码且无版权制约,自主性及使用成本低。
(3).mysql历史悠久,社区及用户非常活跃,遇到问题,可以寻求帮助。
(4).mysql软件体积小,安装使用简单,并且易于维护,安装及维护成本低。
(5).mysql品牌口碑效应,使得企业无需考虑就直接用之,lamp,lnmp流行架构。
(6).mysql支持多种操作系统,提供多种API接口,支持多种开发语言,特别对流行的PHP语言有很好的支持。
3.MySQL安装
首先在这里我们来教大家用linux来安装我们的MySQL,在linux里有两种方式一:rpm软件包管理,rpm相当于我们的本地安装,二:yum安装,yum安装就相当于在线安装,好了现在来进入我们的安装教程:
在线安装方式
1.打开虚拟机:
查看是否有MySQL软件:rpm -qa|grep mysql
有的话我们可以使用卸载方式:
yum remove mysql mysql-server mysql-libs mysql-common
rm -rf /var/lib/mysql
rm /etc/my.cnf
查看是否还有mysql软件,有的话继续删除。
软件卸载完毕后如果需要可以删除mysql的数据库:/var/lib/mysql
2.下载rpm包:
要使用yum 安装mysql,要使用mysql的yum仓库,先从官网下载适合你系统的仓库
http://dev.mysql.com/downloads/repo/yum/
我们是centos6.4对应的rpm包为:mysql-community-release-el6-5.noarch.rpm
然后将mysql-community-release-el6-5.noarch.rpm上传到linux系统。
3.安装仓库列表:
注意:在上传的mysql的rpm包当前目录下,执行以下命令:
yum localinstall mysql-community-release-el6-5.noarch.rpm
4.安装mysql
yum install mysql-community-server
Rpm本地安装方式
如果没有网络环境可以使用参考资料中的mysql-rpm文件夹下的mysql安装包来安装。
第一步:将以下文件上传到linux系统
第二步:使用rpm命令进行安装
[ mysql-rpm]# rpm -ivh mysql-community-*
安装后,启动服务、设置密码、远程授权后既可以使用
启动mysql
service mysqld start
设置root用户密码
mysql数据库安装完以后只会有一个root管理员账号,但是此时的root账号还并没有为其设置密码,在第一次启动mysql服务时,会进行数据库的一些初始化工作,在输出的一大串信息中,我们看到有这样一行信息 :
/usr/bin/mysqladmin -u root password ‘new-password‘ // 为root账号设置密码
mysql远程连接授权
mysql>GRANT ALL PRIVILEGES ON *.* TO ‘myuser‘@‘%‘ IDENTIFIED BY ‘mypassword‘ WITH GRANT OPTION;
注意:‘myuser‘、‘mypassword‘ 需要替换成实际的用户名和密码。
关闭linux的防火墙
[ linux]# service iptables stop
iptables:清除防火墙规则: [确定]
iptables:将链设置为政策 ACCEPT:filter [确定]
iptables:正在卸载模块: [确定]
SQL语句使用
1.数据库操作:database
创建数据库
语法:
* create database 数据库名;
* create database 数据库名 character set 字符集;
查看数据库
查看数据库服务器中所有的数据库:show database;
查看某个数据库定义的信息:show create database 数据库名;
删除数据库
drop database 数据库名称;
其他的数据库操作命令
切换数据库: use 数据库名;
查看正在使用的数据库:select database();
表操作: table
字段类型
常用的类型有:
数字型:int
浮点型:double
字符型:varchar(可变长字符串)
日期类型:date(只有年月日,没有时分秒)
datetime(年月日,时分秒)
boolean类型:不支持
分类 | 类型名称 | 说明 |
整数类型 | tinyInt | 很小的整数 |
smallint | 小的整数 | |
mediumint | 中等大小的整数 | |
int(integer) | 普通大小的整数 | |
小数类型 | float | 单精度浮点数 |
double | 双精度浮点数 | |
decimal(m,d) | 压缩严格的定点数------开发时用 | |
日期类型 | year | YYYY 1901~2155 |
time | HH:MM:SS -838:59:59~838:59:59 | |
date | YYYY-MM-DD 1000-01-01~9999-12-3 | |
datetime-开发用 | YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59 | |
timestamp | YYYY-MM-DD HH:MM:SS 1970~01~01 00:00:01 UTC~2038-01-19 03:14:07UTC | |
文本、二进制类型 | CHAR(M) | M为0~255之间的整数 |
VARCHAR(M) | M为0~65535之间的整数 | |
TINYBLOB | 允许长度0~255字节 | |
BLOB | 允许长度0~65535字节 | |
MEDIUMBLOB | 允许长度0~167772150字节 | |
LONGBLOB | 允许长度0~4294967295字节 | |
TINYTEXT | 允许长度0~255字节 | |
TEXT | 允许长度0~65535字节 | |
MEDIUMTEXT | 允许长度0~167772150字节 | |
LONGTEXT | 允许长度0~4294967295字节 | |
VARBINARY(M) | 允许长度0~M个字节的变长字节字符串 | |
BINARY(M) | 允许长度0~M个字节的定长字节字符串 |
创建表
create table 表名(
字段名 类型(长度) 约束,
字段名 类型(长度) 约束
);
查看表
查看数据库中的所有表: show tables;
查看表结构: desc 表名;
删除表
drop table 表名;
修改表
alter table 表名 add 列名 类型(长度) 约束; --修改表添加列.
alter table 表名 modify 列名 类型(长度) 约束; --修改表修改列的类型长度及约束.
alter table 表名 change 旧列名 新列名 类型(长度) 约束; --修改表修改列名.
alter table 表名 drop 列名; --修改表删除列
rename table 表名 to 新表名; --修改表名
alter table 表名 character set 字符集; --修改表的字符集
插入记录
语法:
insert into 表(列名1,列名2,列名3..)values (值1,值2,值3..); --向表中插入某些列
insert into 表 values(值1,值2,值3..); --向表中插入所有列
insert into 表(列名1,列名2,列名3..) values select (列名1,列名2,列名3)from 表
insert into 表 values select *from 表
注意:
1. 列名数与values后面的值的个数相等
2. 列的顺序与插入的值得顺序一致
3. 列名的类型与插入的值要一致.
4. 插入值得时候不能超过最大长度.
5. 值如果是字符串或者日期需要加引号’’ (一般是单引号)
更新记录
语法:
update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 条件;
注意:
1. 列名的类型与修改的值要一致.
2. 修改值得时候不能超过最大长度.
3.值如果是字符串或者日期需要加’’.
删除记录
delete from 表名 [where 条件];
sql查询
1.查询商品名称为十三香的商品所有信息:
* select * from product where pname = ‘十三香‘;
2.查询商品价格>60元的所有的商品信息:
* select * from product where price > 60;
where后的条件写法:
* > ,<,=,>=,<=,<>
* like 使用占位符 _ 和 % _代表一个字符 %代表任意个字符.
* select * from product where pname like ‘%新%‘;
* in在某个范围中获得值(exists).
* select * from product where pid in (2,5,8);
比较运算符 | > < <= >= = <> | 大于、小于、大于(小于)等于、不等于 |
BETWEEN ...AND... | 显示在某一区间的值(含头含尾) | |
IN(set) | 显示在in列表中的值,例:in(100,200) | |
LIKE ‘张_’ | 模糊查询,Like语句中,% 代表零个或多个任意字符,_ 代表一个字符,例first_name like ‘_a%’; | |
IS NULL | 判断是否为空 | |
逻辑运算符 | and | 多个条件同时成立 |
or | 多个条件任一成立 | |
not | 不成立,例:where not(salary>100); |
排序
SQL语法关键字:
ORDER BY
ASC(升序) DESC(降序)
聚合函数(组函数)
特点:只对单列进行操作
常用的聚合函数:
sum():求某一列的和
avg():求某一列的平均值
max():求某一列的最大值
min():求某一列的最小值
count():求某一列的元素个数
分组
SQL语法关键字:
GROUP BY
HAVING
注意事项:
1. select语句中的列(非聚合函数列),必须出现在group by子句中
2. group by子句中的列,不一定要出现在select语句中
3.聚合函数只能出现select语句中或者having语句中,一定不能出现在where语句中。
语法顺序和执行顺序(重要) ***
MySQL查询语法顺序
1. SELECT
2. FROM
3. LEFT JOIN
4. ON
5. WHERE
6. GROUP BY
7. HAVING
8. ORDER BY
9. LIMIT
执行顺序
1. FROM(将最近的两张表,进行笛卡尔积)---VT1
2. ON(将VT1按照它的条件进行过滤)---VT2
3. LEFT JOIN(保留左表的记录)---VT3
4. WHERE(过滤VT3中的记录)--VT4…VTn
5. GROUP BY(对VT4的记录进行分组)---VT5
6. HAVING(对VT5中的记录进行过滤)---VT6
7. SELECT(对VT6中的记录,选取指定的列)--VT7
8. ORDER BY(对VT7的记录进行排序)--游标
9.LIMIT(对排序之后的值进行分页)
WHERE条件执行顺序(影响性能)
1. MYSQL:从左往右去执行WHERE条件的。
2. Oracle:从右往左去执行WHERE条件的。
结论:写WHERE条件的时候,优先级高的部分要去编写过滤力度最大的条件语句。
表与表之间的关系
一对一关系
常见实例:一夫一妻
一对多关系
常见实例:会员和订单
多对多关系(需要中间表实现)
常见实例:商品和订单
外键
如何操作外键
主表添加外键的格式:
alter table 表名 add [constraint][约束名称] foreign key (主表外键字段) references 从表(从表主键)
主表删除外键的格式:
alter table 表名 drop foreign key 外键约束名称
使用外键目的:
保证数据完整性(数据保存在多张表中的时候)
在互联网项目中,一般情况下,不建议建立外键关系。
一对多关系
一个分类对应多个商品
总结:有外键的就是多的一方。
注意事项:
一对多关系和一对一关系的创建很类似,唯一区别就是外键不唯一。
一对多关系创建:
添加外键列
添加外键约束
多对多关系
同一个商品对应多个订单,一个订单对应多个商品
注意事项:
需要中间表去完成多对多关系的创建
多对多关系其实就是两个一对多关系的组合
多对多关系创建:
创建中间表,并在其中创建多对多关系中两张表的外键列
在中间表中添加外键约束
在中间表中添加联合主键约束
多表关联查询
JOIN 按照功能大致分为如下三类:
CROSS JOIN(交叉连接)
INNER JOIN(内连接或等值连接)。
OUTER JOIN(外连接)
交叉连接
交叉连接的关键字:CROSS JOIN
隐式交叉连接
SELECT * FROM A,B
显示交叉连接
SELECT * FROM A CROSS JOIN B
内连接
内连接的关键字:INNER JOIN
隐式内连接
SELECT * FROM A,B WHERE A.id = B.id
显示内连接
SELECT * FROM A INNER JOIN B ON A.id = B.id
分页查询
MySQL的分页关键字是:LIMIT
格式:
SELECT * FROM TABLE LIMIT [offset,] rows
MySQL事务处理
事务概述:
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,
你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
一般来说,事务是必须满足4个条件(ACID):
Atomicity(原子性)
Consistency(稳定性)
Isolation(隔离性)
Durability(可靠性)
对于ACID的解释如下:
原子性:构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。
稳定性(一致性):数据库在事务执行前后状态都必须是稳定的。
隔离性:事务之间不会相互影响。
可靠性(持久性):事务执行成功后必须全部写入磁盘