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. Entity Framework Core 2.0 数据库迁移

    看见过几篇其他大神写的关于EFCore2.0的文章.本人有点小白,一开始看文档的时候除了一些基本操作外其他部分几乎没有读懂,我估计会有一部分人跟我一样,因为人家读懂了的早就懂了. 在这里我写一下我自己 ...

  2. NSMutable属性声明时为什么不能使用copy

    在iOS开发里面我们经常会进行NSMutable(可变类型的类,常用的如NSMutableString,NSMutableArray,NSMutableDictionary,NSMutableData ...

  3. [转载]C header files matching your running 

    原文地址:C header files matching your running kernel were not found.作者:[Opser]小默 c header files matching ...

  4. 【Alpha阶段】第六次scrum meeting

    一.会议照片 二.会议内容 姓名 学号 负责模块 昨日任务完成度 今日任务 杨爱清 099 界面设计和交互功能 完成 设计界面 杨立鑫 100 数据库搭建和其他 完成 将数据库与其他模块连接 林 钊 ...

  5. 201521123009 《Java程序设计》第6周学习总结

    1. 本周学习总结 2. 书面作业 Q1:clone方法 1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么? 用protected修 ...

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

    1. 本周学习总结 2. 书面作业 1.clone方法 1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么? 实现克隆必须实现Clon ...

  7. java第二次实验

    1. 本章学习总结 答:学会在java中使用函数调用. 学会在Java程序中使用函数,使程序层次更清晰. 使用StringBuilder代替string拼接,减少内存空间的占用. 使用BigDecim ...

  8. 201521123048 《Java程序设计》第2周学习总结

    本周学习总结 (1)String类数据类型 (2)枚举类型应用 (3)Java数组创建及使用 (4)进一步运用和了解码云 书面作业 Q1.使用Eclipse关联jdk源代码,并查看String对象的源 ...

  9. 201521123022 《Java程序设计》 第十二周学习总结

    1. 本周学习总结 2. 书面作业 Q1.将Student对象(属性:int id, String name,int age,double grade)写入文件student.data.从文件读出显示 ...

  10. Java第十三周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...