您的位置:首页 > 编程语言 > Java开发

JavaWeb整理-数据库基础/数据库介绍.MySQL安装.DB DBS DBMS关系.登陆MySQL.SQL语言认识..SQL语言对数据库操作.SQL语言对数据表操作.SQL语言对数据表中的记录操作

2017-12-21 09:23 921 查看
数据库基础知识整理
前言:本章节属于数据库基础入门,知识体系不难,但是需要多敲代码,多练习,增强记忆和对SQL语言的理解,需要自己动手写出自己风格的思维导图,形成自己的理解风格及代码风格.理解SQL语言需要从DOS命令窗口手敲代码练习开始.敲代码练习只是进入学习的第一步,不要自我感觉良好,要用代码的风格表现自己的优秀.
 
一 数据库简介(从数据存储的方式来理解):

1.数组/集合:可以对数据进行临时性存储,当程序结束的时候,数据就被清空了.
2.文件(IO流):可以对数据进行永久性存储,但是不方便用户对数据进行精细化管理.
3.数据库:其实就是一个存储数据的仓库,其本质是一个文件系统,可以有规律的对数据进行存储,方便用户进行增删改查(CURD注:单词为缩写)的操作.(注:数据库才是实际开发中,我们存储数据的地方.)
二 常见数据库系统:

1.oracle:是Oracle公司产品,是大型的收费的数据库;
2.db2:是IBM公司的产品,是大型的收费的数据库;
3.SQLServer:是微软公司产品,是中型的数据库;
4.MySQL : 在oracle收购之后6.x版本开始收费,之前的版本是免费的;
5.SQLite:是小型的嵌入式数据库,应用在客户端开发中,比如安卓.

数据库系统MySQL的安装与卸载:
这个需要掌握,自己生存的依赖工具之一:
1.安装:首先关闭电脑自带的防火墙,彻底退出安全软件,根据电脑系统选择安装32位/64位系统;安装路径不要直接选择安装在盘符下并且不要出现空格/中文字符/特殊字符等.
2.卸载:卸载之前要对DATA数据进行备份,采用软件自带的卸载工具或者从电脑的控制面板中卸载,切记不要选用直接删除文件夹的方式;
3.容易出现的问题:如果是安装不成功,可以选择卸载重新装,或者换一个安装文件夹.如果一直是安装不成功,可能和系统有关,建议重新更换系统.如果电脑系统是一键Ghost安装的系统,极易发生安装不成功的情况.系统选择纯净版为佳.(建议Win7旗舰版
 Win10专业版)
四 DB()数据库)/DBS(数据库系统)/DBMS()数据库管理系统)之间的关系:

简而言之:DBS(数据库系统)通常由DB(数据库)、DBMS(数据库管理系统)和软件组成。

DB (数据库)、DBS(数据库系统)、DBMS(数据库管理系统)说明:

1、DB (数据库):Database;

2、DBMS(数据库管理系统):Database Management System;

3、DBS(数据库系统):DataBase System.
五 什么是关系型数据库:

 简言之:关系型数据库指的是实体与实体之间的关系.可以采用ER模型图进行描述.(注:ER模型图-Entity
Relational Model 实体联系图).

六 如何登陆MySQL:

登陆前提是:查看MySQL服务是否开启.
查看方式一:我的电脑--右键--管理--服务和应用程序--服务--查找mysql服务
查看方式二:  win +
字母R --services.msc  -- 回车--  查看MySQL服务
开启或者关闭MySQL服务:
方式一: 手动开启或者关闭.

方式二:(在DOS命令窗口中输入即可)

net start mysql //开启MySQL服务

net stop mysql //关闭MySQL服务

登陆方式一:Win+R--cmd--mysql -u root -p ---回车---出现entry password:---输入密码---回车进入--出现welcome界面.(在-u和root/root和-p之间存在空格).

登陆方式二:Win+R--cmd--mysql -uroot -p密码---回车,直接进入MySQL服务器

七 SQL语句认识:

SQL语句:对数据库(DBMS)进行交互访问(操作)的一种语言.(SQL-Structured
Query Language: 结构化查询语言,用来操作DBMS).
  备注:数据库是文件系统,使用标准SQL语句对数据库进行操作,标准SQL语句,在MySQL里面使用语句,在oracle、db2都可以使用这个语句.
SQL 语句分类:共四大类:DDL/DML/DCL/DQL
第一类:DDL (Data Definition Language数据定义语言)
      * 创建数据库,创建数据库表
* 关键字create   drop    alter
第二类:DML  (Data Manipulation Language数据操纵语言)
      * 对表中的记录进行增加 修改 删除操作
      * 关键字 insert  update  delete
第三类:DCL
(Data Control Language数据控制语言)
     * 数据库的编程的语言
第四类:DQL
(Data Query Language数据查询语言)
     * 对表中的记录进行查询的操作
* 关键字 select   from  where
八 SQL对数据库的操作(CURD):

1.C--增:create

采用默认码表创建数据库:create database
数据库名;

Eg:create databae exam; (数据库中默认存在test数据库).

采用指定码表创建数据库:create database
数据库名 character set '字符集名’ ;

Eg:create database Test character set ‘utf8’;

  create database exam character set ‘gbk’;

注:MySQL中安装时选择的默认码表是’utf8’国际通用码表.创建数据库是未指定码表,默认是utf8.

2.U-改:update

修改指定数据库的码表

alter database 数据库名 character set '字符集名';

Eg:alter database Test character set ‘gbk’;

3.R-查:read

查看所有的数据库:

show databases;

 查看指定的某个数据库(查的是该数据库的字符集)

show create database 要查看的数据库名;

Eg:show database Test;

            show database exam;

4.D-删:drop

         删除指定的数据库

        drop  database 数据库名;

5.使用指定的数据库:use

         使用指定的数据库

   use 数据库名;

九 SQL对数据库表的操作:

1.C
114f6
--增:create

create table 数据表名(

字段名 数据类型(长度) [约束],

字段名 数据类型(长度) [约束],

字段名 数据类型(长度) [约束]

);

Eg:创建表user,字段id name password gender .

案例:

create table user(

Id int,

name vachar(20),

password vachar(20),

gender vachar(6)----------------------最后一行字段末尾没有;号.

);------------------------括号外面有一个;号.

约束讲解:

约束:

作用: 用来保证数据的完整性和安全性.

分类:

主键约束: primary key   //auto_increment

唯一约束: unique

非空约束: not null

需求: 创建一个用户表(users):

create table users(

uid int,

username varchar(20),

password varchar(20),

salary double

);

添加约束之后的数据库表:

create table users2(

uid int primary key auto_increment,

username varchar(20),

password varchar(20),

salary double

);

 

MySQL的数据类型:

1.字符串型

VARCHAR、CHAR

* 当创建表时候,使用字符串类型,name varchar(40),指定数据的长度

* varchar和char的区别

** varchar的长度是可变的,比如 name varchar(5),存值a
,直接把a存进去

** char的长度是固定的,比如 name char(5),存值b,把b存进去,后面加很多空格

2.大数据类型

BLOB、TEXT

* 使用这个类型可以存储文件,一般开发,不会直接把文件存到数据库里面,存文件的路径

3.数值型

TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE

* 对应java里面

byte      short    int  long    float  double

4.逻辑性

BIT

* 类似java里面的boolean

5.日期型

DATE:用于表示日期 1945-08-15

TIME:用于表示时间 19:10:40

下面的两个类型可以表示日期和时间

DATETIME:手动添加时间到数据表里面

TIMESTAMP:自动把时间添加到表里面

 

2.U-改:alter

给数据表添加一列:

alter table 数据表名 add列名 列的类型 约束;

修改字段类型长度和约束

alter table 表名 modify字段名 类型(长度)约束;

修改字段名(列名):

alter table 表名 change旧字段名 新字段名 类型(长度)约束;

删除字段:

alter table 表名 drop字段名;

修改表名:

rename table 旧表名 to新表名;

修改表的字符集:

alter table 表名 character set字符集;

3.R-查:read

        查看所有的数据表:

show tables;

查询指定的数据表(表结构)

desc 数据表名;

 

4.D-删:drop

         删除指定的数据表

        drop 数据表名;

 

 十 SQL对数据表中的数据进行操作:

注意:

1. 值的个数必须和列的个数对应.

2. 值的类型和列的类型也必须对应.

3. 如果是数字类型可以直接写,其他类型用'  '括起来,eg:’aaa’.

4. SQL语句不区分大小写.

5. SQL语句的结束标记是:分号;

6. 进行删除和修改操作之前,一定一定一定要备份.

1.C-增:

添加单条数据:

格式:

insert into 数据表名(列名1,列名2,列名3...)
values(值1,值2,值3);

示例:

insert into users2(uid,username,password,salary) values(1, 'zs','123',1000);

insert into users2(username,password,salary) values('zs','123',1000);

insert into exam values(null,"张三",100,89,59);

批量添加:

insert into users2(username,password,salary) values('zl','111',6000),('tq','222',6000),('hb','333',6000);

如果添加的是中文, 有可能会添加不成功,原因是因为: DOS控制台是GBK码表,我们装MySQL的时候用的是UTF8,如何解决呢?

方案一: 临时解决.

set names 'gbk';

方案二: 永久解决.

修改 my.ini中的信息.

//将client的码表改为: gbk.

2.U-改:

 update 数据表名 set列名1=值,列名2=值where
条件;

3.R-查:

      基本的查询:

select * from 数据表名;

带条件的查询:

1. 算术运算符.

>, < ,>=, <=, =, !=(或者可以写作<>)

2. 逻辑运算符

and, or, not

3. 区间筛选

between 值1 and值2      //包含值1和值2这两条数据

4. 固定值筛选

in (值1,值2,值3);

5. 模糊查询

  like '占位符';

%: 占n个位置.

_: 占1个位置.

4.D-删:

      delete from 数据表名 where条件;

聚合函数:

sum()

max()

min()

avg()

count() //一般用于统计该表中有多少条数据.

补充案例: 

create table user (

    id int,

    username varchar(40),

    chinese int,

    english int

)

 

* insert into user values(1,'lucy',100,30);

insert into user values(2,'mary',60,80);

insert into user values(3,'jack',90,20);

 

(1)查询user表里面的所有的数据

select * from user;

(2)查询user表里面用户名和语文成绩

select username,chinese from user;

(3)查询user表里面id=2的数据

select * from user where id=2;

(4)别名

* as 别名

select username as u1,chinese as c1 from user;

(5)distinct,去除表里面重复记录

* 语句 select distinct * from表名;

(6)where子句

第一,运算符 < > >= <=

* 练习:查询user表里面语文成绩大于60的所有的人员

select * from user where chinese > 60;

第二,in:在范围内

* 练习:查询user表里面英语成绩是80、90的人员的信息

select * from user where english in (80,90);

第三,and:在where里面如果有多个条件,表示多个条件同时满足

* 练习:查询user表里面语文成绩是100,并且英语成绩是30的人员的信息

select * from user where chinese=100 and english=30;

第四,得到区间范围的值

* 练习:查询user表里面语文成绩在70-100之间的值

写法一,select * from user where chinese >=70 and chinese <=100;

写法二,select * from user where chinese between 70 and 100;

第五,like:模糊查询

* 练习:查询user表里面username包含a的人员信息

select * from user where username like '%a%';

(7)查看当前的运行的数据库

select database();

(8)对表中查询的记录排序order by

* order by写在select语句的最后

第一,升序 order by
要排序字段 asc(asc可以省略,默认的情况下就是升序)

* 练习:对user表里面查询的数据,根据语文成绩进行升序排列

select * from user order by chinese asc;

第二,降序 order by
要排序字段 desc

* 练习:对user表里面的英语成绩进行降序排列

select * from user order by english desc;

 

----------------------------------------------------------------------------------------------
分组查询:关键字: group by

案例: 已知:创建一个商品表: product

create table product(

pid int primary key auto_increment,

pname varchar(20),

price double

);

insert into product values(null,'冰箱',2000),

(null,'冰箱',1000),

(null,'冰箱',1500),

(null,'洗衣机',2000),

(null,'电视机',3000),

(null,'洗衣机',1000),

(null,'电视机',10000);

1. 统计每类商品的个数.

 select pname,count(*) from product group by pname;

2. 统计每类商品的总金额.

select sum(price) from product group by pname;

3. 统计每类商品的总金额,并且总金额大于4000

select pname,sum(price) sp from product group by pname having sp>4000;

4. 统计每类商品的总金额,并且总金额大于4000,然后按照总金额进行降序排列.

select pname,sum(price) sp from product group by pname having sp>4000 order by sp desc;

5. 统计每类商品的总金额,并且总金额大于2000,然后按照总金额进行降序排列,只统计单价在1500(包括)以上的商品.

select pname,sum(price) sp from product where price>=1500 group by pname having sp>2000 order by sp desc;

注意:

一个SQL语句中,各个语句体的位置:

select 列1,列2.. from表名
where分组前的条件筛选
group by分组的列
having分组后的条件筛选
order by排序的字段;

如果是分组前的条件筛选:
用where.

如果是分组后的条件筛选:
用having.

--------------------------------------------------------------------------------------------

习题:

1. where语句和having语句的区别是什么?

where语句用于做分组前的条件筛选,后边不能跟聚合函数.

having语句用于做分组后的条件筛选,后边可以跟聚合函数.

2. delete from 表名 和 truncate table表名 删除表之间有什么区别?

delete from 表名:只删除表中的数据,
对表结构没有任何影响. //主键接着往后+1,属于DML语句,可以和事务结合使用.

truncate table 表名:相当于把该表删除,然后创建一个和该表一模一样的表.
  //主键会重置(1),然后存储属于DDL.

结束语:本篇文章是总结了JavaWeb 数据库基础第一课内容,参考引用的有其他大神的知识点和案例内容,属于整理内容,为了表达对引用内容的尊重,故文章分类为 翻译 非原创.希望我们在学习的过程中要做到"能思 能写 能练",学习过程中要注意思考和练习,拒绝"只看不练的假把式",不要做很勤奋,做笔记很多但是就是不会的"劣质勤奋者".在不断的学习过程中形成自己的代码风格和思考风格,当然这种风格是良好有效的 而不是繁琐无效死钻牛角尖型.

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐