java----day28(資料庫MySql)
資料庫
- 什麼是資料庫
資料庫就是儲存資料的倉庫,其本質是一個檔案系統,資料按照特定的格式將資料儲存起來,使用者可以對資料庫中的資料進行增加,修改,刪除及查詢操作。
- 什麼是資料庫管理系統
資料庫管理系統(DataBase Management System,DBMS):指一種操作和管理資料庫的大型軟體,用於建立、使用和維護資料庫,對資料庫進行統一管理和控制,以保證資料庫的安全性和完整性。使用者通過資料庫管理系統訪問資料庫中表內的資料。
- 常見的資料庫管理系統
MYSQL :開源免費的資料庫,小型的資料庫.已經被Oracle收購了.MySQL6.x版本也開始收費。
Oracle :收費的大型資料庫,Oracle公司的產品。Oracle收購SUN公司,收購MYSQL。
DB2 :IBM公司的資料庫產品,收費的。常應用在銀行系統中.
SQLServer:MicroSoft 公司收費的中型的資料庫。C#、.net等語言常使用。
SyBase :已經淡出歷史舞臺。提供了一個非常專業資料建模的工具PowerDesigner。
SQLite : 嵌入式的小型資料庫,應用在手機端。
Java相關的資料庫:MYSQL,Oracle.
這裡使用MySQL資料庫。MySQL中可以有多個數據庫,資料庫是真正儲存資料的地方。
- 資料庫與資料庫管理系統的關係
- 資料庫表
資料庫中以表為組織單位儲存資料。
表類似我們的Java類,每個欄位都有對應的資料型別。
那麼用我們熟悉的java程式來與關係型資料對比,就會發現以下對應關係。
類----------表
類中屬性----------表中欄位
物件----------記錄
SQL語句
資料庫是不認識JAVA語言的,但是我們同樣要與資料庫互動,這時需要使用到資料庫認識的語言SQL語句,它是資料庫的程式碼。
結構化查詢語言(Structured Query Language)簡稱SQL,是一種資料庫查詢和程式設計語言,用於存取資料以及查詢、更新和管理
建立資料庫、建立資料表、向資料表中新增一條條資料資訊均需要使用SQL語句。
- SQL分類:
- 資料定義語言:簡稱DDL(Data Definition Language),用來定義資料庫物件:資料庫,表,列等。關鍵字:create,alter,drop(刪表)等
- 資料操作語言:簡稱DML(Data Manipulation Language),用來對資料庫中表的記錄進行更新。關鍵字:insert,delete,update等
- 資料控制語言:簡稱DCL(Data Control Language),用來定義資料庫的訪問許可權和安全級別,及建立使用者。
- 資料查詢語言:簡稱DQL(Data Query Language),用來查詢資料庫中表的記錄。關鍵字:select,from,where等
- SQL語句可以單行或多行書寫,以分號結尾
- 可使用空格和縮排來增強語句的可讀性
- MySQL資料庫的SQL語句不區分大小寫,建議使用大寫,例如:SELECT * FROM user。
- 同樣可以使用/**/的方式完成註釋
- MySQL中的我們常使用的資料型別如下
分類 |
型別名稱 |
說明 |
整數型別 |
tinyInt |
很小的整數 |
|
smallint |
小的整數 |
|
mediumint |
中等大小的整數 |
|
int(integer) |
普通大小的整數 |
小數型別 |
float |
單精度浮點數 |
|
double |
雙精度浮點數 |
|
decimal(m,d) |
壓縮嚴格的定點數 |
日期型別 |
year |
YYYY 1901~2155 |
|
time |
HH:MM:SS -838:59:59~838:59:59 |
|
date |
YYYY-MM-DD 1000-01-01~9999-12-3 |
|
datetime |
YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59 |
|
timestamp |
YYYY-MM-DD HH:MM:SS 1970~01~01 00:00:01 UTC~2038-01-19 03:14:07UTC |
文字、二進位制型別 |
CHAR(M) |
M為0~255之間的整數 |
|
VARCHAR(M) |
M為0~65535之間的整數 |
|
TINYBLOB |
允許長度0~255位元組 |
|
BLOB |
允許長度0~65535位元組 |
|
MEDIUMBLOB |
允許長度0~167772150位元組 |
|
LONGBLOB |
允許長度0~4294967295位元組 |
|
TINYTEXT |
允許長度0~255位元組 |
|
TEXT |
允許長度0~65535位元組 |
|
MEDIUMTEXT |
允許長度0~167772150位元組 |
|
LONGTEXT |
允許長度0~4294967295位元組 |
|
VARBINARY(M) |
允許長度0~M個位元組的變長位元組字串 |
|
BINARY(M) |
允許長度0~M個位元組的定長位元組字串 |
- 建立資料庫
* create database 資料庫名;
* create database 資料庫名 character set 字符集;
- 檢視資料庫
show databases;
show create database 資料庫名;
- 刪除資料庫
drop database 資料庫名稱;
- 切換資料庫
use 資料庫名;
- 檢視正在使用的資料庫
select database();
表結構相關語句
建立表
create table 表名(
欄位名 型別(長度) 約束,
欄位名 型別(長度) 約束
);
主鍵約束
主鍵是用於標識當前記錄的欄位。它的特點是非空,唯一。在開發中一般情況下主鍵是不具備任何含義,只是用於標識當前記錄。
- 在建立表時建立主鍵,在欄位後面加上 primary key.
create table tablename(
id int primary key,
.......
)
- 在建立表時建立主鍵,在表建立的最後來指定主鍵
create table tablename(
id int,
.......,
primary key(id)
)
- 刪除主鍵:alter table 表名 drop primary key;
alter table sort drop primary key;
- 主鍵自動增長:一般主鍵是自增長的欄位,不需要指定。
實現新增自增長語句,主鍵欄位後加auto_increment(只適用MySQL)
查看錶
show tables;
刪除表
drop table 表名;
修改表結構格式
alter table 表名 add 列名 型別(長度) 約束;
插入表記錄
insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入所有列
更新表記錄
update 表名 set 欄位名=值,欄位名=值;
update 表名 set 欄位名=值,欄位名=值 where 條件;
刪除記錄:delete
delete from 表名 [where 條件];
truncate table 表名;
- 刪除表中所有記錄使用delete from 表名; 還是用truncate table 表名;
刪除方式:delete 一條一條刪除,不清空auto_increment記錄數。
truncate 直接將表刪除,重新建表,auto_increment將置為零,從新開始。
SQL查詢語句
查詢語句,在開發中使用的次數最多
建立賬務表
CREATE TABLE zhangwu (
id INT PRIMARY KEY AUTO_INCREMENT, -- 賬務ID
name VARCHAR(200), -- 賬務名稱
money DOUBLE, -- 金額
);
插入表記錄
INSERT INTO zhangwu(id,name,money) VALUES (1,'吃飯支出',247);
INSERT INTO zhangwu(id,name,money) VALUES (2,'工資收入',12345);
INSERT INTO zhangwu(id,name,money) VALUES (3,'服裝支出',1000);
INSERT INTO zhangwu(id,name,money) VALUES (4,'吃飯支出',325);
INSERT INTO zhangwu(id,name,money) VALUES (5,'股票收入',8000);
INSERT INTO zhangwu(id,name,money) VALUES (6,打麻將支出,8000);
INSERT INTO zhangwu(id,name,money) VALUES (7,null,5000);
查詢語法:
select 欄位1,欄位2,...from 表名;
條件查詢:
where語句表條件過濾。滿足條件操作,不滿足不操作,多用於資料的查詢與修改。
格式 :select 欄位 from 表名 where 條件;
比較運算子 |
> < <= >= = <> |
大於、小於、大於(小於)等於、不等於 |
|
BETWEEN ...AND... |
顯示在某一區間的值(含頭含尾) |
|
IN(set) |
顯示在in列表中的值,例:in(100,200) |
|
LIKE 萬用字元 |
模糊查詢,Like語句中有兩個萬用字元: % 用來匹配多個字元;例first_name like ‘a%’; _ 用來匹配一個字元。例first_name like ‘a_’; |
|
IS NULL |
判斷是否為空 is null; 判斷為空 is not null; 判斷不為空 |
邏輯運算子 |
and |
多個條件同時成立 |
|
or |
多個條件任一成立 |
|
not |
不成立,例:where not(salary>100); |