一、MySQL简介
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
二、安装完数据库后出现问题的解决方法
1、安装数据库:http://blog.csdn.net/topkipa/article/details/79097074
2、第一次安装完Mysql之后,输入 mysql -u root -p 回车,会提示你输入密码,
此处,关于修改初始的默认密码:http://blog.csdn.net/topkipa/article/details/79097074
3、安装完数据库之后,出现:ERROR 1820 (HY000): You must reset your password using ALTER USER statement befo re executing this statement. 解决办法:
直接执行:set password=password('你自己设置的密码');
三、SQL语句
分类
sql可以划分为以下3个类别:
DDL:数据定义语句,定义着不同的数据段、数据库、表、列、索引等数据库对象。常用语句关键字主要包括create,drop,alter等
DML语句:数据操纵语句用于添加、删除、更新、查询数据库记录。
DCL:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。
DDL:
(1)、连接数据库:
>>>mysql -uroot -p
mysql代表客户端命令,-u后面跟连接的数据库用户,而-p表示需要输入密码。
需要注意的是:
·命令的结束符用“:”或者“\g”结束
·客户端的连接ID,这个数据记录了MySQL服务到目前为止的连接次数,每个新连接会自动加1.
·通过"help"或者"\h"命令来显示帮助内容,通过"\c"命令来清除命令行buffer
(2)、创建数据库
>>>create database dbname:创建数据库
>>>show databases:查看系统存在哪些数据库
>>>use test1:选择数据库test1
>>>show tables:查看test1数据库里的数据表
(3)、删除数据库
>>>drop database dbname;
(4)、修改表:alter table****:
推荐使用图形化工具修改表结构。
DML语句
1、插入记录
insert into tablename(field1,field2...) values (value1,value2...);
insert into 后面也可以不指定字段名字,但是values后面的顺序应该和字段的排列顺序一致。
2、更新记录
update tablename set *****
BEGIN
DECLARE v_num INT DEFAULT 0;
SELECT COUNT(nm_id) INTO v_num FROM jt_url WHERE vc_md5 = v_md5;
IF v_num = 0 THEN
INSERT INTO jt_url (
dt_create,dt_update,vc_url,vc_title)
VALUES (
NOW(),NOW(),v_url,v_title);
ELSE
UPDATE jt_url SET
dt_update = NOW(),
vc_url = IF(LENGTH(TRIM(v_url))>0,v_url,vc_url),
vc_title = IF(LENGTH(TRIM(v_title))>0,v_title,vc_title)
WHERE vc_md5 = v_md5;
END IF;
END
3、删除记录
delete from tablename where ***
4、查询:
(1)、select * from tablename where ***
(2)、排序和限制:
利用order by 来实现按照某个字段进行排序,例如:
select * from dbname where *** order by dt_create DESC LIMIT 0,1000
其中DESC表示按照字段降序,而ASC表示按照字段升序排列。LIMIT表示只显示从第0位开始1000位结束的数据
5、聚合
select [field1,field2....] fun_name
from tablename
where ****
GROUP BY field1,field2.....
with rollup
having *****
其中,fun_name表示要做的聚合操作,例如sum(求和),count(*)记录数,max(最大值)
group by 表示要进行分类聚合的字段,比如按照部门分类统计员工数量。
with rollup是可选语法,表明是否对分类聚合后的结果进行再汇总。
having关键字表示对分类后的结果再进行条件的过滤。
select count(*) s,vc_videoid,dt_create,vc_class,vc_name,vc_infoid from youku_video WHERE vc_class="电影" GROUP BY vc_infoid having count(*)>1 ORDER BY CONVERT(vc_infoid,SIGNED)
having和where的区别在于:having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用where先过滤记录,这样结果集减小,将提高聚合的效率,最后再根据逻辑选择是否使用having进行再过滤。
6、表连接。
1、表连接分为内\外连接,其区别在于,内连接仅选出两张表中互相匹配的记录,而外连接会选出其他不匹配的记录。
2、外连接分为左连接和右连接:
·左连接左边表大
·右连接右边表大
例如:
select vc_infoid,vc_videoid from db1 left join db2 on db1.vc_name = db2.vc_name;
·表连接很多情况下用于优化子查询。
7、记录联合(union,union all)
·union all:把结果直接拼在一起
·union:是在union all之后进行一次去重
注:LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。