MySQL database (1)

These few days are not particularly busy, so I will take the time to do a comprehensive review of the database at night, and write a few blogs to make a record of this knowledge, so as to facilitate my future review and review, and I hope to communicate with more friends. If there is any inappropriateness, I hope everyone can enlighten me.

1. Introduction to the database

Question: What is a database and what does it do?

A database is a warehouse that stores data. It can help us to persist data.

The IO stream can also help us do persistent operations. The essence of using a database is to manipulate files. That is to say, the bottom layer of the database uses the file system to help us store data. However, it is not necessary to directly operate the IO API, but The operation is done through the syntax provided by the database, which is more convenient and efficient than the IO stream. With a database, we can do CRUD operations on the data

common database

1. Oracle large-scale charges are widely used in java development.

2. sqlserver Microsoft Medium and large charges

3. MySQL small and medium free database open source

4. DB2 IBM Large Charge 

A relational database is a database based on a relational model, which uses mathematical concepts and methods such as set algebra to process data in the database.

The development process of the database is as follows:

l No database, use disk files to store data;

l Hierarchical model database;

l Network structure model database;

l Relational structure model database, using two-dimensional tables to store data;

l relational-object model database;

 

The MySQL we are going to learn today is the relational structure model database management system, referred to as the relational database management system

Database Management System (DBMS)


We usually refer to the database management system as a database. When we install a database (database server), we can create a database in the database server, and each database can also contain multiple tables

Through the above figure, we know the relationship between the database and the table, then how our data is stored in the database


A table in a database is a table with multiple rows and multiple columns. When creating a table, you need to specify the number of columns in the table, as well as column names, column types, and other information. Instead of specifying the number of rows in the table, there is no upper limit to the number of rows.

The columns in the table are called fields, and the rows in the table are called records.

Then use our familiar java program to compare with relational data, we will find the following correspondence.

class ------- table

Attributes in the class ------- Fields in the table

对象--------记录。

关于MySQL数据库的安装与卸载我就不在这篇文章中描述了,有需要的请看我的博客--MySQL的卸载与安装。


1.SQL是什么,它的作用是什么

结构化查询语言(Structured Query Language)简称SQL,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系型数据库

2.SQL分类

SQL一共分成四类,如下所示:

1.数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等,例如创建、删除、修改:数据库、表结构等;

2.数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新,例如:增、删、改表记录;

3.数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户;

4.数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。

大家可能会对DDL和DML分的不太清楚,DDL是对数据库或表的结构进行操作,而DML是对表的记录进行操作(增、删、改)。以上四个分类,我们以后最常用的就是DDL、DML、DQL,其中,DQL是难点。

3.SQL语法

SQL的语法有以下要求:

1.SQL语句可以单行或多行书写,以分号结尾;

2.可使用空格和缩进来增强语句的可读性;

3.MySQL数据库的SQL语句不区分大小写,建议使用大写,例如:SELECT * FROM user。


库操作:

1. 创建数据库

格式1:  create database 数据库名称;

格式2:  create databse 数据库名称  character set 编码集

格式3   create database 数据库名称 character set 编码集COLLATE 校对

2. 查看数据库

Show databases; 查看当前服务器下所有数据库。

Show create database 数据库名称  查看当前指定的数据库的创建sql

3. 修改数据库

Alter databse 数据库名称  character set 字符集  collate 校对。

4. 删除数据库

Drop database 数据库名称

5. 其它操作

切换数据库

Use 数据库名称;

查看当前正在使用的数据库

Select database();


表操作

1. 创建表

Create table 表名(

字段名称 类型,

字段名称 类型,

……..

字段名称 类型

);

 注意:最后一句的类型后面不用加“逗号”


2.创建表--指定字符集与校对

create table 表名(

字段1 类型,

字段2 类型,

.....

) character set 字符集  collate 校对;



3. 关于mysql中的创建表时的字段类型问题(重点)

在java中常见的数据类型

基本类型:

整型  byte short int long

浮点  float  double

布尔  boolean

字符  char

引用类型

字符串  String

日期  Date

 

在mysql中与其对应:

TINYINT----byte

SMALLINT—short

INT-------------int

BIGINT--------long

 

在mysql中定义浮点也使用float  double

在mysql中描述boolean类型,也是使用数值类型.

在mysql 中所谓字符与字符串是一样的。

Char : 它是定长的字符串  不会随着内容的长度变化而变化  效率 高,不节省表空间。

varchar: 它是可变长度的字符串,会随着内容的长度变化而变化,效率低,节省表空间

char与varchar区别?

char是一个定长字符串.指定长度不会随着内容的不足而改变

varchar是一个可变长度的字符串,它根据信息自动改变长度.(只在字符串长度小于指定长度情况下)


在mysql中如果一个字段是字符串类型,必须指定长度。

关于mysql中的日期类型

在jdk API中有这样的类

 java.sql.Date    java.sql.TimeStamp  java.sql.Time

 这三个类是java.util.Date的子类。

 

在mysql中的日期类型有:

Date  只包含年月日

Datetime  包含年月日时分秒

Time  时分秒

Timestamp  它代表的是一个时间戳(毫秒值)

 

Decimal,它也是浮点类型   decimal(5,2) 长度为5,小数点后保留两位。

 

Mysql中的大数据类型:

Blob-----在二进制  

Tinyblob(255)   blob(65536)  mediumblob(16m)   longblob(4g)

Clob----大文本类型  在mysql中它叫做text

Tinytext(255)  text(65536)  mediumtext(16m)  longtext(4g)

类型

描述

int

整型,和java中的int类型一样;

double

浮点型,例如double(5,2)表示该列存放的数据最多是5位,而且其中必须有2位小数,它的最大值是:999.99;

decimal

浮点型,用于保存对准确精度有重要要求的值,例如与金钱有关的数据。

char

固定长度字符串类型,如果没有指定长度,默认长度是255,如果存储的字符没有达到指定长度,mysql将会在其后面用空格补足到指定长度;

varchar

可变长度字符串类型,它的长度可以由我们自己指定,它能保存数据长度的最大值是65535,如果存储的字符没有达到指定的长度,不会补足到指定长度;

tinytext

可变长度字符串类型,其存储范围是28-1B;

text

也是可变长度字符串类型,其存储范围是216-1B;

mediumtext

也是可变长度字符串类型,其存储范围是224-1B;

longtext

也是可变长度字符串类型,其存储范围是232-1B;

tinyblob

是可变长度二进制类型,其存储范围是28-1B;

blob

是可变长度二进制类型,其存储范围是216-1B;

mediumblob

也是可变长度二进制类型,其存储范围是224-1B;

longblob

也是可变长度二进制类型,其存储范围是232-1B;

date

日期类型,格式为yyyy-MM-dd,只有年月日,没有时分秒;

time

时间类型,格式为hh:mm:ss,只有时分秒,没有年月日;

timestamp

时间戳类型,格式为:yyyy-MM:dd hh:mm:ss,年月日,时分秒都有。


约束

它是用于限定表中字段。

我们在mysql课程中会介绍5种约束(注意:数据库中一共有六种约束,而mysql只支持五种)

1.主键约束

主键是用于标识当前记录的字段。它的特点是非空,唯一。

在开发中一般情况下主键是不具备任何意义,只是用于标识当前记录。

创建主键:

1.在创建表时,在字段后面加上  primary key.

create table tablename(

id int primary key,

.......

)

2.也可以表创建的最后来指定主键 create table tablename(

id int,

.......

primary key(id)

)

3.删除主键:alter table tablename drop primary key ;

2.唯一约束

某一列的值不为重复可以使用唯一约束. unique  

3.非空约束

not null

4.默认值约束

default 值

5.外键约束(见MySQL(二))

6.check约束(mysql不支持)


表操作-查看修改删除表
查看表
查看表结构
desc表名;

查看当前数据库下所有表

show tables;

查看表的字符编码集

show create table 表名;

修改表

修改表的结构语法格式:alter table 表名 关键字 ….;

关键字有以下几个:

1.add----添加列操作   alter table 表名  add 列名 类型;

2.modify--修改列的类型 alter table 表名  modify 列名  类型;

3.drop --删除列  alter table 表名  drop 列名.

4.change--修改列名称  alter table 表名 change 旧列名  新列名  类型;

修改表的名称

rename table 旧表名 to 新表名;

修改表的字符编码集

alter table 表名 character set 字符集;

 
 

记录操作-insert操作

插入所有列值

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

表名后面是当前表中所有字段名称

插入部分列值

insert into 表名(列名1,列名2) values(列值1, 列值2);

表名后面是当前表中部分字段名称

不指定列名

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

没有给出要插入的列,那么表示插入所有列;

值的个数必须是该表的列的个数;

值的顺序,必须与表创建时给出的列的顺序相同。

代码示例:

insert into user(id,username,password,gender,email,telephone,introduce,activecode,state,role,registTime) values(null,"james","123","male","[email protected]","13888888888","good boy","111",1,"admin",null);

 


插入操作注意事项

插入的数据应与字段的数据类型相同

数据的大小应该在列的长度范围内

在values中列出的数据位置必须与被加入的列的排列位置相对应。

1.除了数值类型外,其它的字段类型的值必须使用引号引起。

2.如果要插入空值,可以不写字段,或者插入 null.

3.注意:对于自动增长的列在操作时,直接插入null值即可.


记录操作-update操作

下面语句会将指定字段的值全部修改

update 表名 set 字段名称=值;

如果要修改多个字段

update 表名 set 字段1名称=值 ,字段2名称=值,...;

以上方式,进行修改,会将表中这个字段所有值都修改.

在实际开发中,对于修改操作,都是有条件修改.

update 表名 set 字段=值 ,... where 条件.


记录操作-delete操作

delete操作是删除数据.

格式  delete from 表名.

这会将表中所有数据删除。在开发一般情况下有条件删除

delete from 表名 where 条件.

 

关于删除表与删除表数据区别:

1.删除表   drop table 表名

2.删除表中记录

1.delete from 表名

2.truncate table 表名

关于delete 与truncate的区别?

1.delete是一行一行删除   truncate是将表结构销毁,在重新创建表结构.

如果数据比较多,truncate的性能高。

2.delete是dml语句  truncate dcl语句

delete是受事务控制. 可以回滚数据.

truncate是不受事务控制. 不能回滚.


记录操作-select基本查询

查询指定列

 select 字段 from 表名;

查询指定字段信息,如果要查询多个字段

 select 字段1,字段2,...from 表名;

查询所有列

select * from 表名;

查询表中所有字段.

注意:使用"*"在练习,学习过程中可以使用,在实际开发中,不建议使用。

去掉重复记录

select distinct 字段 from 表名;

distinct它的作用是去除重复.

使用别名

使用as 别名可以给表中的字段,表设置别名.

在查询中可以直接对列进行运算

我们在sql操作中,可以直接对列进行运算。

ifnull函数使用

在对数值类型的列做运算的时候,如果做运算的列的值为null的时,运算结果都为null,为了解决这个问题可以使用ifnull函数

代码示例:

1. 查询出所有商品信息

Select * FROM PRODUCTS;

2. 查询出所有商品的名称,价格,类别及数量信息

SELECT NAME,PRICE,CATEGORY,PNUM FROM PRODUCTS;

3. 查询出所有的商品类别

SELECT DISTINCT CATEGORY FROM PRODUCTS;

4. 查询出所有商品的名称及价格,将所有商品价格加10

SELECT NAME,ifnull(PRICE,0)+10 价格  from products;

5. 查询出每一个商品的总价及名称

Select ifnull(price,0)*ifnull(pnum,0) 总价,name from products;


记录操作-where子句

我们在开发中,使用select操作,一般都是有条件查询,那以我们介绍一下关于where子句的使用

  格式 :select 字段  from 表名  where 条件;

where条件种类:

1.比较运算符

> >= < <= = !=(<>)

2.逻辑运算符

and  or not

3.between ...and

相当于 >= and <=

注意:between 后面的值必须是小值 and后面的是大值

4.in

可以比较多个值

5.like

模糊查询

通配符使用:

1.% 匹配多个

2._ 匹配一个

6.null值操作

 is null; 判断为空

 is not null; 判断不为空



记录操作-order by排序

在开发中,我们从数据库中查询出的数据经常需要根据某些字段进行排序,可以使用order by关键字,后面跟的就是要排序的列

order by 子句是select的最后的一个子句。

asc 升序 (默认)

desc 降序


记录操作-聚合函数

之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个单一的值;另外聚合函数会忽略空值。

今天我们学习如下五个聚合函数:

1.count:统计指定列不为NULL的记录行数;

2.sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

3.max:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;

4.min:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;

5.avg:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;



记录操作-分组操作

分组查询是指使用group by字句对查询信息进行分组,例如:我们要统计出products表中所有分类商品的总数量,这时就需要使用group by 来对products表中的商品根据category进行分组操作.

分组后我们在对每一组数据进行统计。

分组操作中的having子名是用于在分组后对数据进行过滤的,作用类似于where条件。

 

笔试题: having与where的区别:

1.having是在分组后对数据进行过滤.

  where是在分组前对数据进行过滤

  

2.having后面可以使用分组函数(统计函数)

   where后面不可以使用分组函数。


代码示例:

1.  查询所有计算机类商品信息

select * from products where category=”计算机”;

2. 查询出商品价格大于90的商品信息

Select * from products where price>90;

3. 查询出商品总价大于10000的商品信息

Select * from products where (ifnull(price,0)*ifnull(pnum,0))>10000;

4. 查询出价格在100-200之间的商品信息

Select * from products where price>=100 and price<=200;

Select * from products where price between 100 and 200;

5. 查询出商品价格是65,100190的商品信息

Select * from products where price in(65,100,190);

6. 查询出商品的名称中包含java的商品信息。

Select * from products where name like ‘%java%’;

7. 查询出书名是两个字的商品信息

Select * from products where name like “__”;

8. 查询出商品价格不为null商品信息

Select * from products where price is not null;

select * from product where not price is null;



记录操作总结

综合我们学习的查询相关关键字:select,from,where,group by,having,order by;它们的执行顺序是如下:

1.from:首先执行from,找到要查询的emp表;

2.where:判断条件,筛选出工资大于15000的所有记录;

3.group by:根据以上关键字执行的结果上对记录按照指定列进行分组

4.having:对分组后的信息进行筛选;

5.select:选择所需要的列信息;

6.order by:对查询信息进行排序。

在SQL语言中,第一个被处理的子句是from字句,尽管select字句最先出现,但是几乎总是最后被处理。
























 


Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326000619&siteId=291194637