MySql
- 能夠理解資料庫的概念
- 能夠安裝MySQL資料庫
- 能夠啟動,關閉及登錄MySQL
- 能夠使用SQL陳述句操作資料庫
- 能夠使用SQL陳述句操作表結構
- 能夠使用SQL陳述句進行資料的添加修改和洗掉的操作
- 能夠使用SQL陳述句添加約束
一、資料庫介紹
1.1、資料庫概念
-
什么是資料庫
? 資料庫就是存盤資料的倉庫,其本質是一個檔案系統,資料按照特定的格式將資料存盤起來,用戶可以對資料庫中的資料進行增加,修改,洗掉及查詢操作,
-
什么是資料庫管理系統
? 資料庫管理系統(DataBase Management System,DBMS):指一種操作和管理資料庫的大型軟體,用于建立、使用和維護資料庫,對資料庫進行統一管理和控制,以保證資料庫的安全性和完整性,用戶通過資料庫管理系統訪問資料庫中表內的資料,
-
資料庫與資料庫管理系統的關系

1.2、資料庫表
? 資料庫中以表為組織單位存盤資料,
? 表類似Java類,每個欄位都有對應的資料型別,

用Java程式來與關系型資料對比,就會發現以下對應關系,
- 類----------表
- 類中屬性----------表中欄位
- 物件----------記錄

1.3、表資料
? 根據表欄位所規定的資料型別,我們可以向其中填入一條條的資料,而表中的每條資料類似類的實體物件,表中的一行一行的資訊我們稱之為記錄,
- 表記錄與Java類物件的對應關系

1.4、常見資料庫
? 常見的資料庫管理系統
- MYSQL:開源免費的資料庫,小型的資料庫,已經被Oracle收購了,MySQL6.x版本也開始收費,
- Oracle:收費的大型資料庫,Oracle公司的產品,Oracle收購SUN公司,收購MYSQL,
- DB2:IBM公司的資料庫產品,收費的,常應用在銀行系統中,
- SQLServer:MicroSoft公司收費的中型的資料庫,C#、.net等語言常使用,
- SyBase:已經淡出歷史舞臺,提供了一個非常專業資料建模的工具PowerDesigner,
- SQLite:嵌入式的小型資料庫,應用在手機端,
? 常用資料庫:MYSQL、Oracle,
? 這里使用MySQL資料庫,MySQL中可以有多個資料庫,資料庫是真正存盤資料的地方,
二、MySql資料庫
2.1、MySql安裝
- 安裝(參考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
三、SQL陳述句
3.1 、SQL概述
SQL陳述句介紹
? 資料庫是不認識Java語言的,但是我們同樣要與資料庫互動,這時需要使用到資料庫認識的語言SQL陳述句,它是資料庫的代碼,結構化查詢語言(Structured Query Language)簡稱SQL,是關系型資料庫管理系統都需要遵循的規范,不同的資料庫生產廠商都支持SQL陳述句,但都有特有內容,

SQL陳述句分類
- SQL分類:
- 資料定義語言:簡稱DDL(Data De?nition Language),用來定義資料庫物件:資料庫、表、列等,關鍵字:create、alter、drop等,
- 資料操作語言:簡稱DML(Data Manipulation Language),用來對資料庫中表的記錄進行更新,關鍵字:insert、delete、update等,
- 資料控制語言:簡稱DCL(Data Control Language),用來定義資料庫的訪問權限和安全級別及創建用戶,
- 資料查詢語言:簡稱DQL(Data Query Language),用來查詢資料庫中表的記錄,關鍵字:select、from、where等,
SQL通用語法
- SQL陳述句可以單行或多行書寫,以分號結尾,
- 可使用空格和縮進來增強陳述句的可讀性,
- MySQL資料庫的SQL陳述句不區分大小寫,關鍵字建議使用大寫,
- 例如:SELECT * FROM user,
- 同樣可以使用/**/的方式完成注釋,
- MySQL中的我們常使用的資料型別如下:
| 型別名稱 | 說明 |
|---|---|
| int(Integer) | 整數型別. |
| double | 小數型別. |
| decimal(m,d) | 指定整數位與小數位長度的小數型別. |
| date | 日期型別,格式為yyyy-MM-dd,包含年月日,不包含時分秒. |
| datetime | 日期型別,格式為YYYY-MM-DD HH:MM:SS,包含時分秒. |
| timestamp | 日期格式,時間戳. |
| varchar(M) | 文本型別,M為0 ~ 65535 之間的整數. |
3.2、DDL之資料庫操作:database
創建資料庫
格式:
create database 資料庫名;
create database 資料庫名 character set 字符集;
例如:
#創建資料庫資料庫中資料的編碼采用的是安裝資料庫時指定的默認編碼utf8
CREATE DATABASE webdb_1;
#創建資料庫并指定資料庫中資料的編碼
CREATE DATABASE webdb_2 CHARACTER SET utf8;
查看資料庫
查看資料庫MySQL服務器中的所有的資料庫:
show databases;
查看某個資料庫的定義的資訊:
show create database 資料庫名;
例如:
show create database webdb_1;
洗掉資料庫
drop database 資料庫名稱;
例如:
drop database webdb_2;
使用資料庫
查看正在使用的資料庫:
select database();
其他的資料庫操作命令切換資料庫:
use 資料庫名;
例如:
use webdb_1;
3.3、 DDL之表操作:table
創建表
格式:
create table 表名(
欄位名型別(長度)[約束],
欄位名型別(長度)[約束],
...
);
型別:
varchar(n) 字串
int 整形
double 浮點
date 時間
timestamp 時間戳
約束:(詳情查看第四章)
primary key 主鍵,被主鍵修飾欄位中的資料,不能重復、不能為null,
例如:創建分類表
CREATE TABLE category(
cid INT primary key, #分類ID
cname VARCHAR(100) #分類名稱
);

查看表
- 查看資料庫中的所有表:
格式: show tables;
- 查看表結構:
格式: desc 表名;
例如: desc category;
洗掉表
- 格式:drop table 表名;
例如: drop table category;
修改表結構格式
- alter table 表名 add 列名型別(長度) [約束];
作用:修改表添加列,
例如:#1、為分類表添加一個新的欄位為分類描述 varchar(20)
ALTER TABLE category ADD 'desc' VARCHAR(20);
- alter table 表名 modify 列名型別(長度)約束;
作用:修改表修改列的型別長度及約束,
例如:#2、為分類表的描述欄位進行修改,型別 varchar(50) 添加約束notnull
ALTER TABLE category MODIFY 'desc' VARCHAR(50) NOT NULL;
-
alter table 表名 change 舊列名 新列名 型別(長度)約束;
作用:修改表修改列名,
例如:#3、為分類表的分類名稱欄位進行更換更換為 description varchar(30)
ALTER TABLE category CHANGE 'desc' description VARCHAR(30);
- alter table 表名 drop 列名;
作用:修改表洗掉列,
例如:#4、洗掉分類表中description這列
ALTER TABLE category DROP description;
- rename table 表名 to 新表名;
作用:修改表名,
例如:#5、為分類表 category 改名成 category2
RENAME TABLE category TO category2;
- alter table 表名 character set 字符集(了解);
作用:修改表的字符集,
例如:#6、為分類表 category 的編碼表進行修改,修改成gbk
ALTER TABLE category CHARACTER SET gbk;
3.4、DML資料操作語言
插入表記錄:insert
- 語法:
--向表中插入某些欄位
insert into 表 (欄位1,欄位2,欄位3..) values (值1,值2,值3..);
--向表中插入所有欄位,欄位的順序為創建表時的順序,
insert into 表 values (值1,值2,值3..);
- 注意:
- 值與欄位必須對應,個數相同,型別相同
- 值的資料大小必須在欄位的長度范圍內
- 除了數值型別外,其它的欄位型別的值必須使用引號引起,(建議單引號)
- 如果要插入空值,可以不寫欄位,或者插入null,
- 例如:
INSERT INTO category (cid,cname) VALUES ('c001','電器');
INSERT INTO category (cid,cname) VALUES ('c002','服飾');
INSERT INTO category (cid,cname) VALUES ('c003','化妝品');
INSERT INTO category (cid,cname) VALUES ('c004','書籍');
INSERT INTO category (cid) VALUES ('c005');
INSERT INTO category (cname,cid) VALUES ('耗材','c006');
更新表記錄:update
? 用來修改指定條件的資料,將滿足條件的記錄指定列修改為指定值,
- 語法:
更新所有記錄的指定欄位
update 表名 set 欄位名=值,欄位名=值,...;
? 更新符合條件記錄的指定欄位
update 表名 set 欄位名=值,欄位名=值,...where條件;
- 注意:
- 列名的型別與修改的值要一致.
- 修改值得時候不能超過最大長度.
- 除了數值型別外,其它的欄位型別的值必須使用引號引起
洗掉記錄:delete
-
語法:
delete from 表名 [where條件];
3.5、DOS操作資料亂碼解決
我們在dos命令列操作中文時,會報錯
insert into category (cid,cname) values (‘c010’,’中文’);
ERROR1366 (HY000): Incorrect string value:'\xB7\xFE\xD7\xB0' for column 'cname' at row 1
錯誤原因:因為 mysql 的客戶端設定編碼是 utf8,而系統的 cmd 視窗編碼是 gbk
1、 查看MySQL內部設定的編碼
show variables like 'character%'; 查看所有mysql的編碼

2、需要修改client、connection、results的編碼一致(GBK編碼)
解決方案1:在cmd命令視窗中輸入命令,此操作當前視窗有效,為臨時方案,
set names gbk;
解決方案2:安裝目錄下修改my.ini檔案,重啟服務所有地方生效,

四、SQL約束
4.1 主鍵約束
PRIMARY KEY 約束唯一標識資料庫表中的每條記錄,
- 主鍵必須包含唯一的值,
- 主鍵列不能包含 NULL 值,
- 每個表都應該有一個主鍵,并且每個表只能有一個主鍵,
添加主鍵約束
方式一:創建表時,在欄位描述處,宣告指定欄位為主鍵 :
CREATE TABLE persons
(
id_p int PRIMARY KEY,
lastname varchar(255),
firstname varchar(255),
address varchar(255),
city varchar(255)
) ;
方式二:創建表時,在constraint約束區域,宣告指定欄位為主鍵:
- 格式: [constraint 名稱] primary key (欄位串列)
- 關鍵字constraint可以省略,如果需要為主鍵命名,constraint不能省略,主鍵名稱一般沒用,
- 欄位串列需要使用小括號括住,如果有多欄位需要使用逗號分隔,宣告兩個以上欄位為主鍵,我們稱為聯合主鍵,
CREATE TABLE persons
(
firstname varchar(255),
lastname varchar(255),
address varchar(255),
city varchar(255),
CONSTRAINT pk_personID PRIMARY KEY (firstname,lastname)
) ;
方式三:創建表之后,通過修改表結構,宣告指定欄位為主鍵:
- 格式: ALTER TABLE persons ADD [CONSTRAINT 名稱] PRIMARY KEY (欄位串列)
CREATE TABLE persons
(
firstname varchar(255),
lastname varchar(255),
address varchar(255),
city varchar(255)
)
ALTER TABLE persons ADD PRIMARY KEY (firstname,lastname)
洗掉主鍵約束
如需撤銷 PRIMARY KEY 約束,請使用下面的 SQL:
ALTER TABLE persons DROP PRIMARY KEY;
4.2 自動增長列
我們通常希望在每次插入新記錄時,資料庫自動生成欄位的值,
我們可以在表中使用 auto_increment(自動增長列)關鍵字,自動增長列型別必須是整形,自動增長列必須為鍵(一般是主鍵),
- 下列 SQL 陳述句把 "persons" 表中的 "p_id" 列定義為 auto_increment 主鍵
CREATE TABLE persons
(
p_id int PRIMARY KEY AUTO_INCREMENT,
lastname varchar(255),
firstname varchar(255),
address varchar(255),
city varchar(255)
);
- 向persons添加資料時,可以不為p_id欄位設定值,也可以設定成null,資料庫將自動維護主鍵值:
INSERT INTO persons (firstname,lastname) VALUES ('Bill','Gates')
INSERT INTO persons (p_id,firstname,lastname) VALUES (NULL,'Bill','Gates');
- 擴展:默認AUTO_INCREMENT 的開始值是 1,如果希望修改起始值,請使用下列 SQL 語法:
ALTER TABLE persons AUTO_INCREMENT=100;
- 面試題
問:針對auto_increment ,洗掉表中所有記錄使用 delete from 表名 或使用 truncate table 表名,二者有什么區別?
洗掉方式:
delete 一條一條洗掉,不清空auto_increment記錄數,
truncate 直接將表洗掉,重新建表,auto_increment將置為零,從新開始,
4.3 非空約束
NOT NULL 約束強制列不接受 NULL 值,
NOT NULL 約束強制欄位始終包含值,這意味著,如果不向欄位添加值,就無法插入新記錄或者更新記錄,
- 下面的 SQL 陳述句強制 "id_p" 列和 "lastname" 列不接受 NULL 值:
CREATE TABLE persons
(
id_p int NOT NULL,
lastname varchar(255) NOT NULL,
firstname varchar(255),
address varchar(255),
city varchar(255)
);
4.4 唯一約束
UNIQUE 約束唯一標識資料庫表中的每條記錄, UNIQUE 和 PRIMARY KEY 約束均為列或列集合提供了唯一性的保證, PRIMARY KEY 擁有自動定義的 UNIQUE 約束, 請注意,每個表可以有多個 UNIQUE 約束,但是每個表只能
有一個 PRIMARY KEY 約束,
添加唯一約束
與主鍵添加方式相同,共有3種
- 方式一:創建表時,在欄位描述處,宣告唯一:
CREATE TABLE persons
(
id_p int NOT NULL,
lastname varchar(255) NOT NULL,
firstname varchar(255),
address varchar(255),
city varchar(255)
);
- 方式二:創建表時,在約束區域,宣告唯一:
CREATE TABLE persons
(
id_p int,
lastname varchar(255) NOT NULL,
firstname varchar(255),
address varchar(255),
city varchar(255),
CONSTRAINT 名稱UNIQUE (Id_P)
) ;
- 方式三:創建表后,修改表結構,宣告欄位唯一:
ALTER TABLE persons ADD [CONSTRAINT 名稱] UNIQUE (Id_P);
洗掉唯一約束
- 如需撤銷 UNIQUE 約束,請使用下面的 SQL:
ALTER TABLE persons DROP INDEX 名稱;
- 如果添加唯一約束時,沒有設定約束名稱,默認是當前欄位的欄位名,
第5章 MySQL資料庫密碼重置(擴展)
1、停止mysql服務器運行輸入services.msc 停止mysql服務,
2、 在cmd下,輸入mysqld --console --skip-grant-tables 啟動服務器,出現一下頁面,不要關閉該視窗,

3、 新打開cmd,輸入mysql -uroot 不需要密碼,
use mysql;
update user set password=password('abc') WHERE user='root';
4、關閉兩個cmd視窗,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/265325.html
標籤:其他
上一篇:🍖事務隔離機制
下一篇:資料庫-事務
