mysql-基础篇

以下内容主要来自:https://blog.csdn.net/wei_li_2015/article/details/80801029

什么是数据库?

数据库(Database)是按照数据结构来组织,存储和管理数据的仓库。

每个数据库都有一个或多个不同的(应用程序编程接口)API用于创建、访问、管理、搜索和复制所保存的数据(我们也可以将数据存储在文件中,但是文件的读取速度相对较慢),所以使用关系型数据库管理系统,建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据

特点:1.数据以表格的形式出现

        2.每行为各种记录名称

        3.每列为记录名称所对应的数据域

        4.许多的行和列组成一张表单

        5.若干的表单组成database

RDBMS术语

数据库:数据库是一些关联表的集合
数据表:表是数据的矩阵
列:相同的数据
行:一组相关的数据
冗余:存储两倍数据,冗余可以使系统的速度更快
主键:唯一,利用主键来查询数据
外键:用于关联两个表
复合键:将多个列作为一个索引键,一般用于复合索引

数据库的三范式
三范式的作用: 数据库的三范式的作用是告诉大家以后在设计数据库的时候要遵守的一些准则,
第一范式: 一个表中的任意字段都是不可再分割的单元
第二范式: 不同业务含义字段的数据应该分离在不同表
第三范式: 一个表除主键之外的其他字段都应该与该事物有着直接的关系。

一、mysql概述

mysql是最流行的关系型数据库管理,在Web应用方面MySQL是最好的RDBMS:关系数据库管理系统

MySQL优点:

MySQL是开源的
支持大型的数据库
使用标准的SQL数据语言形式
采用了GPL协议,可以定制,修改源码,制定自己的MySQL系统

mysql的安装、连接,请自行脑补。。。

二、DDL
DDL语句操作数据库
1.查看数据库
Show databases 查看所有的数据库
Show create database 数据库名; 查看创建数据库的语句
2. 创建数据库
1. create database 数据库名; 直接创建数据库
2. Create database if not exists 数据库; 判断数据库是否存在,存在则不再创建,不存在则创建
3. Create database if not exists 数据库 character set 码表; 指定码表码表创建数据库
3. 删除数据库
1. drop database 数据库名; 直接删除数据库
2. Drop database if exists 数据库名 ; 如果指定的数据库存在的情况下我才删除。
4. 修改数据库码表
alter database 数据库 character set 码表

DDL语句操作表
1. 创建表
格式:
create table 表名(
字段名1 数据类型,
字段名2 数据类型;
);
2. 查看表
1. Show tables; 显示所有的表
2. show create table 表名 ; 查看创建表的语句
3. desc 表名; 查看表结构
3. 删除表
1.Drop table 表名 ; 直接删除表
2.Drop table if exists 表名 ; 先判断表是否存在
4.修改表
1. Alter table 表名 add 字段名 数据类型; 添加一列
2. Alter table 表名 modify 列名 新的数据类型 修改列类型
3. Alter table 表名 change 旧列名 新列表 数据类型 改变列名
4. Alter table 表名 drop 列名; 删除列
5. Alter table 表名 rename to 新表名 ; 表名重命名

三、DML

DML语句主要用于操作表的数据增、删、改的。
1. 查看表数据
Select * from 表名;

2. 往表插入数据
方式一: 插入所有字段的数据
格式: insert into 表名 values(数据1,数据2...);
例子 : insert into student values(110,'gouwa',10);

方式二:插入指定字段的数据
格式: insert into 表名(字段名1,字段名2) values(数据1,数据2..)
例子: insert into student(id,name) values(220,'gousheng');

3. 删除数据
格式:
1. delete from 表名; 清空表数据(一条一条数据删除)
2. Truncate 表名 清空表数据(摧毁表结构达到目标)
3. Delete from 表名 where 条件;删除指定的数据

4. 修改数据
格式: Update 表名 set 字段名 = 数据 where 条件。 修改表的数据

四、DQL
DQL查询语言语句的作用:主要用于查询表中的数据。
1. 查询所有的学生:
SELECT * FROM students;
2. 只要查询学生姓名,语文
SELECT NAME,chinese FROM students;
3. 查询的时候使用别名:
SELECT NAME AS 姓名 , chinese AS 语文 FROM students;(标准语法)
SELECT NAME 姓名 , chinese 语文 FROM students;(方言)
4. 查询一个公司里面的工作岗位。--清除重复数据
SELECT DISTINCT(job) FROM emp;
5.在所有学生分数上加10分特长分---查询的结果是可以运算的
SELECT NAME, chinese+10 语文 ,math+10 数学, english+10 英语 FROM students;
6.查询姓名为'张小明'的学生成绩
SELECT * FROM students WHERE NAME = '张小明';
7.查询英语成绩大于90分的同学
SELECT * FROM students WHERE english >90;
8. 查询总分大于200分的所有同学
SELECT NAME, (chinese+math+english) 总分 FROM students WHERE
(chinese+math+english)>200;
9. 查询数学分数为89或者90或者91的同学
方式一(OR): SELECT * FROM students WHERE math=89 OR math=90 OR math=91;
方式二(IN): SELECT * FROM students WHERE math IN (89,90,91);
方式一: SELECT * FROM students WHERE english>=80 AND english<=90;
方式二: SELECT * FROM students WHERE english BETWEEN 80 AND 90;
11.查询所有姓'李'的学生成绩。
%可以匹配0个字符或多个字符。 %代表了任意的字符,而且可以匹配多个字符
SELECT * FROM students WHERE NAME LIKE '李%';
12.查询所有名为'李'字的学生成绩。
_ 代表任意的 一个字符。
SELECT * FROM students WHERE NAME LIKE '_%李%';
13.查询所有姓李的学生,并且姓名只有两个字。
SELECT * FROM students WHERE NAME LIKE '李_';
14.查询所有姓名中包含’李’字的学生成绩
SELECT * FROM students WHERE NAME LIKE '%李%';
15.查询所有姓'李'的学生成绩,但姓名必须是三个字符,_表示1个字符
SELECT * FROM students WHERE NAME LIKE '李__';
16.对数学成绩排序(降序)后输出
ASC(升序,默认是升序)
DESC(降序)
SELECT * FROM students ORDER BY math DESC;
17.组合排序:第一参考数学,如果数学成绩一样根据语文排序
SELECT * FROM students ORDER BY math DESC,chinese DESC;(组合排序)
18.对总分排序(降序)后输出
SELECT NAME ,(chinese + math+english) 总分 FROM students ORDER BY 总分 DESC;
19.对姓'李'的学生总分排序(降序)输出
SELECT NAME ,(chinese + math+english) 总分 FROM students WHERE NAME LIKE '李%'
ORDER BY 总分 DESC;
20.统计一个班级共有多少学生。 COUNT() 把所有的行数加起来。
SELECT COUNT(*) FROM students;
SELECT COUNT(IFNULL(math,0)) FROM students;
SELECT IFNULL(math,0) FROM students;
IFNULL 如果该字段是NULL,那么使用默认值取代。
21. 统计数学成绩大于80的学生有多少个
SELECT COUNT(id) FROM students WHERE math>=80;
22. 统计总分大于250的人数有多少人。
SELECT COUNT(*) FROM students WHERE (chinese+math+english)>=250;
23. 统计一个班级数学总成绩(SUM)
SELECT SUM(math) FROM students;
24. 统计一个班级语文、英语、数学各科的总成绩
SELECT SUM(chinese) 语文总分, SUM(math) 数学总分,SUM(english) 英语总分 FROM students;
25.统计一个班级语文、英语、数学的成绩总和
SELECT SUM(chinese+math+english) 总分 FROM students;
26.统计一个班级语文成绩平均分--AVG
SELECT AVG(chinese) FROM students;
27.求一个班级总分平均分
SELECT AVG(chinese+math+english) FROM students;
28. 求班级最高分和最低数学分数。最小:MIN 最大:MAX
SELECT MIN(math) FROM students;
SELECT MAX(math) FROM students;
29. 统计工资大于15000的每个工作岗位人数。--- group by分组查询
SELECT job,COUNT(job) FROM emp WHERE sal>=15000 GROUP BY job;
sal>15000这个条件数据是分组之前就存在的数据还是分组之后才存在的数据: 之前。
30. 统计工资大于15000的每个工作岗位人数,且该工作岗位的人数大于等于3。
工作岗位的人数大于等于3,这个是分组前就存在的数据还是分组后存在的数据?分组之后。如果
是分组后才存在的数据,那么需要写在HAVING上。
SELECT job ,COUNT(job) FROM emp WHERE sal>=15000 GROUP BY job HAVING
COUNT(job)>=3;
31. limit语句(分页查询)
SELECT * FROM students LIMIT 开始索引值,总数;

五、DCL 数据控制语言
创建用户:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
CREATE USER 'username'@'%' IDENTIFIED BY 'password';

删除用户:
DROP USER 'username'@'host';

更改用户名称:
RENAME USER test to test_2;

设置与更改用户密码:
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
如果是当前登陆用户用:SET PASSWORD = PASSWORD("newpassword");

查看当前用户:select user();
查看所有用户:select user,'localhost' from mysql.user;

为用户授权:
GRANT privileges ON databasename.tablename TO 'username'@'host'
如: grant all on liwei01.liwei01 TO 'liwei'@'localhost';
表名可以使用*号代替,表示所有的表
说明:
privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
databasename:数据库名
tablename:表名

查看权限:
show grants for ‘username’@‘localhost’;

撤销用户权限:
REVOKE privilege ON databasename.tablename FROM 'username'@'host';

刷新权限:flush privileges;
六、MySQL数据库备份与还原
生成SQL脚本
mysqldump –u用户名 –p密码 数据库名>生成的脚本文件路径

执行SQL脚本
SOURCE 路径
如:SOURCE C:\mydb1.sql
上面这种情况可能会已有的表冲突。

mysql –u用户名 –p密码 数据库<要执行脚本文件路径
如:mysql -uroot -p123 mydb1<c:\mydb1.sql

七、多表查询
笛卡尔积现象
如果一次查询多个表的时候,那么A表的每一条记录都会与B表的每一条记录组合成新的数据,这种现象我们称作为笛卡尔积。
消除笛卡尔积现象: 从表的外键列等于主表的主键列。

内连接查询
Select * from 表1 inner join 表2 on 清除笛卡尔积的条件 where 数据的筛选条件

左外连接
左外连接查询就是以左表为主,不管左表的数据是否满足条件,左表都会全部显示出来。
Select * from 表1 left outer join 表2 on 清除笛卡尔积条件 where 普通条件

右外连接
右外连接就是以右表为主,右表的数据不管是否满足条件,右表的数据全部显示。
Select * from 表1 right outer join 表2 on 清除笛卡尔积条件 where 普通条件

合并结果集(全外连接)
如:
SELECT * FROM emp e LEFT OUTER JOIN dept d ON e.deptId =d.id
UNION
SELECT * FROM emp e RIGHT OUTER JOIN dept d ON e.deptId =d.id ;

子查询
子查询就是指一个查询语句的结果被另外一个查询语句使用(查询语句中嵌套有其他的查询语句)
如:SELECT * FROM USER WHERE uid = (SELECT uid FROM orders WHERE createTime = '2015-12-30');

猜你喜欢

转载自blog.csdn.net/qq_15901351/article/details/81149729