1. 程式人生 > >資料庫及相關知識詳解大全

資料庫及相關知識詳解大全

友情提示以下內容是對資料庫以及相關知識所做的一個闡述,內容較多需多花費些各位看官寶貴時間,不過全是乾貨以及一些小的例項,我相信各位點進來的看官都會有所收穫。

資料庫介紹

什麼是資料庫?

資料庫(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方法可以回滾事務。它會回滾這次事務中的所有修改操作,並釋放當前連線所持有的資料庫鎖。

 

觸發器是一中特殊的儲存過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護資料的完整性和一致性,可以跟蹤資料庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。