1. 資料庫
1.1 資料庫概述
什么是資料庫
資料庫就是存盤資料的倉庫,其本質是一個檔案系統,資料按照特定的格式將資料存盤起來,用戶可以對資料庫中的資料進行增加,修改,洗掉及查詢操作,
什么是資料庫管理系統
資料庫管理系統(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中可以有多個資料庫,資料庫是真正存盤資料的地方,
資料庫與資料庫管理系統的關系

1.2 資料庫表
資料庫中以表為組織單位存盤資料,
表類似我們的Java類,每個欄位都有對應的資料型別,
那么用我們熟悉的java程式來與關系型資料對比,就會發現以下對應關系,
類----------表
類中屬性----------表中欄位
物件----------記錄
1.3 表資料
根據表欄位所規定的資料型別,我們可以向其中填入一條條的資料,而表中的每條資料類似類的實體物件,表中的一行一行的資訊我們稱之為記錄,

表記錄與java類物件的對應關系

2. MySql資料庫
2.1 MySql安裝
參考《MySQL安裝》(點擊這里)
安裝后,MySQL會以windows服務的方式為我們提供資料存盤功能,開啟和關閉服務的操作:右鍵點擊我的電腦→管理→服務→可以找到MySQL服務開啟或停止,

也可以在DOS視窗,通過命令完成MySQL服務的啟動和停止(必須以管理運行cmd命令視窗)

2.2 登錄MySQL資料庫
MySQL是一個需要賬戶名密碼登錄的資料庫,登陸后使用,它提供了一個默認的root賬號,使用安裝時設定的密碼即可登錄,
格式1:cmd> mysql –u用戶名 –p密碼
例如:mysql -uroot –proot

格式2:cmd> mysql --host=ip地址 --user=用戶名 --password=密碼
例如:mysql --host=127.0.0.1 --user=root --password=root

3. SQL陳述句
資料庫是不認識JAVA語言的,但是我們同樣要與資料庫互動,這時需要使用到資料庫認識的語言SQL陳述句,它是資料庫的代碼,
結構化查詢語言(Structured Query Language)簡稱SQL,是一種資料庫查詢和程式設計語言,用于存取資料以及查詢、更新和管理關系資料庫系統,
創建資料庫、創建資料表、向資料表中添加一條條資料資訊均需要使用SQL陳述句,
3.1 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等
3.2 SQL通用語法
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個位元組的定長位元組字串 |
3.3 資料庫操作:database
創建資料庫
格式:
* create database 資料庫名;
* create database 資料庫名 character set 字符集;
例如:
#創建資料庫 資料庫中資料的編碼采用的是安裝資料庫時指定的默認編碼 utf8
CREATE DATABASE day21_1;
#創建資料庫 并指定資料庫中資料的編碼
CREATE DATABASE day21_2 CHARACTER SET utf8;

查看資料庫
查看資料庫MySQL服務器中的所有的資料庫:
show databases;
查看某個資料庫的定義的資訊:
show create database 資料庫名;
例如:
show create database day21_1;
洗掉資料庫
drop database 資料庫名稱;
例如:
drop database day21_2;
其他的資料庫操作命令
切換資料庫:
use 資料庫名;
例如:
use day21_1;
查看正在使用的資料庫:
select database();
3.4 表結構相關陳述句
3.4.1 創建表
格式:
create table 表名(
欄位名 型別(長度) 約束,
欄位名 型別(長度) 約束
);
例如:
###創建分類表
CREATE TABLE sort (
sid INT, #分類ID
sname VARCHAR(100) #分類名稱
);
3.4.2 主鍵約束
主鍵是用于標識當前記錄的欄位,它的特點是非空,唯一,在開發中一般情況下主鍵是不具備任何含義,只是用于標識當前記錄,
格式:
1.在創建表時創建主鍵,在欄位后面加上 primary key.
create table tablename(
id int primary key,
.......
)
2. 在創建表時創建主鍵,在表創建的最后來指定主鍵
create table tablename(
id int,
.......,
primary key(id)
)
3.洗掉主鍵:alter table 表名 drop primary key;
alter table sort drop primary key;
4.主鍵自動增長:一般主鍵是自增長的欄位,不需要指定,
實作添加自增長陳述句,主鍵欄位后加auto_increment(只適用MySQL)
例如:
###創建分類表
CREATE TABLE sort (
sid INT PRIMARY KEY auto_increment, #分類ID
sname VARCHAR(100) #分類名稱
);

其他約束:其他約束還有如外鍵、唯一、非空等,會在就業班詳細介紹,
3.4.3 查看表
查看資料庫中的所有表:
格式:show tables;
查看表結構:
格式:desc 表名;
例如:desc sort;
3.4.4 洗掉表
格式:drop table 表名;
例如:drop table sort;
3.4.5 修改表結構格式:
alter table 表名 add 列名 型別(長度) 約束;
作用:修改表添加列.
例如:
#1,為分類表添加一個新的欄位為 分類描述 varchar(20)
ALTER TABLE sort ADD sdesc VARCHAR(20);
alter table 表名 modify 列名 型別(長度) 約束;
作用:修改表修改列的型別長度及約束.
例如:
#2, 為分類表的分類名稱欄位進行修改,型別varchar(50) 添加約束 not null
ALTER TABLE sort MODIFY sname VARCHAR(50) NOT NULL;
alter table 表名 change 舊列名 新列名 型別(長度) 約束;
作用:修改表修改列名.
例如:
#3, 為分類表的分類名稱欄位進行更換 更換為 snamesname varchar(30)
ALTER TABLE sort CHANGE sname snamename VARCHAR(30);
alter table 表名 drop 列名;
作用:修改表洗掉列.
例如:
#4, 洗掉分類表中snamename這列
ALTER TABLE sort DROP snamename;
rename table 表名 to 新表名;
作用:修改表名
例如:
#5, 為分類表sort 改名成 category
RENAME TABLE sort TO category;
alter table 表名 character set 字符集;
作用:修改表的字符集
例如:
#6, 為分類表 category 的編碼表進行修改,修改成 gbk
ALTER TABLE category CHARACTER SET gbk;
3.4.6 插入表記錄:
語法:
insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入所有列
注意:
插入的資料應與欄位的資料型別相同
資料的大小應該在列的長度范圍內
在values中列出的資料位置必須與被加入列的排列位置相對應,
除了數值型別外,其它的欄位型別的值必須使用引號引起,
如果要插入空值,可以不寫欄位,或者插入 null,
對于自動增長的列在操作時,直接插入null值即可,
例如:
INSERT INTO sort(sid,sname) VALUES('s001', '電器');
INSERT INTO sort(sid,sname) VALUES('s002', '服飾');
INSERT INTO sort VALUES('s003', '化妝品');
INSERT INTO sort VALUES('s004','書籍');

3.4.7 更新表記錄:
用來修改指定條件的資料,將滿足條件的記錄指定列修改為指定值
語法:
update 表名 set 欄位名=值,欄位名=值;
update 表名 set 欄位名=值,欄位名=值 where 條件;
注意:
列名的型別與修改的值要一致.
修改值得時候不能超過最大長度.
值如果是字串或者日期需要加’’.
例如:
#1,將指定的sname欄位中的值 修改成 日用品
UPDATE sort SET sname='日用品';
#2, 將sid為s002的記錄中的sname改成 日用品
UPDATE sort SET sname='日用品' WHERE sid='s002';
UPDATE sort SET sname='日用品' WHERE sid='s003';
3.4.8 洗掉記錄:delete
語法:
delete from 表名 [where 條件];
或者
truncate table 表名;
面試題:
洗掉表中所有記錄使用delete from 表名; 還是用truncate table 表名;
洗掉方式:delete 一條一條洗掉,不清空auto_increment記錄數,
truncate 直接將表洗掉,重新建表,auto_increment將置為零,從新開始,
例如:
DELETE FROM sort WHERE sname='日用品';
#表資料清空
DELETE FROM sort;
3.5 DOS操作資料亂碼解決
我們在dos命令列操作中文時,會報錯
insert into user(username,password) values(‘張三’,’123’);
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'username' at row 1
原因:因為mysql的客戶端編碼的問題我們的是utf8,而系統的cmd視窗編碼是gbk
解決方案(臨時解決方案):修改mysql客戶端編碼,
show variables like 'character%'; 查看所有mysql的編碼

在圖中與客戶端有關的編碼設定:
client connetion result 和客戶端相關
database server system 和服務器端相關
將客戶端編碼修改為gbk,
set character_set_results=gbk; / set names gbk;
以上操作,只針對當前視窗有效果,如果關閉了服務器便失效,如果想要永久修改,通過以下方式:
在mysql安裝目錄下有my.ini檔案
default-character-set=gbk 客戶端編碼設定
character-set-server=utf8 服務器端編碼設定
注意:修改完成組態檔,重啟服務,
4. SQL查詢陳述句
查詢陳述句,在開發中使用的次數最多,此處使用“zhangwu” 賬務表,
創建賬務表:
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);
4.1 查詢語法
查詢指定欄位資訊
select 欄位1,欄位2,...from 表名;
例如:
select id,name from zhangwu;
查詢表中所有欄位
select * from 表名;
例如:
select * from zhangwu;
注意:使用"*"在練習、學習程序中可以使用,在實際開發中,不推薦使用,原因,要查詢的欄位資訊不明確,若欄位數量很多,會導致查詢速度很慢,
distinct用于去除重復記錄
select distinct 欄位 from 表名;
例如:
select distinct money from zhangwu;
別名查詢,使用的as關鍵字,as可以省略的.
別名可以給表中的欄位,表設定別名, 當查詢陳述句復雜時,使用別名可以極大的簡便操作,
表別名格式:
select * from 表名 as 別名;
或
select * from 表名 別名;
列別名格式:
select 欄位名 as 別名 from 表名;
或
select 欄位名 別名 from 表名;
例如
表別名:
select * from zhangwu as zw;
列別名:
select money as m from zhangwu;
或
select money m from zhangwu;
我們在sql陳述句的操作中,可以直接對列進行運算,
例如:將所有賬務的金額+10000元進行顯示.
select pname,price+10000 from product;
4.2 條件查詢
where陳述句表條件過濾,滿足條件操作,不滿足不操作,多用于資料的查詢與修改,
格式 :select 欄位 from 表名 where 條件;
while條件的種類如下:
|
比較運算子
|
> < <= >= = <> |
大于、小于、大于(小于)等于、不等于 |
|
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); |
例如:
查詢所有吃飯支出記錄
SELECT * FROM zhangwu WHERE name = '吃飯支出';
查詢出金額大于1000的資訊
SELECT * FROM zhangwu WHERE money >1000;
查詢出金額在2000-5000之間的賬務資訊
SELECT * FROM zhangwu WHERE money >=2000 AND money <=5000;
或
SELECT * FROM zhangwu WHERE money BETWEEN 2000 AND 5000;
查詢出金額是1000或5000或3500的商品資訊
SELECT * FROM zhangwu WHERE money =1000 OR money =5000 OR money =3500;
或
SELECT * FROM zhangwu WHERE money IN(1000,5000,3500);
查詢出賬務名稱包含”支出”的賬務資訊,
SELECT * FROM zhangwu WHERE name LIKE "%支出%";
查詢出賬務名稱中是無五個字的賬務資訊
SELECT * FROM gjp_ledger WHERE ldesc LIKE "_____"; -- 五個下劃線_
查詢出賬務名稱不為null賬務資訊
SELECT * FROM zhangwu WHERE name IS NOT NULL;
SELECT * FROM zhangwu WHERE NOT (name IS NULL);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/105079.html
標籤:MySQL
上一篇:mysql主從同步卡住的問題~
