1. 程式人生 > >【傳智播客鄭州校區】數據庫MYSQL筆記詳解

【傳智播客鄭州校區】數據庫MYSQL筆記詳解

含義 訪問 面試題 增長 variable 切換 dos命令 技術 運行

第1章 數據庫1.1 數據庫概述
l 什麽是數據庫
數據庫就是存儲數據的倉庫,其本質是一個文件系統,數據按照特定的格式將數據存儲起來,用戶可以對數據庫中的數據進行增加,修改,刪除及查詢操作。
l 什麽是數據庫管理系統
數據庫管理系統(DataBase Management System,DBMS):指一種操作和管理數據庫的大型軟件,用於建立、使用和維護數據庫,對數據庫進行統一管理和控制,以保證數據庫的安全性和完整性。用戶通過數據庫管理系統訪問數據庫中表內的數據。
l 常見的數據庫管理系統
MYSQL :開源免費的數據庫,小型的數據庫.已經被Oracle收購了.MySQL6.x版本也開始收費。
Oracle :收費的大型數據庫,Oracle公司的產品。Oracle收購SUN公司,收購MYSQL。
DB2 :IBM公司的數據庫產品,收費的。常應用在銀行系統中.
SQLServer:MicroSoft 公司收費的中型的數據庫。C#、.net等語言常使用。
SyBase :已經淡出歷史舞臺。提供了一個非常專業數據建模的工具PowerDesigner。
SQLite : 嵌入式的小型數據庫,應用在手機端。
Java相關的數據庫:MYSQL,Oracle.
這裏使用MySQL數據庫。MySQL中可以有多個數據庫,數據庫是真正存儲數據的地方。
l 數據庫與數據庫管理系統的關系
技術分享圖片
1.2 數據庫表
數據庫中以表為組織單位存儲數據。
表類似我們的Java類,每個字段都有對應的數據類型。
那麽用我們熟悉的java程序來與關系型數據對比,就會發現以下對應關系。
類----------表
類中屬性----------表中字段
對象----------記錄
1.3 表數據
根據表字段所規定的數據類型,我們可以向其中填入一條條的數據,而表中的每條數據類似類的實例對象。表中的一行一行的信息我們稱之為記錄。
技術分享圖片
l 表記錄與java類對象的對應關系
技術分享圖片
第2章 MySql數據庫2.1 MySql安裝
l 安裝
參考MySQL安裝圖解.doc
技術分享圖片
安裝後,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
技術分享圖片
2.3 SQLyog(MySQL圖形化開發工具)
l 安裝:
提供的SQLyog軟件為免安裝版,可直接使用
l 使用:
輸入用戶名、密碼,點擊連接按鈕,進行訪問MySQL數據庫進行操作
技術分享圖片
在Query窗口中,輸入SQL代碼,選中要執行的SQL代碼,按F8鍵運行,或按執行按鈕運行。
技術分享圖片
第3章 SQL語句
數據庫是不認識JAVA語言的,但是我們同樣要與數據庫交互,這時需要使用到數據庫認識的語言SQL語句,它是數據庫的代碼。
結構化查詢語言(Structured Query Language)簡稱SQL,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系數據庫系統。
創建數據庫、創建數據表、向數據表中添加一條條數據信息均需要使用SQL語句。
3.1 SQL語句
l SQL分類:
n 數據定義語言:簡稱DDL(Data Definition Language),用來定義數據庫對象:數據庫,表,列等。關鍵字:create,alter,drop等
n 數據操作語言:簡稱DML(Data Manipulation Language),用來對數據庫中表的記錄進行更新。關鍵字:insert,delete,update等
n 數據控制語言:簡稱DCL(Data Control Language),用來定義數據庫的訪問權限和安全級別,及創建用戶。
n 數據查詢語言:簡稱DQL(Data Query Language),用來查詢數據庫中表的記錄。關鍵字:select,from,where等
3.2 SQL通用語法
l SQL語句可以單行或多行書寫,以分號結尾
l 可使用空格和縮進來增強語句的可讀性
l MySQL數據庫的SQL語句不區分大小寫,建議使用大寫,例如:SELECT * FROM user。
l 同樣可以使用/**/的方式完成註釋
l 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
l 創建數據庫
格式:

  • create database 數據庫名;
  • create database 數據庫名 character set 字符集;
    例如:
    #創建數據庫 數據庫中數據的編碼采用的是安裝數據庫時指定的默認編碼 utf8
    CREATE DATABASE day21_1;
    #創建數據庫 並指定數據庫中數據的編碼
    CREATE DATABASE day21_2 CHARACTER SET utf8;
    技術分享圖片
    l 查看數據庫
    查看數據庫MySQL服務器中的所有的數據庫:
    show databases;
    查看某個數據庫的定義的信息:
    show create database 數據庫名;
    例如:
    show create database day21_1;
    l 刪除數據庫
    drop database 數據庫名稱;
    例如:
    drop database day21_2;
    l 其他的數據庫操作命令
    切換數據庫:
    use 數據庫名;
    例如:
    use day21_1;
    l 查看正在使用的數據庫:
    select database();
    3.4 表結構相關語句3.4.1 創建表
    l 格式:
    create table 表名(
    字段名 類型(長度) 約束,
    字段名 類型(長度) 約束
    );
    例如:
    ###創建分類表
    CREATE TABLE sort (
    sid INT, #分類ID
    sname VARCHAR(100) #分類名稱
    );
    3.4.2 主鍵約束
    主鍵是用於標識當前記錄的字段。它的特點是非空,唯一。在開發中一般情況下主鍵是不具備任何含義,只是用於標識當前記錄。
    格式:
    l 1.在創建表時創建主鍵,在字段後面加上 primary key.
    create table tablename(
    id int primary key,
    .......
    )

l 2. 在創建表時創建主鍵,在表創建的最後來指定主鍵
create table tablename(
id int,
.......,
primary key(id)
)
l 3.刪除主鍵:alter table 表名 drop primary key;
alter table sort drop primary key;
l 4.主鍵自動增長:一般主鍵是自增長的字段,不需要指定。
實現添加自增長語句,主鍵字段後加auto_increment(只適用MySQL)
例如:
###創建分類表
CREATE TABLE sort (
sid INT PRIMARY KEY auto_increment, #分類ID
sname VARCHAR(100) #分類名稱
);
技術分享圖片
其他約束:其他約束還有如外鍵、唯一、非空等,會在就業班詳細介紹。
3.4.3 查看表
l 查看數據庫中的所有表:
格式:show tables;
l 查看表結構:
格式:desc 表名;
例如:desc sort;
3.4.4 刪除表
l 格式:drop table 表名;
例如:drop table sort;
3.4.5 修改表結構格式:
l alter table 表名 add 列名 類型(長度) 約束;
作用:修改表添加列.
例如:
#1,為分類表添加一個新的字段為 分類描述 varchar(20)
ALTER TABLE sort ADD sdesc VARCHAR(20);
l alter table 表名 modify 列名 類型(長度) 約束;
作用:修改表修改列的類型長度及約束.
例如:
#2, 為分類表的分類名稱字段進行修改,類型varchar(50) 添加約束 not null
ALTER TABLE sort MODIFY sname VARCHAR(50) NOT NULL;
l alter table 表名 change 舊列名 新列名 類型(長度) 約束;
作用:修改表修改列名.
例如:
#3, 為分類表的分類名稱字段進行更換 更換為 snamesname varchar(30)
ALTER TABLE sort CHANGE sname snamename VARCHAR(30);
l alter table 表名 drop 列名;
作用:修改表刪除列.
例如:
#4, 刪除分類表中snamename這列
ALTER TABLE sort DROP snamename;
l rename table 表名 to 新表名;
作用:修改表名
例如:
#5, 為分類表sort 改名成 category
RENAME TABLE sort TO category;
l alter table 表名 character set 字符集;
作用:修改表的字符集
例如:
#6, 為分類表 category 的編碼表進行修改,修改成 gbk
ALTER TABLE category CHARACTER SET gbk;
3.4.6 插入表記錄:
l 語法:
insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入所有列
l 註意:
插入的數據應與字段的數據類型相同
數據的大小應該在列的長度範圍內
在values中列出的數據位置必須與被加入列的排列位置相對應。
除了數值類型外,其它的字段類型的值必須使用引號引起。
如果要插入空值,可以不寫字段,或者插入 null。
對於自動增長的列在操作時,直接插入null值即可。
l 例如:
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 更新表記錄:
用來修改指定條件的數據,將滿足條件的記錄指定列修改為指定值
l 語法:
update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 條件;
l 註意:
u 列名的類型與修改的值要一致.
u 修改值得時候不能超過最大長度.
u 值如果是字符串或者日期需要加’’.
例如:
#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
l 語法:
delete from 表名 [where 條件];
或者
truncate table 表名;
l 面試題:
刪除表中所有記錄使用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 和服務器端相關
l 將客戶端編碼修改為gbk.
set character_set_results=gbk; / set names gbk;
以上操作,只針對當前窗口有效果,如果關閉了服務器便失效。如果想要永久修改,通過以下方式:
l 在mysql安裝目錄下有my.ini文件
default-character-set=gbk 客戶端編碼設置
character-set-server=utf8 服務器端編碼設置
註意:修改完成配置文件,重啟服務
第4章 SQL查詢語句
查詢語句,在開發中使用的次數最多,此處使用“zhangwu” 賬務表。
l 創建賬務表:
CREATE TABLE zhangwu (
id INT PRIMARY KEY AUTO_INCREMENT, -- 賬務ID
name VARCHAR(200), -- 賬務名稱
money DOUBLE, -- 金額
);
l 插入表記錄:
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 查詢的語法:
l 查詢指定字段信息
select 字段1,字段2,...from 表名;
例如:
select id,name from zhangwu;
l 查詢表中所有字段
select from 表名;
例如:
select
from zhangwu;
註意:使用""在練習、學習過程中可以使用,在實際開發中,不推薦使用。原因,要查詢的字段信息不明確,若字段數量很多,會導致查詢速度很慢。
l distinct用於去除重復記錄
select distinct 字段 from 表名;
例如:
select distinct money from zhangwu;
l 別名查詢,使用的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;
l 我們在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語句中有兩個通配符:
% 用來匹配多個字符;例firstname like ‘a%’;
用來匹配一個字符。例firstname 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 gjpledger WHERE ldesc LIKE "____"; -- 五個下劃線_
查詢出賬務名稱不為null賬務信息
SELECT FROM zhangwu WHERE name IS NOT NULL;
SELECT
FROM zhangwu WHERE NOT (name IS NULL);

【傳智播客鄭州校區】數據庫MYSQL筆記詳解