数据库及相关知识详解大全

友情提示以下内容是对数据库以及相关知识所做的一个阐述,内容较多需多花费些各位看官宝贵时间,不过全是干货以及一些小的实例,我相信各位点进来的看官都会有所收获。

数据库介绍

什么是数据库?

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

每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。

 

RDBMS即关系数据库管理系统(Relational Database Management System)的特点:

  • 1.数据以表格的形式出现
  • 2.每行为各种记录名称
  • 3.每列为记录名称所对应的数据域
  • 4.许多的行和列组成一张表单
  • 5.若干的表单组成database

RDBMS 术语

在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:

  • 数据库: 数据库是一些关联表的集合。.
  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • : 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
  • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

 

数据库是用来存放数据的。

数据库使用一个一个的表来存放数据。

数据库表与表之间的数据是有关系的。

现在的数据库都是关系型数据库。

主流的数据库:oracle、mysql、sqlserver、db2

Mysql安装

Win32的安装

注意选择编码为utf-8和把mysql的bin目录加入path,其他的一律下一步。

安装完成后,打开控制面板—管理工具—服务,可以查看mysql服务状态。

mysqld.exe是mysql服务启动程序

1G=1024M=1024*1024KB=1024*1024*1024B(byte)

Mysql服务属性中的启动类型

自动—计算机启动后自动启动mysql服务

手动—需要自己去启动mysql服务

Mysql bin目录下的MySQLInstanceConfig.exe可以重新修改配置

 

 

 

启动服务 net  start 服务名

停止服务 net  stop 服务名

注册服务 程序 –install

卸载服务 sc  delete  服务名   (sc == service)

进入mysql控制台,mysql  -uroot  -p   (u==username)   (p==password)

退出mysql控制台,  exit;

Mysql卸载

删除mysql安装版数据库的方法

1、运行mysql  bin 目录下的MySQLInstanceConfig.exe删除数据库实例和服务

2、运行安装包,删除mysql数据库程序。

3、删除c盘Program Files中的mysql目录

4、删除c盘隐藏文件夹Program Data中的mysql目录

 

Mysql常用命令

创建数据库

create  database 数据库名称;

删除数据库

drop  database 数据库名称;

 

show  databases;//查看有几个数据库。

use 数据库名;//使用某个数据库。

show  tables;//查看有几个表

desc 表名字;//查看表结构

 

命令行输入ipconfig可以查看本机ip地址

Ip地址是用来区分主机的

端口号是用来区分应用的

 

 

Sql介绍

Structured query language结构化查询语言

SQL 对大小写不敏感

SQL 以分号结尾

可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。

查询和更新指令构成了 SQL 的 DML 部分:

  1. SELECT - 从数据库表中获取数据
  2. UPDATE - 更新数据库表中的数据
  3. DELETE - 从数据库表中删除数据
  4. INSERT INTO - 向数据库表中插入数据

SQL 中最重要的 DDL 语句:

    1. CREATE DATABASE - 创建新数据库
    2. ALTER DATABASE - 修改数据库
    3. CREATE TABLE - 创建新表
    4. ALTER TABLE - 变更(改变)数据库表
    5. DROP TABLE - 删除表
    6. CREATE INDEX - 创建索引(搜索键)
    7. DROP INDEX - 删除索引

 

sql作用:

  1. SQL 面向数据库执行查询
  2. SQL 可从数据库取回数据
  3. SQL 可在数据库中插入新的记录
  4. SQL 可更新数据库中的数据
  5. SQL 可从数据库删除记录
  6. SQL 可创建新数据库
  7. SQL 可在数据库中创建新表
  8. SQL 可在数据库中创建存储过程
  9. SQL 可在数据库中创建视图
  10. SQL 可以设置表、存储过程和视图的权限

RDBMS

Relational database management system关系数据库管理系统

创建表 

create  table 表名称(

列名称 列类型,

列名称 列类型,

列名称 列类型

 ) ;

插入数据

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

删除所有数据

delete  from 表名称 ;

查询表的所有数据

select  *  from 表名称;

删除表

drop  table 表名称;

 

表的约束

非空约束

create table stu(

no int not null,#规定no不能为空

name char(10),

age int

);

唯一约束

两种类型的唯一约束

unique key uk_no (no)     为no添加唯一约束,约束名称是uk_no

unique key uk_no_age  (no, age)   为no和age添加唯一约束,约束的名字是uk_no_age,no和age放在一起不能与另外一条记录重复

注意unique key uk_no_age  (no, age)和

unique key uk_no (no)              

unique key uk_no (age)

有很大的区别

记录是指数据库表中的一行数据

 

为字段添加默认值

       gender CHAR (1) DEFAULT '男'

 

主键是能够唯一标识一条记录的字段。

主键有两个特点,非空和唯一

任何一张表都有一个主键

主键是某一列

主键的作用是唯一标识一条记录

主键的使用方式:

       PRIMARY KEY (NO)

可以设置某一列不为负值

       age INT UNS IGNED NOT NULL

CREATE TABLE stu (

       NO INT auto_increment,

       NAME CHAR (10) NOT NULL,

       age INT UNSIGNED NOT NULL,

       gender CHAR (1) DEFAULT '男',

       PRIMARY KEY (NO)

);

CREATE TABLE if not exists stu (  #如果不存在此表就创建表

插入数据时可以向指定列插入

insert into stu (name, age, gender) values('李四', 26, '女');

查询数据时可以只查询指定列的数据

select name,age from stu;

 

where条件查询

#查询编号为5的名称

select name from stu where no = 5;

#查询性别为'男'的学生

select * from stu where gender='男';

#查询性别不是男的学生

select * from stu where gender!='男';

#查询年龄小于20的学生

select * from stu where age<20;

#查询年龄大于20的女生

select * from stu where age >20 and gender='女';

 

更新数据

update stu set age = 20;#修改所有记录的年龄为20

update stu set age = 20 where name = '赵小四';#将姓名为赵小四的记录的年龄修改为20

update stu set age = 21,gender = '男';#修改所有记录的年龄为21,性别为男。

delete from stu where name='赵小四';#删除名称为赵小四的记录

 

select distinct(jg) from stu;#查询籍贯,去掉重复数据

 

select * from stu where age >=18 and age <=30; #查询年龄介于18到30岁之间的记录

select * from stu where age between 18 and 30;#查询年龄介于18到30岁之间的记录

select * from stu where age not between 18 and 30;#查询年龄不在18到30岁之间的记录

select * from stu where jg IS NULL;#查询籍贯是空的记录

select * from stu where jg IS NOT NULL;#查询籍贯不是空的记录

select * from stu where jg = '河北' or jg = '哈尔滨';#查询籍贯是河北和哈尔滨的记录

select * from stu where age in (18, 20, 21);#查询年龄为18,20,21的记录

select * from stu where age not in (18, 20, 21);#查询年龄不是18,20,21的记录

 

模糊查询

#%代表任意长度(0个、1个、多个)字符

#_匹配一个字符

name like '赵%';赵四 #以赵开头的

name like '%赵';小赵#以赵结尾的

name like '%赵%';赵四 小赵四 小赵 # 包含赵的

name like '赵_'; #以赵开头的两个字符的名字

 

排序

select * from stu order by age desc;降序 #按照年龄降序排列

select * from stu order by age asc;升序 #按照年龄升序排列

select * from stu order by claz asc,age asc;  #先按照班级升序排列,班级内按照年龄升序排列。

分页查询

select * from stu order by no asc limit 5;#取前五条数据

select * from stu order by no asc limit 10,5;#从第十一条开始,向后取5条,能取多少是多少

select * from stu order by no asc limit 1;#取第一条数据

select * from stu order by no desc limit 1;#取最后一条数据

 

统计函数

select min(age) from stu;#查询字段的最小值

select max(age) from stu; #查询字段的最大值

select avg(age) from stu; #查询字段的平均值

select sum(age) from stu; #查询字段的总和

select count(*) from stu;#查询记录的条数

select count(jg) from stu;#查询字段的条数,忽略NULL

 

分组查询

select jg, count(jg) from stu  group by jg;#统计各籍贯学生数

select claz '班级',jg '籍贯', count(no)  from stu  group by claz,jg; #统计各班级各籍贯学生数

select claz '班级', gender '性别', count(no) from stu group by claz,gender;#统计各班级男生数和女生数

select gender '性别', count(no) '人数' from stu where claz = '1班' group by gender;#统计一班的男生数和女生数

select claz,count(no) from stu group by claz order by claz desc;#统计各班的学生数,按照班级名称降序排列

select claz '班级', count(claz) '班内人数'  from stu  group  by claz

having count(claz) >= 5;#统计人数超过5的班级

having和where的区别:

having和where都是限定条件

where限定的是字段,having限定的是统计函数

where只能限定字段,having只能使用统计函数

where跟分组没有关系,而要是用having必须要先分组

 

外键和多表连接查询

在表中与另外一张表相关联的字段叫做外键

外键的数据来源于与之关联的表的主键

两个表关联总是通过外键来关联的

关联查询是把两个表先关联起来,组成一张新表,这张表包含了两个表的内容,然后就像查单表一样查这个新表。

 

一个张表可以有多个外键,只能有一个主键。

一张表的主键可以被多张表的外键来参照。

一张表的外键只能参照一张表的主键。

外键可以起到约束数据的作用。

 

查询persons表中的前两条记录

select * from persons limit 2;

 

查询年龄比较小的两个人

select * from persons order by age asc limit 10;

 

查询地址中包含“北”字的人

%代表0个或多个字符

这种查询叫做模糊查询

select * from persons where address like '%北%';

 

查询年龄是20或者25的人

select * from persons where age = 21 or age = 25;

select * from persons where age in(21,25);

 

查询年龄大于等于21并且小于等于25的人

select * from persons where age >= 21 and age <= 25;

select * from persons where age between 21 and 25;

 

查询年龄是22的人

select p.firstName from persons p where p.age = 22;

select firstName 姓氏,lastName 名字 from persons where age = 22;

 

主键:

主键(Primary Key)是一个列,在

这个列中的每一行的值都是唯一的。

主键的作用是为了唯一标识一条记录

主键必须是非空、唯一的。

 

orders表中的id_p列的数据来源于persons表的id_p

id_p是persons表的主键,id_o是orders表的外键

一个表的外键参照另外一个表的主键,从而将两个表建立起关系

外键所在的表叫做从表,被外键参照的主键所在的表叫做主表。

 

 

查询所有人的姓名和订单信息

只有orders表的id_p和persons表的id_p相同的数据才有意义

连接查询

select p.firstName,p.lastName, o.orderNumber

from persons p,orders o

where p.id_p = o.id_p

连接查询

select p.*, o.*

from persons p,orders o

where p.id_p = o.id_p;

内连接

只有左表和右表匹配的数据才会显示

select p.*,o.* from persons p

inner join orders o on p.id_p = o.id_p;

左外连接,左边表的数据必须显示在结果集中

如果右边表没有对象的数据,就补NULL

select p.*,o.* from persons p

left join orders o on p.id_p = o.id_p;

 

右外连接,右边表的数据必须显示在结果集中

如果左边表没有对象的数据,就补NULL

select p.*,o.* from persons p

right join orders o on p.id_p = o.id_p;

 

select p.*, o.* from orders o left join persons p on

p.id_p = o.id_p;

 

 

 

 

 

 

 

 

 

约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件

将中国员工表和美国员工表的数据联合到一起

union去掉重复,union all不去重

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。

列也必须拥有相似的数据类型。

select * from employees_china union

select * from employees_usa;

 

select * from employees_china union all

select * from employees_usa;

 

对persons表进行备份

mysql不支持select into

select p.* into persons_copy from persons p;

 

建表语句

在列的声明上使用唯一约束

create table stu(

s_id int(10),

s_first_name varchar(255) unique not null,

s_last_name varchar(255) not null,

s_age int(10),

s_gender char(1)

);

单独使用唯一约束

姓和名在一起使用唯一约束

create table stu(

s_id int(10),

s_first_name varchar(255) not null,

s_last_name varchar(255) not null,

s_age int(10),

s_gender char(1),

unique(s_first_name,s_last_name)

);

使用CONSTRAINT 关键字加约束

create table stu(

s_id int(10),

s_first_name varchar(255) not null,

s_last_name varchar(255) not null,

s_age int(10),

s_gender char(1),

CONSTRAINT xmwy unique(s_first_name,s_last_name)

);constraint 约束名约束类型具体的约束说明

 

删除约束

alter table stu drop index xmwy;

 

主键

在列的声明上使用主键

create table stu(

s_id int(10) PRIMARY key,

s_first_name varchar(255) unique not null,

s_last_name varchar(255) not null,

s_age int(10),

s_gender char(1)

);

 

主键

单独加主键

create table stu(

s_id int(10),

s_first_name varchar(255) unique not null,

s_last_name varchar(255) not null,

s_age int(10),

s_gender char(1),

PRIMARY key (s_id)

);

 

使用constraint关键字加主键

create table stu(

s_id int(10),

s_first_name varchar(255) unique not null,

s_last_name varchar(255) not null,

s_age int(10),

s_gender char(1) default '男',

CONSTRAINT pk PRIMARY key(s_id)

);constraint 约束名约束类型 具体的约束说明。

删除主键

alter table stu drop primary key;

 

 

给订单表加外键

alter table orders

add constraint fk

FOREIGN key(id_p) REFERENCES persons(id_p);

 

删除外键

alter table orders drop FOREIGN key fk;

 

default 约束

alter table persons alter city set default '北京';

撤销default约束

alter table persons alter city drop default;

 

创建索引

create index fn on persons (firstName);

如果创建了索引,在执行查询语句时

数据库会自动的翻看索引

select * from persons where firstName='张';

 

删除索引

drop index fn on persons;

删除stu表

drop table stu;

删除表中数据

delete * from stu;

删除数据库

drop database aaa;

删除全表的数据

truncate table stu;

 

stu表加一列

alter table stu

add column tel varchar(255);

删除一列

alter table stu

drop column tel;

自动增长,自动增长只能给主键加

create table stu(

s_id int(10) PRIMARY key auto_increment,

s_first_name varchar(255) not null,

s_last_name varchar(255) not null,

s_age int(10),

s_gender char(1)

);

 

查询性别是NULL的学生

select * from stu where s_gender is NULL;

select * from stu where s_gender is not NULL;

 

视图一个虚拟的表,它的数据来源于真实的表

对数据源表的数据的改变,会反映到视图上

create view dd as

select p.firstName,p.lastName,o.orderNumber

from persons p inner join orders o

on p.id_p = o.id_p;

视图的作用:简化查询

select * from dd where orderNumber = 77895;

 

drop view dd;

 

日期函数

当前的日期和时间

select now();

当前的日期

select curdate();

当前的时间

select curtime();

格式化日期

select date_format(now(), '%Y-%m-%d %k:%i:%s');

 

 

 

 

 

计算perons表中人的平均年龄

select avg(age) from persons;

查询persons表中年龄高于平均值的人

子查询(一个查询中嵌套了一个查询)

select * from persons

where age > (select avg(age) from persons);

 

查询表中有多少条数据

select count(*) from persons;

count(column_name)不包括NULL

select count(lastName) from persons;

 

查询一共有几种居住地

select count(distinct address) from persons;

找出最大年龄

select max(age) from persons;

找出年龄最大的人

select * from persons

where age = (select max(age) from persons);

最小 MIN(age)

计算年龄的和

select sum(age) from persons;

 

分组查询每个人订单总金额

分组查询的结果只能是统计函数的结果,或者是

分组的字段

select id_p, sum(order_price) from orders

group by id_p;

 

统计各个地区的人数

select city, count(*) from persons

group by city;

统计查询人数大于等于2的地区

select city, count(*) cc from persons

group by city

having cc >=2;

统计查询人数大于等于2的地区

select city from persons

group by city

having count(*) >=2;

查询各个地区的男同学的人数

select city, count(*) from persons

where gender = '男'

group by city;

查找男同学人数大于等于2的地区

select city from persons

where gender = '男'

group by city

having count(*) >=2;

where是对单个属性进行限制

having是对统计结果进行限制

 

 

数据库是关系型数据库

一对多

多对一

一对一

多对多

 

一个人有多个订单,一个订单属于一个人,人员表和订单表是一对多的关系

订单表和人员表是多对一

一对多和多对一,外键是多的表上

 

mysql为数据库,MySQL是服务,可以理解为mysql数据库服务(注意:重点强调服务”)sql是数据库的查询语言              

目前使用最流行的两种后台数据库即为MySQL and SQL Server。这两者最基本的相似之处在于数据存储和属于查询系统。你可以使用SQL来访问这两种数据库的数据,因为它们都支持ANSI-SQL。还有,这两种数据库系统都支持二进制关键词和关键索引,这就大大地加快了查询速度。同时,二者也都提供支持XML的各种格式。 
二者所遵循的基本原则是它们的主要区别:开放vs保守。SQL服务器的狭隘的,保守的存储引擎与MySQL服务器的可扩展,开放的存储引擎绝然不同。
发行费用:MySQL不全是免费,但很便宜,而SQL费用就要高一些。
1.  MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 1应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
2.  SQL Server (Microsoft SQL Server)是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点。
3.  结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统
 

JDBCJava Database Connection 也就是Java数据库连接)是如何实现Java程序和JDBC驱动的松耦合的?

JDBC API使用Java的反射机制来实现Java程序和JDBC驱动的松耦合。

什么是JDBC连接,在Java中如何创建一个JDBC连接?

JDBC连接是和数据库服务器建立的一个会话。

创建JDBC连接很简单,只需要两步:

  1. 注册并加载驱动:Class.forName()
  2. DriverManager获取连接对象

 

JDBCDriverManager是用来做什么的?

JDBCDriverManager是一个工厂类,我们通过它来创建数据库连接。

Java程序中,如何获取数据库服务器的相关信息?

使用DatabaseMetaData可以获取到服务器的信息。

JDBCStatement是什么?

StatementJDBC中用来执行数据库SQL查询语句的接口。通过调用连接对象的getStatement()方法我们可以生成一个Statement对象。我们可以通过调用它的execute()executeQuery()executeUpdate()方法来执行静态SQL查询。

JDBCPreparedStatement是什么?

PreparedStatement对象代表的是一个预编译的SQL语句。用它提供的setter方法可以传入查询的变量。

 

相对于StatementPreparedStatement的优点是什么?

它和Statement相比优点在于:

  • PreparedStatement有助于防止SQL注入,因为它会自动对特殊字符转义。
  • PreparedStatement可以用来进行动态查询。
  • PreparedStatement执行更快。尤其当你重用它或者使用它的拼量查询接口执行多条语句时。
  • 使用PreparedStatementsetter方法更容易写出面向对象的代码,而Statement的话,我们得拼接字符串来生成查询语句。

PreparedStatement的缺点是什么?

PreparedStatement的一个缺点是,我们不能直接用它来执行in条件语句

JDBCResultSet是什么?

在查询数据库后会返回一个ResultSet,它就像是查询结果集的一张数据表。

JDBC通过StatementPreparedStatement中的addBatchexecuteBatch方法来支持批处理。

如何回滚事务?

通过Connection对象的rollback方法可以回滚事务。它会回滚这次事务中的所有修改操作,并释放当前连接所持有的数据库锁。

 

触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。

 
 

猜你喜欢

转载自blog.csdn.net/W_Y_L_/article/details/83055502