MySQL介绍:
一、概述
MySQL 是一个关系型数据库,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
优缺点:与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL Cluster的功能和效率都相对比较差)等
网站构架方式:LAMP(Linux+Apache+MySQL+PHP/Perl/Python)和LNMP(Linux+Nginx+MySQL+php/perl/Python),即使用Linux作为操作系统,Apache和Nginx作为Web服务器,MySQL作为数据库,PHP/Perl/Python作为服务器端脚本解释器。由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统
二、MySql数据库操作
1、MySql的安装与使用
下载:https://www.mysql.com/downloads/
2)如果之前安装过mysql,要先安装文档步骤卸载mysql
3)安装安装文档安装mysql数据库软件。
4)打开cmd命令行:
输入: mysql -u root -p 回车
输入:root
看到:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.40 MySQL Community Server (GPL)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
2、MySql结构
先有数据库 -> 再有表 ->再有数据
通过sql语句对mysql数据库进行管理。
3、操作数据库
3.1、管理数据库
查看数据库:
show databases;
创建数据库:
1)创建数据库,并制定默认字符集
create database db
default character set utf8;
查看数据库的状态(默认字符串):
show create database db;
2)创建数据库,同时指定默认字符集,以及字符集的默认校验规则。
create database db
default character set utf8
collate utf8_general_ci; –指定默认的校验规则
查看常用的字符串集的校验规则:
show character set;
删除数据库:
drop database db;
修改数据库:
alter database db default character set gbk;–修改数据库默认字符集
3.2、管理表
use db;– 选择数据库
创建表:
*create table student(
id int primary key auto_increament, -字段:字段名称 字段类型
name varchar(20),
age int
);*
查看一个表结构:
show creata table student; 以sql格式返回
desc student; 以表格格式返回
删除表:
drop table student
修改表:
1)添加字段
alter table student add column gender varchar(2);
alter table student add a int,add b int; 多个操作
2)修改字段类型
alter table student modify column remark varchar(100);
3)修改字段名称
alter table student change column remark remark2 varchar(100)
4)删除字段
alter table student drop column a,drop column b;
5)修改表名
alter table student rename to student2;
3.3、管理数据
– 1) 查看表的数据
SELECT * FROM student;
– 2)插入数据
– 插入所有列(所有列的值都要按顺序依次插入)
INSERT INTO student VALUES(1,’eric’,20,’广州人’,’男’);
INSERT INTO student VALUES(2,’rose’,25,’佛山人’,’女’);
– 插入部分列(列的数据和值的顺序和数量一定保持一致!)
INSERT INTO student(id,NAME,age,remark2) VALUES(3,’jacky’,27,’佛山人’);
– 3) 修改数据
– 修改所有(用的很少)
UPDATE student SET gender=’男’;
– 修改某个某些条件的数据(用的较多)
UPDATE student SET gender=’女’ WHERE id=2;
– 修改多个列(SET 列名=值,列名=值…)
UPDATE student SET age=28,remark2=’韶关人’ WHERE id=2;
– 4 )删除数据
– 删除表的所有数据(用的较少)
– 注意:
– 1)只能删除表中的数据,不能影响表中的自增长约束
– 2)使用delete删除的数据,通过事务可以回滚。
– 3)后面带条件
DELETE FROM student;
– 删除部分
DELETE FROM student WHERE id=3;
– 删除所有数据
– 注意:
– 1)既能删除表的数据,也能够把表的子增长约束置为0.
– 2)使用truncate删除的数据,不能回滚!
– 3)后面不能带条件
TRUNCATE TABLE student;
控制台乱码的解决:
Set character_set_client=gbk;
Set character_set_results=gbk;
查询数据详细:
– 3.3.1.1 查询所有列
SELECT * FROM student;
– 3.3.1.2 查询指定列(多个列之间以逗号分隔)
SELECT NAME,gender FROM student;
– 3.3.1.3 查询时给列指定别名(AS)
SELECT NAME AS ‘姓名’,gender AS ‘性别’ FROM student;
– AS可以省略
SELECT NAME ‘姓名’,gender ‘性别’ FROM student;
– 3.3.1.4 合并列查询
– 需求: 查询每个学生的servlet和jsp的总成绩
– 注意: 必须是数值类型
SELECT NAME ‘姓名’,(servlet+jsp) ‘总成绩’ FROM student;
– 注意,和数值以外合并没有意义
SELECT NAME ‘姓名’,(gender+jsp) FROM student;
– 3.3.1.5 查询时添加常量列—注意常量列AS不可省略
– 需要: 在查询学生表时都带上一个班级列,内容为”Java就业班”
SELECT NAME ‘姓名’,gender ‘性别’,age ‘年龄’,’java就业班’ AS ‘班级’ FROM student;
– 3.3.1.6 查询去除重复数据
– 需求: 统计学生都来自于哪里
SELECT DISTINCT remark2 FROM student;
– 这种语法也可以
SELECT DISTINCT(remark2) FROM student;
– 1 条件查询(where)
SELECT * FROM student;
– 1) 逻辑条件: and or
– 需求: 查询id值为3,且性别为男的学生(交集:两个条件同时满足)
SELECT * FROM student WHERE id=3 AND gender=’男’;
– 需求:查询id为3,或性别为男的学生(并集: 两个条件其中一个满足)
SELECT * FROM student WHERE id=3 OR gender=’男’;
– 2)比较条件: > < >= <= = between and
– 需求: 查询servlet分数大于80分的学生
SELECT * FROM student WHERE servlet>80;
– 需求:查询jsp分数小于或等于80分的学生
SELECT * FROM student WHERE jsp<=80;
SELECT * FROM student WHERE jsp<80 OR jsp=80;
– 需求: 查询servlet成绩大于等于80,且小于等于88的学生
SELECT * FROM student WHERE servlet>=80 AND servlet<=88;
– 等价于上面
SELECT * FROM student WHERE servlet BETWEEN 80 AND 88; – (包前包后)
– 3)判空条件: =” is null <>” is not null
UPDATE student SET remark2=”” WHERE id=1;
UPDATE student SET remark2=NULL WHERE id=4;
– 需求: 查询remark字段为空的学生(包含null,也包含字符串)
– null 和 空字符串的区别:
– null: 没有数据。 判断null: is null,判断不为null: is not null
– 空字符: 有数据,数据就是空字符串。判断空字符: =”; 判断不为空字符串: <>”
SELECT * FROM student WHERE remark2 IS NULL;
SELECT * FROM student WHERE remark2=”;
SELECT * FROM student WHERE remark2 IS NULL OR remark2=”;
– 需求:查询remark字段不为空的学生
SELECT * FROM student WHERE remark2 IS NOT NULL AND remark2<>”;
– 4) 模糊条件: like
– like后面跟上符合
– %: 表示任意多个字符(0-多个)
– _: 表示一个字符
– 需求: 查询姓张的学生
SELECT * FROM student WHERE NAME LIKE ‘张%’;
– 需求: 查询姓名中包含’张’字的学生
SELECT * FROM student WHERE NAME LIKE ‘%张%’;
– 需求: 查询姓张,且姓名只有两个字的学生
SELECT * FROM student WHERE NAME LIKE ‘张__’;
– 2 聚合查询
SELECT * FROM student;
DELETE FROM student WHERE id=5;
– 需求: 查询所有学生servlet的总分 (SUM: 求和函数)
SELECT SUM(servlet) FROM student;
– 需求: 查询所有学生servlet的平均分(AVG; 平均函数)
SELECT AVG(servlet) FROM student;
– 需求:查询最高的servlet分数(MAX:最大值函数)
SELECT MAX(servlet) FROM student;
– 需求:查询最低的servlet分数(MIN:最小值函数)
SELECT MIN(servlet) FROM student;
– 需求: 一共几个学生(COUNT: 统计数量函数)
SELECT COUNT(*) FROM student;
SELECT COUNT(id) FROM student; – 效率会比count(*)效率稍高
– 注意: 聚合函数,会排除null值的数据
SELECT COUNT(remark2) FROM student;
– 3 分组筛选(group by + having(条件))
– 需求: 查询人数大于2的性别
– 1)分组 2)统计 3)条件
SELECT gender,COUNT() ‘人数’ FROM student GROUP BY gender HAVING COUNT()>2;
4 分页查询
SELECT FROM menber LIMIT 2,3*
3.4、数据约束条件
默认值、非空、唯一、主键、自增长、外键
4、查询数据库之多表查询
– 需求:查询员工及其所在部门(显示员工姓名,部门名称)
– 4.1 交叉连接查询(不推荐。产生笛卡尔乘积现象:4 * 4=16,有些是重复记录)
SELECT empName,deptName FROM employee,dept;
– 需求:查询员工及其所在部门(显示员工姓名,部门名称)
– 多表查询规则:1)确定查询哪些表 2)确定哪些哪些字段 3)表与表之间连接条件 (规律:连接条件数量是表数量-1)
– 4.2 内连接查询:只有满足条件的结果才会显示(使用最频繁)
SELECT empName,deptName – 2)确定哪些哪些字段
FROM employee,dept – 1)确定查询哪些表
WHERE employee.deptId=dept.id – 3)表与表之间连接条件
– 内连接的另一种语法
SELECT empName,deptName
FROM employee
INNER JOIN dept
ON employee.deptId=dept.id;
– 使用别名
SELECT e.empName,d.deptName
FROM employee e
INNER JOIN dept d
ON e.deptId=d.id;
– 需求: 查询每个部门的员工
– 预期结果:
– 软件开发部 张三
– 软件开发部 李四
– 应用维护部 王五
– 秘书部 陈六
– 总经办 null
– 4.2 左[外]连接查询: 使用左边表的数据去匹配右边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null
– (注意: 左外连接:左表的数据一定会完成显示!)
SELECT d.deptName,e.empName
FROM dept d
LEFT OUTER JOIN employee e
ON d.id=e.deptId;
– 4.3 右[外]连接查询: 使用右边表的数据去匹配左边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null
– (注意: 右外连接:右表的数据一定会完成显示!)
SELECT d.deptName,e.empName
FROM employee e
RIGHT OUTER JOIN dept d
ON d.id=e.deptId;
– 4.4 自连接查询
– 需求:查询员工及其上司
– 预期结果:
– 张三 null
– 李四 张三
– 王五 李四
– 陈六 王五
SELECT e.empName,b.empName
FROM employee e
LEFT OUTER JOIN employee b
ON e.bossId=b.id;
4.5 嵌套子查询
将一个查询作为临时表
注意:查询语句书写顺序:select – from- where- group by- having- order by-limit
查询语句执行顺序:from - where -group by - having - select - order by-limit