類魂新遊《上古之魂》開發者感言 更受到《劍風傳奇》影響
資料庫簡介
理解
-
用於持久化儲存資料的管理軟體
-
儲存資料技術
- 1、將資料儲存到記憶體中:變數、物件、陣列、集合
特點:易失性 - 2、持久化儲存技術:IO
特點:可操作性比較差,效率低 - 資料庫:是一個儲存資料的倉庫本質上是一個檔案系統、可以通過結構化查詢語言簡稱sql對裡面的資料進行CRUD(增刪改查)
- 1、將資料儲存到記憶體中:變數、物件、陣列、集合
特點
- 可以持久化儲存資料
- 儲存資料是有組織、有結構
- 以表的形式儲存資料 方便操作
- 提供豐富的sql語句 操作資料
資料庫分類
-
關係型資料庫
-
Orcale、MySQL、SQLServer、DB2...
-
儲存資料是以行和列的形式儲存、這一系統的行與列構成了表、若干張表構成庫。資料與資料之間有關聯關係
-
特徵
- java類名對應資料庫的表名
- java類中的屬性對應資料庫表中欄位
- java類中的屬性的型別對應資料庫中表中欄位型別
- java類中建立一個物件對應資料庫中表中一條資料
-
-
非關係型資料庫
-
redis、MongDB、HBase...
-
應用場景
- 資料要被查詢
- 資料不易修改
-
資料是列、圖片、文件、字串..等形式進行儲存、資料與資料之間沒有任何關係
-
-
區別
- 關係型資料庫將資料儲存在硬碟、非關係型資料庫儲存記憶體中
- 非關係檢索效率要遠遠高於關係型資料庫
資料庫系統結構
- DB:資料庫,儲存資料的容器
- DBMS: 資料庫管理系統,又稱為資料庫軟體或資料庫產品,用於建立或管理DB
- SQL:結構化查詢語言,用於和資料庫通訊的語言,不是某個資料庫軟體特有的,資料庫通用語言
SQL基本分類
結構化查詢語言是一門特殊的程式語言
主要用途:用於對資料庫中資料增刪改查
DDL
-
資料定義語言:對資料庫的建立和刪除 以及對資料庫表的建立刪除和修改
-
關鍵字
- create、drop、alter
DML
-
資料庫查詢語言:對資料庫表中資料 增、刪、改、查
-
關鍵字
- insert、delete、update
DQL
-
資料查詢語言:對資料庫表中資料查詢
-
關鍵字
- select
DCL
-
資料控制語言:指定使用者 分配許可權
-
關鍵字
- grant、reoke
資料型別
整型
- tinyint/smallint/int/bigint
浮點型
- float(n,m)/double(n,m)/decimal(n,m) 準確值 n和m可以省略
- n:整數位+小數位的個數
- m:小數位的個數
字元型
- varchar(n) 變長字串 n必選 儲存字串最大個數 效能低
- char(n) 定義字串 n可選 預設為1 儲存字元最大個數 效能高
日期
-
date 日期 年月日
-
time 時分秒
-
datetime 日期 年月日時分秒
-
timestamp 時間戳 1970年開始 2037年12月31日 23:59:59
-
datetime和timesstamp區別
- datetime最大表示日期是9999年12月31日 23:59:59、timestamp最大表示日期是 2037年12月31日 23:59:59
- datetime預設是null、而timestamp預設值是當前日期
注意
- mysql中沒有boolean型別、通常我們會使用int型別來表示boolean型別 0:false 1:true
DDL
庫的管理
-
關鍵字
- create建立 drop刪除 alter修改 show展示 database資料庫
-
檢視所有的資料庫
- show databases
-
建立資料庫
- 語法一:create database 資料庫名稱;
- 語法二:create database if not exists 資料庫名稱;
-
刪除資料庫
- 語法一:drop database 資料庫名稱
- 語法二:drop database if exists 資料庫名稱;
-
使用庫
- use 資料庫名稱;
-
檢視建立資料庫語句
- show create database 資料庫名稱;
表的管理
-
關鍵字
- show 展示 alter 修改 create 建立 table 表 drop 刪除
-
檢視所有表
- show tables;
-
建立表
-
語法一
- create table 表名稱(
欄位名稱 資料型別.
欄位名稱 資料型別,
欄位名稱 資料型別
...
);
- create table 表名稱(
-
語法二
- create table if not exists 表名稱(
欄位名稱 資料型別.
欄位名稱 資料型別,
欄位名稱 資料型別
...
);
- create table if not exists 表名稱(
-
-
刪除表
- drop table 表名稱;
-
查看錶結構(查詢表的列數和每列表對應的資料型別)
- desc 表名稱;
-
檢視建立表語句
- show create table 表名稱;
表的修改
-
修改表名
- alter table 表名稱 rename 新名稱;
-
修改列名
- alter table 表名稱 change 原列名 新列名 資料型別;
-
修改列型別
-
方式一
- alter table 表名稱 modify 列名稱 新型別;
-
方式二
- alter table 表名稱 change 原列名 新列名 資料型別;
-
-
新增列
- alter table 表名 add 列名 資料型別;
-
刪除列
- alter table 表名 drop 列名;
DML
關鍵字
- 增insert 刪delete 改update
插入
-
不指定欄位插入
-
insert into 表名 values(值1,值2,值3...);
-
注意
- 數值直接給值
- 除數值之外的任意型別都需要加引號
- 預設給所有的欄位插入值
-
-
指定欄位插入
- insert into 表名 (欄位1,欄位2,欄位3,欄位n) values(值1,值2,值3,值n);
- 注意:欄位和值必須一一對應
-
方式三
- insert into 表名 set 欄位1=值1,欄位2=值2,欄位3=值3,欄位N=值N
-
批量插入
- insert into 表名 (欄位1,欄位2,欄位3,欄位n) values(值1,值2,值3,值N),(值1,值2,值3,值n),(值1,值2,值3,值n)
刪除
-
刪除單個
- delete from 表名 [where 條件];
-
刪除所有
- delete from 表名;
- truncate table 表名;
-
delete刪除和truncate刪除的區別
- 方式上:delete會逐行刪除、truncate刪除整張表、重新建立一個一模一樣的表結構
- 效率上:delete效率低、truncate效率高
- 回滾上:delete刪除資料可以回滾(找回來)truncate一旦刪除資料將無法回滾
- 主鍵自增序列上:delete刪除會保留原有自增序列、truncate刪除不會保留
修改
-
修改單個
- update 表名 set 欄位1=值1,欄位2=值2,欄位3=值3,欄位N=值N [where 條件]
-
修改全部
- update user set password ='456',sex='男';
MySQL常見約束
概述
- 用於限定當前列中的值 保證資料的準確性和有效性
常見約束
- not null被約束的列不能為空
- unique 唯一約束 被約束的列的值不允許重複 null可以有多個
- primary key 主鍵約束 值不能重複,不能為null
提高查詢效率(主鍵約束預設回給當前列建立一個索引)一個表通常只有一個主鍵 - default 預設約束 指定預設值
- foreign key 外來鍵約束 描述兩個表之間的關係, 從一個表中(從表)某一列的值 來源於另一個表(主表)的主鍵值
除not null和default都支援表級約束
- 表級約束可以同時約束多列、列級約束只能約束一列
新增約束
-
方式一:建立表的時候新增約束
create table person(
欄位名 欄位型別 約束, #列級約束寫法
欄位名 欄位型別 約束
) -
create table person(
欄位名 欄位型別 ,
欄位名 欄位型別 ,
#表級約束寫法
約束(約束的欄位)
) -
方式二:給已存在的表上新增約束(注意當前表中資料沒有違反約束行為)
alter table 表名 modify 欄位名 欄位型別 約束; -
新增主鍵自增約束:將主鍵的維護全交給資料進行管理
- 要求當前列必須設定主鍵
- 主鍵列必須是int型別
- 自增量為1
- create table person(
欄位名 primary key auto_increment,
欄位名 欄位型別 約束
)
-
萬能公式
- alter table 表名 modify 欄位名 欄位型別 約束;
刪除約束
-
刪除列級約束
- alter table 表名 modify 列名 資料型別
-
刪除表級約束
-
主鍵約束2步
- 1-1 alter table 表名 drop primary key
- 1-2 alter table 表名 modify 列名 資料型別
-
刪除唯一約束
- alter table 表名 drop index 索引名稱
-