資料庫的簡介和MySQL增刪改查

忘記自我介紹發表於2020-11-08

1、資料庫的介紹

1.1、資料庫概述

資料庫的儲存方式

Java中建立物件,物件儲存在記憶體中,學習了IO流,可以把資料儲存到檔案中。

儲存位置優點缺點
記憶體速度快不能永久儲存,資料是臨時狀態
檔案資料可以永久儲存運算元據不方便,查詢某個資料
資料庫1)資料可以永久儲存
2)查詢速度快
3)對資料管理方便
佔用資源,需要購買

什麼是資料庫

1)DB:資料庫(Database)即儲存資料的倉庫,它儲存類一系列有組織的資料。

2)本質上是一個檔案系統,還是以檔案的方式儲存在伺服器上的

3)所有的關係型資料庫都可以使用SQL語句進行管理

4)DBMS (DataBase Management System)資料庫管理系統:是一種操作和管理資料庫的大型軟體,例如:資料庫的建立、維護等

5)關係型資料庫是目前最普遍的一種資料庫型別

1.2、資料庫對比

MySQL:開源免費的資料庫,小型的資料庫,已經被Oracle收購了。MYSQL也有收費版本。Sun公司收購了MySQL,然後Oracle又收購了Sun公司。

Oracle:收費的大型資料庫

DB2:IBM公司的資料庫產品,收費的,常應用在銀行系統中

SQL Server:MicroSoft公司收費的中型資料庫,C#、.Net等語言開發常使用

SQLite:嵌入式的小型資料庫,應用在移動終端

1.3、為什麼選擇MySQL

1)免費

2)功能強大

MySQL是一種開放原始碼的關係型資料庫管理系統,開發者為瑞典MySQL AB公司,在2008年被Sun公司收購,而2009年,Sun又被Oracle收購。目前MySQL被廣泛用在Interne上,無論大小企業目前都在很廣泛的使用MySQL。由於其體積小、速度快、成本低、尤其開源這一特點,使得很多的網際網路公司都選擇類MySQL作為資料庫。(Facebook,Twitter、YoutuBe、阿里系、去哪兒、攜程、騰訊等等)。

阿里系(螞蟻金服)主要使用兩種關係型資料庫:OceanBase和MySQL。

關係型資料庫:關係型資料庫的表採用二維表格來儲存資料,是一種按行與列排列的具有相關資訊的邏輯組,它類似於Excle工作表。一個資料庫可以包含任意多個資料表。表中的一行即為一條記錄。資料表中的每一列稱為一個欄位,表是由其包含的各種欄位定義的,每個欄位描述了它所含有的資料的意義,資料表的設計實際上就是對欄位的設計。建立資料表時,為每個欄位分配一個資料型別,定義它們的資料長度和其它屬性。行和列的交叉位置表示某個屬性值。

1.4、MySQL目錄結構

MySQL目錄結構描述
bin目錄所有mysql的可執行檔案,如mysql.exe
include目錄本地系統檔案
lib所需要的第三方庫
share共享檔案目錄

1.5、資料庫管理系統

資料庫管理系統(DataBase Management System,簡稱:DBMS):指一種操作和管理資料庫的大型軟體,用於建立、使用和維護資料庫,對資料庫進行統一管理和控制,以保證資料庫的安全性和完整性。使用者通過資料庫管理系統訪問資料庫中表內的資料。

1.6、資料庫管理系統、資料庫和表的關係

資料庫管理系統(DBMS)可以管理多個資料庫,一般開發人員會針對每一個應用建立一個或多個資料庫。為儲存應用中實體(物件)的資料,一般會在資料庫建立多個表,以儲存程式中物件的資料。

1.7、結論

一個資料庫伺服器可以包含多個資料庫

一個資料庫可以包含多張表

每張表中都可以儲存多條記錄

2、SQL

2.1、什麼是SQL

Structured Query Language 結構化查詢語言,一個專門用來操作關係型資料庫的語言。

2.2、SQL作用

是一種所有關係型資料庫的查詢規範,不同的資料庫都支援

通用的資料庫操作語言,可以用在不同的資料庫中

不同的資料庫SQL語句有一些區別

SQL規範就是普通話,MYSQL特有(方言)、Oracle特有(方言)

2.3、 SQL語句的分類

Date Definition Lanuage(DDL 資料定義語言)如,建立資料庫,建立表

Data Manipulation Language(DML資料操作語言)如,對錶中記錄操作增刪改

Data Query Language(DQL資料查詢語言),如,對錶中的資料進行查詢操作

Data Control Language(DCL資料控制語言)如:對使用者許可權設定

2.4、 MySQL的語法

1)每條語句以分號結尾

2)SQL中不區分大小寫,關鍵字大寫和小寫一樣

3)註釋

註釋語句說明
- -空格單行註釋
/**/多行註釋
#這是mysql特有的註釋方式

2.5、DDL運算元據庫

2.5.1、建立資料庫

建立資料庫:CREATE DATABASE 資料庫名;

判斷資料庫是否已經存在,不存在則建立資料庫:CREATE DATABASE IF NOT EXISTS 資料庫名;

建立資料庫並指定字符集:CREATE DATABASE 資料庫名 CHARACTER SET 字符集;

-- 直接建立資料庫 db1
create database db1;

-- 判斷是否存在,如果不存在則建立資料庫db2
CREATE DATABASE IF NOT EXISTS DB2;

-- 建立資料庫並且指定字符集為utf8
CREATE DATABASE DB3 default character set utf8;

2.5.2、檢視資料庫

-- 檢視所有的資料庫
show databases;

-- 檢視某個資料庫的定義資訊
show create database db3;
show create database db2;

2.5.3、修改資料庫

修飾資料庫預設的字符集:

ALTER DATABASE 資料庫名 DEFAULT CHARACTER SET 字符集;

-- 修改資料庫預設的字符集
alter database DB3 default character set gbk;

2.5.4、刪除資料庫

語法:DROP DATABASE 資料庫名;

-- 刪除資料庫
drop database db3;

2.5.5 、使用資料庫

檢視正在使用的資料庫:SELECT DATABASE();

使用/切換資料庫:USE 資料庫名;

-- 檢視正在使用的資料庫
select database();

-- 改變要使用的資料庫
USE db1;

2.6、DDL操作表結構

前提先使用某個資料庫:use 資料庫名;

2.6.1、建立表

語法格式:
CREATE TABLE 表名(
   欄位名1 欄位型別,
   欄位名2 欄位型別
);

2.6.2、 MYSQL資料型別

分類型別名稱型別說明
整數tinyInt微整型,很小的整數(佔8位)
smallInt小整型(佔16位)
mediumint中整型(佔24位)
int(integer)整型(32位)
小數float單精度
double雙精度
日期型別time表示時間型別
date表示日期型別
datetime同時可以表示日期和時間型別
字串char(m)固定長度的
varchar(m)可變長度的字串,使用幾個字元佔用幾個,m為0-65535之間的資料
大二進位制blob允許長度0-65535
longblob
大文字text允許長度0-65535
longtext最大可以儲存4G的內容

2.6.3、建立表

建立一個student表,包含id,name,birthday欄位

create table student(
 id int,
 name varchar(20),
 birthday date
);

2.6.4、檢視錶

檢視某個資料庫中所有的表:show tables

檢視錶結構:DESC 表名;

檢視建立表的SQL語句:show create table 表名;

2.6.5、快速建立一個表結構相同的表(MYSQL特有)

create table 新表名 LIKE 舊錶名;

2.6.6、刪除表

直接刪除表:DROP TABLE 表名;

判斷表是否存在,如果存在則刪除表:DROP TABLE IF EXISTS 表名;

2.6.7、修改表結構

新增列:ALTER TABLE 表名 ADD 列名 型別;

修改列型別:ALTER TABLE 表名 MODIFY 列名 新的型別;

修改列名:ALTER TABLE 表名 CHANGE 舊列名 新列名 型別;

刪除列:ALTER TABLE 表名 DROP 列名;

修改表名:RENAME TABLE 表名 TO 新表名;

修改字符集:ALTER TABLE 表名 character set 字符集;

2.7、DML操作表中的資料

用於對錶中的記錄進行增刪改操作

2.7.1、插入記錄

插入全部欄位,所有的欄位都寫出來:

INSERT INTO 表名(欄位名1,欄位名2,…) VALUES(值1,值2,…)

值和欄位一一對應

不寫欄位名

INSERT INTO 表名 VALUES(值1,值2,…)

插入部分資料

INSERT INTO 表名(欄位1,欄位2) VALUES(值1,值2)

insert into students(id,stuName,birthday) values(1001,'zhangsan','2000-10-21');

insert into students values(1002,'lisi','2001-11-05');

insert into students(id,stuName) values(1001,'wangwu');

2.7.2 、更新表記錄

更新表中所有相關的資料

UPDATE 表名 SET 列名=更新值,列名=更新值

帶條件的修改

UPDATE 表名 SET 列名=更新值,列名=更新值 WHERE 欄位名=值;

update students set birthday='2019-01-01';

update students set birthday='2010-10-01' where id=1002;

2.7.3、刪除表記錄

不帶條件刪除資料:delete from 表名;

帶條件刪除資料:delete from 表名 where 欄位名=值;

重置表:truncate table 表名

truncate相當於刪除表的結構,在建立一張表,實際上就是表的重置

delete from students where id=1002;

delete from students;

truncate table students;

2.8、DQL查詢表中的資料

2.8.1、簡單查詢

查詢表中所有行和列的資料:

SELECT * FROM 表名;

查詢指定列:

SELECT 欄位名1,欄位名2,… FROM 表名;

給列指定別名:

SELECT 欄位名1 AS 別名,欄位名2 AS別名 FROM 表名;

select * from students;

select id ,stuName from students;

select id as '編號',stuName as '姓名' from students;

查詢指定列並且結果不出現重複資料

SELECT DISTINCT 欄位名 FROM 表名;

select distinct stuName,id from students;

列資料算術運算:

SELECT 列名1+固定值 FROM 表名;

某列資料和其它列資料參與運算:

SELECT 列名1+列名2 FROM 表名;

2.8.2、條件查詢

如果沒有查詢條件,則每次查詢所有的行,實際應用中,一般要指定查詢條件,對記錄進行過濾。

語法:SELECT * FROM 表名 WHERE 條件;

比較運算子:

比較運算子說明
>、<、<=、>=、=、<><>在SQL中表示不等於,在mysql中也可以使用!= 沒有==
BETWEEN AND在一個範圍內,比如:between 1002 and 1005,包含頭和尾
IN(值1,值2,…)匹配值列表就是符合條件的
LIKE ‘規則’模糊查詢,_ 代表一個字元,%代表任意字元
IS NULL查詢某一列為NULL的值
select * from students where id<>1001;

select * from students where id between 1001 and 1004;

select * from students where id in(1001,1002,1003);

select * from students where stuName like '_h%';
use db1;
update students set age=20;

select * from students where age is null;

邏輯運算子:

邏輯運算子說明
and 或 &&與shu
or 或 II
not 或 !
select * from students where id=1001 and stuName='haha';

select * from students where id=1001 or stuName='haha';

select * from students where age is not null;

select * from students where id not in(1001,1002,1003);

select * from students where id not between 1003 and 1005;

select * from students where stuName not like 'z%';

相關文章