MySQL学习笔记总结

一、SQL概述:

SQL:Structured Query Language的缩写(结构化查询语言)

SQL工业标准:由ANSI(ISO核心成员)

按照工业标准编写的SQL能运行在任何数据库上。

方言:只能运行在特定数据库上的SQL语句叫做方言。

二、SQL语言的组成:

DDL:数据定义语言    Data Definition Language

DML:数据操作语言    Data Manipulation Language

DQL:数据查询语言    Data Query Language

TPL:事务处理语言    Transaction Process Language

三、基本知识

Java定义的类---------------表的结构

Java对象---------------------表中的记录

MySQL:非windows环境下是严格区分大小写的。

约定:关键字都采用小写。多个单词组成用_分割。

四、MySQL的卸载

1、停止MySQL的服务

2、利用卸载程序卸载

3、找到原来的安装位置,把文件夹清掉

DDL之数据库操作

1.关键字:create alter drop truncate(摧毁)

1.创建一个名称为mydb1的数据库。

mysql>create database MYDB1;

2.查看有哪些数据库

mysql>show databases;

3.查看创建数据库的具体细节

mysql>show create database MYDB1;

4.创建一个使用gbk字符集的mydb2数据库。

mysql>create database MYDB2 character set gbk;

5.创建一个使用gbk字符集,并带校对规则的mydb3数据库。

mysql>create database MYDB3 character set gbk collate gbk_chinese_ci;

6.删除前面创建的mydb3数据库

mysql>drop database MYDB3;

7.查看服务器中的数据库,并把mydb2的字符集修改为utf8;

mysql>alter database MYDB2 character set utf8;

2、DDL之表结构

1.选择一个库

mysql>use MYDB1;

2.创建一个员工表

mysql>create table EMPLOYEE(

ID int,

NAME varchar(200),

GENDER varchar(200),

BIRTHDAY date,

ENTRY_DATE date,

JOB varchar(200),

SALARY float(8,2),

RESUME text

);

3.显示当前库中的所有表

mysql>show tables;

4.查看表的结构

mysql>desc EMPLOYEE;

5.查看表的创建细节

mysql>show create table EMPLOYEE;

6.在上面员工表的基本上增加一个image列。

mysql>alter table EMPLOYEE add IMAGE blob;

7.修改job列,使其长度为60。

mysql>alter table EMPLOYEE modify JOB varchar(60);

8.删除image列。

mysql>alter table EMPLOYEE drop IMAGE;

9.表名改为user。

mysql>rename table EMPLOYEE to USER;

10..修改表的字符集为utf8

mysql>alter table USER character set utf8;

11.列名name修改为username

mysql>alter table USER change NAME USERNAME varchar(100);

12.将表中的某一个字段改为主键

修改某一字段为主键:mysql>ALTER TABLE 表名 MODIFY id int primary key;

3.DML:Data Manipulation Language

用于向数据库表中插入、删除、修改数据

常用关键字:INSERT      UPDATE     DELETE

在MySQL中,字符串和日期时间类型,要使用单引号引起来。

特殊值:null

练习:

1.使用insert语句向USER表中插入三个员工的信息。

mysql>insert into USER (ID,USERNAME,GENDER,BIRTHDAY,ENTRY_DATE,JOB,SALARY,RESUME)

values (1,'wangdongxue','female','1991-09-08','2014-02-17','CEO',100000,'beauty girl');

mysql>insert into USER values (2,'wangdong','male','1990-09-08','2014-02-17','CTO',100000,'strong man');

mysql>insert into USER values (3,'查显成','男性','1988-09-08','2014-02-17','UFO',100000,'帅锅');

2.查看表中的所有记录

mysql>select * from USER;

3.查看库的所有的编码:

mysql>show variables like 'character_set%';

character_set_client:指示客户端使用的字符集

mysql>set character_set_client=gbk; 通知服务器,客户端使用的是GBK字符集

character_set_results:指示显示的结果集使用的字符集

mysql>set character_set_results=gbk;   通知服务器,客户端接受的结果使用的字符集为gbk

4.将所有员工薪水修改为5000元。

mysql>update USER set SALARY=5000;

5.将姓名为’查显成’的员工薪水修改为3000元。

mysql>update USER set SALARY=3000 where USERNAME='查显成';

6.将姓名为’wangdong’的员工薪水修改为4000元,job改为CEO。

mysql>update USER set SALARY=4000,JOB='CEO' where USERNAME='wangdong';

7.将王冬雪的薪水在原有基础上增加1000元。

mysql>update USER set SALARY=SALARY+1000 where USERNAME='wangdongxue';

8.删除表中名称为’查显成’的记录。

mysql>delete from USER where USERNAME='查显成';

9.删除表中所有记录。(DML语句)

mysql>delete from USER; #一条一条的删除

10.使用truncate删除表中记录。(DDL语句)

mysql>truncate USER;  #删除整张表,重建的表结构

4、DQL数据查询语言

一.DQL:单表查询(重点)

查询表中所有学生的信息。

mysql>SELECT * FROM student;

mysql>SELECT id,name,chinese,english,math FROM student;

查询表中所有学生的姓名和对应的英语成绩。

mysql>SELECT name,english FROM student;

过滤表中重复数据。

mysql>SELECT DISTINCT english FROM student;

在所有学生数学分数上加10分特长分。

mysql>SELECT name,math+10 FROM student;

统计每个学生的总分。

mysql>SELECT name,chinese+english+math FROM student;

使用别名表示学生分数。

mysql>SELECT name AS 姓名,chinese+english+math 总分 FROM student;

查询姓名为wu的学生成绩

mysql>SELECT * FROM student WHERE name='王五';

查询英语成绩大于90分的同学

mysql>SELECT * FROM student WHERE english>90;

查询总分大于200分的所有同学

mysql>SELECT * FROM student WHERE (chinese+english+math)>200;

查询英语分数在 80-90之间的同学。

mysql>SELECT * FROM student WHERE english BETWEEN 80 AND 90;

查询数学分数为89,90,91的同学。

mysql>SELECT * FROM student WHERE math IN (89,90,91);

查询所有姓李的学生成绩。

mysql>SELECT * FROM student WHERE name LIKE '李%';

查询数学分>80,语文分>80的同学。

mysql>SELECT * FROM student WHERE math>80 AND chinese>80;

对数学成绩排序后输出。

mysql>SELECT name,math FROM student ORDER BY math;

对总分排序后输出,然后再按从高到低的顺序输出(排序字段可以使用别名)

mysql>SELECT name,chinese+english+math '总分' FROM student ORDER BY chinese+english+math DESC;

对姓李的学生成绩排序输出

mysql>SELECT name,chinese+english+math '总分' FROM student WHERE name LIKE '李%' ORDER BY 总分;

分页查询:查询姓李的学生总成绩最高的是谁

mysql>SELECT name,chinese+english+math '总分' FROM student WHERE name LIKE '李%' ORDER BY 总分 LIMIT 0,1;

LIMIT M,N;  M开始记录的索引,从0开始。N是一次取几条。

二、完整性约束

1、实体完整性(行完整性约束)

作用:唯一定位一条记录

实现:PRIMARY KEY 定义主键。主键的特点是唯一并且不能为空。

写法一:

CREATE TABLE t1(

id int PRIMARY KEY,

name varchar(100),

resume varchar(100)

);

写法一:

CREATE TABLE t2(

id int,

name varchar(100),

resume varchar(100),

PRIMARY KEY(id)

);

让整数类型的主键自动增长(Oracle并不支持)

CREATE TABLE t3(

id int AUTO_INCREMENT,

name varchar(100),

resume varchar(100),

PRIMARY KEY(id)

);

主键:

逻辑主键:并没有实际含义,只是用于唯一确定一条记录用的。(推荐)

业务主键:有一定的实际含义。身份证号码作为主键。

2、域完整性(列完整性)

其他约束:

NOT NULL 非空约束

UNIQUE 唯一约束

CREATE TABLE customer(

id int PRIMARY KEY,

username varchar(100) UNIQUE NOT NULL,

password varchar(100) NOT NULL

);

3、参照完整性:多表(重点)

外键

多表的设计

一对多:(非常多)

CREATE TABLE department(

id int primary key,

name varchar(100),

floor int

);

CREATE TABLE employee(

id int primary key,

name varchar(100),

salary float(8,2),

dept_id int,

CONSTRAINT dept_id_fk FOREIGN KEY(dept_id) REFERENCES department(id)

);

多对多:(引入第三个关系表)

CREATE TABLE teacher(

id int primary key,

name varchar(100),

salary float(8,2)

);

CREATE TABLE student(

id int primary key,

name varchar(100),

grade varchar(100)

);

CREATE TABLE teacher_student(

t_id int,

s_id int,

PRIMARY KEY(t_id,s_id),

CONSTRAINT t_id_fk FOREIGN KEY(t_id) REFERENCES teacher(id),

CONSTRAINT s_id_fk FOREIGN KEY(s_id) REFERENCES student(id)

);

一对一:(开发中很少用)

CREATE TABLE person(

id int primary key,

name varchar(100)

);

CREATE TABLE idcard(

id int primary key,

num varchar(18),

CONSTRAINT p_id_fk FOREIGN KEY(id) REFERENCES person(id)

);

三.DQL:多表查询(重点)

语法结构:

SELECT * FROM 表1 [连接类型] 表2 [ON 连接条件] [WHERE 进一步的筛选]

1、交叉连接:(CROSS JOIN)

返回多张表中的记录的笛卡尔积(数据有不对的)

2、内连接:

隐式内连接:(不使用连接关键字)

SELECT * FROM customer c,orders o WHERE c.id=o.customer_id;

显式内连接:(使用连接关键字)

SELECT  c.name,c.city,o.order_number,o.price FROM customer c INNER JOIN orders o ON c.id=o.customer_id;

3、外连接:(OUTER JOIN)

左外连接:(LEFT OUTER JOIN)  返回满足连接条件的所有记录,同时还返回左表中没有满足连接条件的其余记录。

查询所有客户信息,如果有订单还要显示订单信息

SELECT * FROM customer c LEFT OUTER JOIN orders o ON c.id=o.customer_id;

右外连接:(RIGHT OUTER JOIN)

4、子查询(简单)

又叫做嵌套查询。子查询的语句必须放在小括号之内

查询“陈冠希”的订单详细内容:

SELECT id FROM customer WHERE name='陈冠希'; //子查询

SELECT * FROM orders WHERE customer_id=1; //主查询

子查询:

SELECT * FROM orders WHERE customer_id=(SELECT id FROM customer WHERE name='陈冠希');

查询“陈冠希和李宗瑞” 的订单详细内容:

SELECT id FROM customer WHERE name='陈冠希' OR name='李宗瑞';

SELECT * FROM orders WHERE customer_id IN(1,2);

子查询:

SELECT * FROM orders WHERE customer_id IN(SELECT id FROM customer WHERE name='陈冠希' OR name='李宗瑞');

十、MySQL中的分组查询

十一、MySQL中的常用函数

统计一个班级共有多少学生?

mysql>SELECT COUNT(*) FROM student;

mysql>SELECT COUNT(id) FROM student;

统计数学成绩大于90的学生有多少个?

mysql>SELECT COUNT(id) FROM student WHERE math>=90;

统计总分大于250的人数有多少?

mysql>SELECT COUNT(id) FROM student WHERE (math+english+chinese)>=250;

统计一个班级数学总成绩?

mysql>SELECT SUM(math) FROM student;

统计一个班级语文、英语、数学各科的总成绩

mysql>SELECT SUM(math),SUM(chinese),SUM(english) FROM student;

统计一个班级语文、英语、数学的成绩总和

mysql>SELECT SUM(math+english+chinese) FROM student;

统计一个班级语文成绩平均分

mysql>SELECT SUM(chinese)/COUNT(*) FROM student;

求一个班级数学平均分?

mysql>SELECT AVG(math) FROM student;

求一个班级总分平均分

mysql>SELECT AVG(math+english+chinese) FROM student;

特别注意:使用关键字做为表或字段名时,要使用反引号引起来(`)和~在一个按键上

对订单表中商品归类后,显示每一类商品的总价

mysql>SELECT product,SUM(price) FROM orders GROUP BY product;

查询购买了几类商品,并且每类总价大于100的商品

mysql>SELECT product,SUM(price) FROM orders GROUP BY product HAVING SUM(price)>100;

十二、MySQL数据库的备份与恢复

1、数据备份:

MySQL安装目录\mysqldump

c:/>mysqldump -h localhost -u root -p test>d:/test.sql

输入数据库密码

2、恢复数据库:

前提:数据库名成必须存在

方式一:进入MySQL

mysql>use test;

mysql>source d:/test.sql

方式二:不用进入mysql

c:/>mysql -u root -p test<d:/test.sql

java web mysql 入门知识讲解的更多相关文章

  1. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识

    JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...

  2. JAVA WEB快速入门之从编写一个基于SpringMVC框架的网站了解Maven、SpringMVC、SpringJDBC

    接上篇<JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP.IOC)>,了解了Spring的核心(AOP.IOC)后,我们再来学习与实践Maven.Sp ...

  3. JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)

    接上篇<JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署>,通过一个简单的JSP WEB网站了解了JAVA WEB相关的知识,比如:Ser ...

  4. JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署

    接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...

  5. JAVA WEB快速入门之环境搭建

    前言 我是一直致力于:.NET技术栈.WEB前端.架构设计相关的开发与管理工作,但因国内大环境影响及公司技术方向发生转变(由.NET全部转为JAVA),需要熟练掌握JAVA WEB相关的知识,故我也得 ...

  6. MySql入门知识(一)

    概述 MySQL是一个真正多用户,多线程结构化查询语言数据库服务器.MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL的SQL语言是用于访问数据 ...

  7. 在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程

    http://jijiaa12345.iteye.com/blog/1739754 在MyEclipse下创建Java Web项目 入门(图文并茂)经典教程 本文是一篇在Myeclipse下构建Jav ...

  8. Java Web快速入门——全十讲

    Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲 ...

  9. day04 Java Web 开发入门

    day04 Java Web 开发入门 1. web 开发相关介绍 2. web 服务器 3. Tomcat服务器启动的问题 4. Tomcat目录结构 5. Web应用程序(虚拟目录映射,缺省web ...

随机推荐

  1. Java 类的热替换 —— 概念、设计与实现

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp71   Java 类的热替换 -- 概念.设计与实现 构建基于 Java ...

  2. Java基础学习 —— bat处理文件

    bat处理文件:就是一次性可以执行多个命令的文件 为什么要学bat处理文件? 快速运行一个软件我一般都会打包成jar包的形式来执行jar双击对图形界面管用 但是对控制台的程序是不起作用的.对于控制台的 ...

  3. web项目的发布

    1.我们将web项目布署到IIS上之前需要将我们的源码发布,然后再将发布后的代码布署到II上 2.首先在VS上打开我们的应用程序,在WEB层上右键->发布,会弹出一个"发布web&qu ...

  4. 个人总结-Alpha阶段

    一.个人总结 经过几周的Alpha阶段,对于软件设计有了大概的认识,也深刻感觉到一款软件设计出来的不易,每款软件背后都是开发人员辛勤的汗水.在软件开发的过程中,也是会出现很多的问题,出现各种各样的bu ...

  5. 201521123083《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  6. 201521123114 《Java程序设计》第8周学习总结

    1. 本章学习总结 2. 书面作业 Q1. List中指定元素的删除(题目4-1) 1.1 实验总结 使用iterator迭代器的remove()函数来移除元素,能够从最后一个元素来移除,可以避免从第 ...

  7. 201521123007《Java程序设计》第7周学习总结

    1. 本周学习总结 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 以下是ArrayList的contains源代码: public bool ...

  8. 201521123048 《java程序设计》 第10周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...

  9. 201521123121 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 进程:每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销,一个进程包含1--n个线程. 线程:同一类线程 ...

  10. 从文本中读取内容并把读取到的内容转化成二进制保存的形式(包含十进制数如何转换成二进制数dtob函数)

    #include<stdio.h> #include<string.h> #include<stdlib.h> #include<malloc.h> d ...