【介紹】數(shù)據(jù)庫與數(shù)據(jù)庫管理系統(tǒng)
- 數(shù)據(jù)庫:
【概述】:數(shù)據(jù)庫提供 了一個存儲空間用來存儲各種數(shù)據(jù),可以將數(shù)據(jù)庫視為一個 存儲數(shù)據(jù)的容器。
- 數(shù)據(jù)庫管理系統(tǒng):
專門用于創(chuàng)建和管理數(shù)據(jù)庫的一套 軟件, 介于應(yīng)用程序和操作系統(tǒng)之間,如 MySQL、 Oracle、 SQL Server、 DB2等。結(jié)構(gòu)圖如下所示。
數(shù)據(jù)庫系統(tǒng)架構(gòu)圖

關(guān)于SQL語言
SQL( Structured Query Language) 是 一種數(shù)據(jù)庫查詢語言和程序設(shè)計(jì)語言,主要用于管理數(shù)據(jù)庫中的數(shù)據(jù),如存取數(shù)據(jù)、查詢 數(shù)據(jù)、更新 數(shù)據(jù)等。
由以下四種語言構(gòu)成:
- (1) 數(shù)據(jù)定義語言( Data Definition Language, DDL)
【用于】數(shù)據(jù)庫定義語言主要用于定義數(shù)據(jù)庫、表等。
【例如】CREATE、ALTER、DROP
- (2) 數(shù)據(jù)操作語言( Data Manipulation Language, DML)
【用于】數(shù)據(jù)操作語言 主要用于對數(shù)據(jù)庫進(jìn)行添加、修改和刪除操作。
【例如】INSERT、UPDATE、DELETE
- (3)數(shù)據(jù)查詢語言( Data Query Language, DQL)
【用于】數(shù)據(jù)查詢語言主要用于查詢數(shù)據(jù);
【例如】SELECT
- (4) 數(shù)據(jù)控制語言( Data Control Language, DCL)
【用于】數(shù)據(jù)控制語言主要用于控制用的訪問權(quán)限。
【例如】GRANT、COMMIT、ROLLBACK
【注釋一下】SQL 對大小寫不敏感!
【編程-好習(xí)慣】分號是在數(shù)據(jù)庫系統(tǒng)中分隔每條 SQL 語句的標(biāo)準(zhǔn)方法,這樣就可以在對服務(wù)器的相同請求中執(zhí)行一條以上的語句。
如果使用的是 MS Access 和 SQL Server 2000,則不必在每條 SQL 語句之后使用分號,不過某些數(shù)據(jù)庫軟件要求必須使用分號。(最好還是寫上)
mysql -uroot -p :連接到mysql
\s :查看數(shù)據(jù)庫信息
set character_ set_ client = gbk:
設(shè)置數(shù)據(jù)庫編碼集(這種方式只能對當(dāng)前窗口有效);【永久修改】:在my.ini中配置。
數(shù)據(jù)庫和表的基本操作
(1).創(chuàng)建數(shù)據(jù)庫
- 【格式】:create database 數(shù)據(jù)庫名稱
- 【格式】:create database user;
(2).查看數(shù)據(jù)庫
- 【格式】:show databases;
(3).查看某個數(shù)據(jù)庫的創(chuàng)建信息
- 【格式】:show create database 數(shù)據(jù)庫名稱
- 【格式】:show create database users;
(4).修改數(shù)據(jù)庫
- 【格式】:
alter database 數(shù)據(jù)庫名 default character set 編碼方式 collate 編碼方式_bin
(5).刪除數(shù)據(jù)庫
- 【格式】:
drop database 數(shù)據(jù)庫名稱
SQL 可以分為兩個部分:數(shù)據(jù)操作語言 (DML) 和 數(shù)據(jù)定義語言 (DDL) 。
(結(jié)構(gòu)化查詢語言 (SQL)是用于執(zhí)行查詢的語法。但是 SQL 語言也包含用于更新、插入和刪除記錄的語法。
查詢和更新指令構(gòu)成了 SQL 的 DML 部分:
SELECT - 從數(shù)據(jù)庫表中獲取數(shù)據(jù)
UPDATE - 更新數(shù)據(jù)庫表中的數(shù)據(jù)
DELETE - 從數(shù)據(jù)庫表中刪除數(shù)據(jù)
INSERT INTO - 向數(shù)據(jù)庫表中插入數(shù)據(jù)
SQL 的數(shù)據(jù)定義語言 (DDL) 部分使我們有能力創(chuàng)建或刪除表格。我們也可以定義索引(鍵),規(guī)定表之間的鏈接,以及施加表間的約束。
SQL 中最重要的 DDL 語句:
CREATE DATABASE - 創(chuàng)建新數(shù)據(jù)庫
ALTER DATABASE - 修改數(shù)據(jù)庫
CREATE TABLE - 創(chuàng)建新表
ALTER TABLE - 變更(改變)數(shù)據(jù)庫表
DROP TABLE - 刪除表
CREATE INDEX - 創(chuàng)建索引(搜索鍵)
DROP INDEX - 刪除索引
實(shí)例:
MariaDB [db_student_msg]> show tables;
+--------------------------+
| Tables_in_db_student_msg |
+--------------------------+
| tb_class |
| tb_score |
| tb_student |
| tb_subject |
+--------------------------+
4 rows in set (0.00 sec)
MariaDB [db_student_msg]> desc tb_student;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| stu_no | char(8) | NO | PRI | NULL | |
| stu_name | varchar(30) | NO | | NULL | |
| gender | tinyint(1) | NO | | NULL | |
| brith_day | datetime | YES | | NULL | |
| class_no | int(11) | NO | MUL | NULL | |
+-----------+-------------+------+-----+---------+-------+
5 rows in set (0.02 sec)
MariaDB [db_student_msg]> desc tb_score;
+------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+-------+
| stu_no | char(8) | NO | PRI | NULL | |
| subject_no | int(11) | NO | PRI | NULL | |
| score | double | YES | | 0 | |
+------------+---------+------+-----+---------+-------+
數(shù)據(jù)類型
mysql 提供了多種數(shù)據(jù)類型,包括:整數(shù)、浮點(diǎn)數(shù)、定點(diǎn)數(shù)、日期和時間、字符串和二進(jìn)制類型。(這里就不詳細(xì)闡述了...)
| 數(shù)據(jù)類型 | 存儲范圍 | 數(shù)據(jù)類型 | 存儲范圍 |
|---|---|---|---|
| TINYNLOB | 1~255字節(jié) | MEDIUMBLOB | 0~16777215字節(jié) |
| BLOB | 0~65535字節(jié) | LONGBLOB | 0~4294967295字節(jié) |
創(chuàng)建數(shù)據(jù)表
【格式】:CREATE TABLE 表 名 (
字段 名 1 數(shù)據(jù) 類型[ 完整性 約束 條件],
字段 名 2 數(shù)據(jù) 類型[ 完整性 約束 條件],
...
字段 名 n, 數(shù)據(jù) 類型[ 完整性 約束 條件]
)
查看數(shù)據(jù)表:show create table 表名;
查看表的字段信息:DESC 表名;
修改數(shù)據(jù)表
- 1) 修改表名
【格式】:alter table 舊表名 rename [to] 新表名
- 2)修改字段名
【格式】:alter table 表名 change 舊字段名 新字段名 新字段類型
ALTER TABLE grade CHANGE name username VARCHAR( 20);
- (3)修改字段的數(shù)據(jù)類型
【格式】:alter table 表名 modify 字段名 數(shù)據(jù)類型;
- (4)添加字段
【格式】:alter table 表名 add 新字段 數(shù)據(jù)類型[約束條件] [first|after 已存在的字段名]
- (5) 刪除字段
【格式】:alter table 表名 drop 字段名
- (6)修改字段的排列位置
【格式】:alter table 表名 modify 字段名1 數(shù)據(jù)類型 first | after 字段2
- (7)刪除數(shù)據(jù)表
【格式】:drop table 表名
關(guān)于表的約束
為了防止向數(shù)據(jù)庫中插入錯誤的數(shù)據(jù),在mysql中定義了一些約束規(guī)則。

(1).【主鍵】:通過primary key 來定義,唯一且非空;
- 單字段主鍵:
- 【格式】:字段名 數(shù)據(jù)類型 primary key;
CREATE TABLE example01( id INT PRIMARY KEY, name VARCHAR( 20), grade FLOAT);
- 【格式】:字段名 數(shù)據(jù)類型 primary key;
- 多字段主鍵
由多個字段組合而成的主鍵。- 【格式】:PRIMARY KEY (字段 名 1,…, 字段 名 n)
(2).【 非空約束】
- 字段值不能為NULL;
- 【格式】:字段 名 數(shù)據(jù) 類型 NOT NULL;
(3).【唯一約束】
- 【作用】:保證字段的唯一性;
- 【格式】:字段 名 數(shù)據(jù) 類型 UNIQUE;
(4).【默認(rèn)約束】
- 【提示】:插入數(shù)據(jù)時,如果字段沒有被賦值,則給該字段一個默認(rèn)值;
- 【格式】:字段 名 數(shù)據(jù) 類型 DEFAULT 默認(rèn)值;
關(guān)于表中字段的自動增加
- 【目的】:為了給新插入的字段一個唯一的ID
- 【格式】:字段名 數(shù)據(jù)類型 AUTO_ INCREMENT;
例如:
CREATE TABLE example05( id INT PRIMARY KEY AUTO_ INCREMENT, stu_ id INT UNIQUE, grade FLOAT );
索引
【解釋】:索引就好像一本書的目錄,用于快速檢索數(shù)據(jù)。
索引分類:普通索引、唯一索引、全文索引。
普通索引
【解釋】:由KEY 或 INDEX 定義。是基本的索引類型,可以用于任何數(shù)據(jù)類型 。其值是否唯一或?yàn)榭沼勺侄伪旧砑s束決定唯一索引
【解釋】:由Unique 定義的索引,該索引的字段值必須唯一。全文索引
【解釋】:只能創(chuàng)建在char、varchar、text字段類型上。只有MyISAM引擎支持。
【提高】:索引也可創(chuàng)建在多列上。
創(chuàng)建索引
在創(chuàng)建表的時候,如果創(chuàng)建索引,結(jié)構(gòu)如下:
CREATE TABLE 表 名(
字段名 數(shù)據(jù)類型[ 完整性 約束 條件],
字段名 數(shù)據(jù)類型[ 完整性 約束 條件], …
字段名 數(shù)據(jù)類型 [UNIQUE| FULLTEXT| SPATIAL] INDEX| KEY [別名] (字段 名 1 [(長度)]) [ASC|DESC]));
【解釋一下】
- 【別名】:索引的名稱;
- 【字段名1】:指定索引字段名稱;
- 【長度】:表示索引的長度;
- 【ASC|DESC】: 索引的順序;
分類探討創(chuàng)建索引
- 1)創(chuàng)建普通索引
【格式】:CREATE TABLE t1( id INT, name VARCHAR( 20), score FLOAT,name VARCHAR( 20), score FLOAT, INDEX (id) );
- 2)創(chuàng)建唯一索引
【格式】:CREATE TABLE t2( id INT NOT NULL, name VARCHAR( 20) NOT NULL, score FLOAT, UNIQUE INDEX unique_ id( id ASC) );
- 3)創(chuàng)建多列索引
【格式】:CREATE TABLE t5( id INT NOT NULL, name VARCHAR( 20) NOT NULL,score FLOAT, INDEX multi( id, name( 20)) );
刪除索引
- 直接操作
【結(jié)構(gòu)】:ALTER TABLE 表名 DROP INDEX 索引;
- 使用 DROP INDEX 刪除 索引
【結(jié)構(gòu)】:DROP INDEX 索引 名 ON 表 名;
【重點(diǎn)】添加、更新、刪除數(shù)據(jù)
添加數(shù)據(jù)
- 指定字段添加數(shù)據(jù)
【結(jié)構(gòu)】:INSERT INTO 表 名( 字段 名 1, 字段 名 2,…) VALUES( 值 1, 值 2,…);
- 不指定字段名的insert
【結(jié)構(gòu)】:INSERT INTO 表 名 VALUES( 值 1, 值 2,…);
- 同時插入多條數(shù)據(jù)
【結(jié)構(gòu)】:INSERT INTO 表 名[( 字段 名 1, 字段 名 2,…) ] VALUES( 值 1, 值 2,…),( 值 1, 值 2,…), … (值 1, 值 2,…);
更新數(shù)據(jù)
【結(jié)構(gòu)】:UPDATE 表 名 SET 字段 名 1= 值 1[, 字段 名 2 = 值 2,…] [WHERE 條件 表達(dá)式]
刪除數(shù)據(jù)
【結(jié)構(gòu)】:DELETE FROM 表 名 [WHERE 條件 表達(dá)式];
【結(jié)構(gòu)】:TRUNCATE [TABLE] 表 名;