一、數據庫
1.1.數據庫是什么
數據庫是存儲數據的倉庫,其本質是一個文件系統,數據按照特定的格式將數據存儲起來,用戶可以對數據庫中的數據進行增刪改查操作。
1.2.數據庫管理系統是什么
數據庫管理系統(DataBase Management System,簡稱DBMS):是一種操作和管理數據庫的大型軟件,用于建立、使用和維護數據庫,對數據庫進行統一管理和控制,以保證數據庫的安全性和完整性。用戶通過數據庫管理系統訪問數據庫中表內的數據。
1.3.常見的數據庫管理系統
Oracle :收費的大型數據庫,Oracle公司的產品。Oracle收購SUN公司,收購MYSQL。
MYSQL :開源免費的數據庫,小型的數據庫.已經被Oracle收購了.MySQL6.x版本也開始收費。
DB2 :IBM公司的數據庫產品,收費的。常應用在銀行系統中.
SQLServer:MicroSoft 公司收費的中型的數據庫。C#、.net等語言常使用。
SyBase :已經淡出歷史舞臺。提供了一個非常專業數據建模的工具PowerDesigner。
SQLite : 嵌入式的小型數據庫,應用在手機端。
Java相關的數據庫:MYSQL,Oracle.
1.4.數據庫表
數據庫中是以表為組織單位存儲數據的。
表類似JAVA中的類,每個字段都有對應的數據類型。
JAVA | 表 |
---|---|
類 | 表 |
類屬性 | 表字段 |
類對象 | 表記錄 |
1.5 表數據
根據表字段所規定的數據類型,我們可以向其中插入一條條的數據,而表中的每條數據類似JAVA類的實例對象。表中的一行一行的信息我們稱之為記錄。
二、SQL語句
下面部分以SQL語句來詳細介紹數據庫表的相關知識。
2.1.什么是SQL語句?
結構化查詢語言(Structured Query Language)簡稱SQL,是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統。創建數據庫、創建數據表、向數據表中添加一條條數據信息均需要使用SQL語句。
2.2.SQL語句分類
數據定義語言:簡稱DDL(Data Definition Language),用來定義數據庫對象:數據庫,表,列等。關鍵字:create,alter,drop等
數據操作語言:簡稱DML(Data Manipulation Language),用來對數據庫中表的記錄進行更新。關鍵字:insert,delete,update等
數據查詢語言:簡稱DQL(Data Query Language),用來查詢數據庫中表的記錄。關鍵字:select,from,where等
數據控制語言:簡稱DCL(Data Control Language),用來定義數據庫的訪問權限和安全級別,及創建用戶。
2.3.SQL通用語法
SQL語句可以單行或多行書寫,以分號結尾;
可使用空格和縮進來增強語句的可讀性;
MySQL數據庫的SQL語句不區分大小寫,建議使用大寫,例如:SELECT * FROM user;
注釋使用/**/
MySQL中的我們常使用的數據類型如下:
數據類型 | 意義 |
---|---|
int | 整形 |
double | 浮點型 |
varchar | 字符串型 |
date | 日期類型 |
2.4.SQL基本語句
2.4.1.創建數據庫
CREATE DATABASE 數據庫名;
CREATE DATABASE 數據庫名 CHARACTER SET 編碼類型;
創建數據庫 數據庫中數據的編碼采用的是安裝數據庫時指定的默認編碼 utf8
CREATE DATABASE china_book;
CREATE DATABASE china_book CHARACTER SET utf8; /*指定數據庫中數據的編碼*/
2.4.2.查看數據庫
查看數據庫MySQL服務器中的所有的數據庫:show databases;
查看某個數據庫的定義的信息:show create database 數據庫名;
SHOW CREATE DATABASE china_book;
2.4.3.刪除數據庫
drop database 數據庫名稱;
DROP DATABASE china_book;
2.4.4.查看正在使用的數據庫
SELECT DATABASE();
2.4.5.切換數據庫
USE china_book;
2.5.表結構相關語句
2.5.1.創建表
語法:
create table 表名(
??字段名 類型(長度) 約束,
??字段名 類型(長度) 約束,
??...
);
創建學生表
CREATE TABLE student (
s_id INT,
s_age INT,
S_name VARCHAR(50),
)
2.5.2.主鍵
主鍵是用于標識當前記錄的字段。它的特點是非空,唯一。(在開發中一般情況下主鍵是不具備任何含義,只是用于標識當前記錄)
主鍵格式:
a.在創建表時創建主鍵,在字段后面直接加上 PRIMARY KEY
CREATE TABLE student (
s_id INT PRIMARY KEY,
s_age INT,
s_name VARCHAR(50)
)
b.在創建表時創建主鍵,在表創建的最后來指定主鍵 PRIMARY KEY(主鍵的字段名)
CREATE TABLE student (
s_id INT,
s_age INT,
s_name VARCHAR(50),
PRIMARY KEY(s_id)
)
刪除主鍵:ALTER TABLE 表名 DROP PRIMARY KEY
ALTER TABLE student DROP PRIMARY KEY;
主鍵自動增長:一般主鍵是自增長的字段,不需要指定。
實現添加自增長語句,主鍵字段后加auto_increment(只適用MySQL)
CREATE TABLE student (
s_id INT PRIMARY KEY auto_increment,
s_age INT,
s_name VARCHAR(50)
)
2.5.3.查看表
a.查看數據庫中的所有表:SHOW TABLES;
b.查看表結構:DESC 表名; 如:DESC student;
2.5.4.刪除表
DROP TABLE 表名
2.5.5.修改表結構格式
a.為表添加一個新的字段:ALERT TABLE 表名 add 列名 類型
ALERT TABLE studen ADD s_score INT
b.修改表的某個字段的類型和約束:ALERT TABLE 表名 MODIFY 列名 類型(長度) 約束;
ALERT TABLE student MODIFY s_score DOUBLE;
ALERT TABLE student s_id MODIFY NOT NULL /*不能為空*/
c.修改表的字段名:ALERT TABLE 表名 CHANGE 舊列名 新列名 類型(長度) 約束;
ALERT TABLE student CHANGE s_name student_name VARCHAR2(100)
d.刪除表的某列:ALERT TABLE 表名 DROP 列名
ALERT TABLE student DROP s_score
e.修改表名:RENAME TABLE 表名 TO 新表名
RENAME TABLE student TO stu
f.修改表的字符集:ALERT TABLE 表名 CHARACTER SET 字符集;
ALERT TABLE stu CHARACTER SET gbk;
2.5.6.給表添加數據(插入記錄)
a.向表中插入某些列(列舉出需要插入的值)
INSERT INTO 表名 (列表1,列表2,列表3,...) VALUES (值1,值2,值3,...)
b.向表中插入所有列
INSERT INTO 表名 VALUES (值1,值2,值3,...)
插入數據的注意事項:
插入的數據應與字段的數據類型相同;
數據的大小應該在列的長度范圍內;
在VALUES中列出的數據位置必須與被加入列的排列位置相對應;
除了數值類型外,其它的字段類型的值必須使用引號引起;
如果要插入空值,可以不寫字段,或者插入 null;
對于自動增長的列在操作時,直接插入null值即可;
INSERT TABLE student(s_id,s_name) VALUES(100,'zhangsan')
INSERT TABLE student(s_id,s_name) VALUES(101,'lisi')
INSERT TABLE student(s_id,s_name) VALUES(102,'wanger')
INSERT TABLE student(s_id,s_name) VALUES(103,'mazi')
2.5.7.更新表數據
用來修改指定條件的數據,將滿足條件的記錄指定列修改為指定值
UPDATE 表名 SET 字段名=值,字段名=值;
UPDATE 表名 SET 字段名=值,字段名=值 WHERE 條件;
注意事項:
列名的類型與修改的值要一致;
修改值得時候不能超過最大長度;
值如果是字符串或者日期需要加''
將學生表里的分數全部改為100
UPDATE TABLE SET s_score=100;
將zhangsan的分數改成90
UPDATE TABLE SET s_score=90 WHERE s_name = 'zhangsan';
2.5.8.刪除表數據
DELETE FROM 表名 [WHERE 條件];
TRUNCATE TABLE 表名
面試題:刪除表中所有記錄使用 DELETE FROM 表名; 還是用 TRUNCATE TABLE 表名?
答:
TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日志資源少。
DELETE 語句每次刪除一行,并在事務日志中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放存儲表數據所用的數據頁來刪除數據,并且只在事務日志中記錄頁的釋放。
TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重置為該列的種子。如果想保留標識計數值,請改用 DELETE。如果要刪除表定義及其數據,請使用 DROP TABLE 語句。
對于由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應使用不帶 WHERE 子句的 DELETE 語句。由于 TRUNCATE TABLE 不記錄在日志中,所以它不能激活觸發器。
TRUNCATE TABLE 不能用于參與了索引視圖的表。
三、數據庫的查詢
測試人員最主要用到的是數據查詢,查詢語句請參見之前的文章
《查詢》