天天看點

MySql學習 日記MySql學習 日記 - 第一篇 基礎篇

MySql學習 日記 - 第一篇 基礎篇

ucloud learning

背景知識

  • 1970 年 IBM E.F.Codd 博士發表論文“大型共享資料銀行的資料關系模型”
    使用表集合來表示資料,相關條目之間采用備援資料來連結而不是指針來導航。
  • 基本術語
術語 定義
單個資料片段
所有列的一個集合,也叫記錄
行的集合
結果集 一般為 SQL 查詢的結果
主鍵 用于唯一辨別表中某一個行的一個或多個列組合
外鍵 用于唯一辨別其它表中某一行的一個或多個列組合
  • SQL 是一種語言。操作關系資料庫的語言。

    SQL 查詢的結果也可以視為一張表,就是上面說的結果集。

    SQL 語句定義了輸入和輸出,執行語句的方式交由優化器處理。

  • MySql 是一種開源資料庫伺服器,首頁 www.mysql.com. 遵循ANSI SQL标準。

總結一下:MySql是一種開源的關系型資料庫伺服器,遵循ANSI SQL标準,SQL本身隻是一種語言。

安裝MySql資料庫

sudo apt-get install mysql-server
apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
sudo netstat -tap | grep mysql
           

如果MySql服務端口處于LISTEN狀态,表明安裝成功

MySql學習 日記MySql學習 日記 - 第一篇 基礎篇

登入MySql資料庫,-u 表示選擇登陸的使用者名, -p 表示登陸的使用者密碼,

MySql學習 日記MySql學習 日記 - 第一篇 基礎篇

建立資料庫

建立資料庫bank,并檢視所有的資料庫。

create datebase bank;
show databases;
           
MySql學習 日記MySql學習 日記 - 第一篇 基礎篇

配置設定權限:建立一個使用者dezho,密碼是xyz,配置設定查詢、插入,更新等權限給他。

grant select,insert,update,delete,create,drop,alter on bank.* to [email protected] identified by 'xyz';
quit
mysql -u dezho -p
           

輸入密碼xyz,檢視是否能夠登入。

MySql學習 日記MySql學習 日記 - 第一篇 基礎篇

使用資料庫

建立資料表

  1. 常用資料類型

    選擇資料類型的原則:設計資料庫盡量用能滿足需要的最小類型。

字元型
type 特點 優缺點
char 固定長度 可支援的最大長度255B; 不要額外的用于資料長度的計算;不需要額外空間儲存資料長度
varchar 可變長度 可支援的最大長度65535B; 實際存儲空間與變量的實際長度相關,節省空間;需要額外的空間儲存資料實際長度
整數類型
type 存儲大小 十進制最大支援位數
tinyint 1個位元組 3位數
smallint 2個位元組 5位數
int 4個位元組 10位數
bigint 8個位元組 20位數
時間類型
type 格式 特點
date YYYY-MM-DD 隻能存放年月日,可以用于存放出生日期
datetime YYYY-MM-DD HH-MI-SS 精确到秒,比如訂單配送時間,需要具體到秒
timestamp YYYY-MM-DD HH-MI-SS 精确到秒,增加或者更新時會自動地将timestamp列更新為目前時間
year YYYY 隻記錄年份資訊
time HHH:MI:SS 隻記錄時間資訊

2. 設計表結構

規範化:資料庫設計時確定沒有重複(外鍵除外)或者符合列。

比如name可以拆分成姓氏與名字,address可以拆分成街道、縣、市、省。

設計一個t_person表

類型 說明
persion_id int Primary Key
first_name varchar(20)
last_name varchar(20)
gender char(1) 隻能是M,F
birth_date date
street varchar(30)
city varchar(30)
state varchar(30)
country varchar(30)

3. 建構表

create table t_person
(
  person_id int unsigned,
  first_name varchar(),
  last_name varchar(),
  gender char() CHECK (gender IN ('M', 'F')),
  birth_date date,
  street varchar(),
  city varchar(),
  state varchar(),
  country varchar(),
  constraint pk_person primary key (person_id)
);
           
  • constraint pk_person primary key (person_id): 建立一個限制,限制的名字叫pk_person,限制的類型是主關鍵字限制,并指定person_id遵循該限制。
  • 限制: 寫入資料的限制條件
  • 主關鍵字限制(Primary Key Constraint):輸入的列必須能夠唯一指定該行。
  • gender char(1) CHECK (gender IN (‘M’, ‘F’))的CHECK語句會被忽略掉,無法保證gender一定在[‘M’, ‘F’]中。可以使用enum的字元資料類型來對gender做數值限制。
  • enum 是一個字元串對象,其值來自表建立時在列規定中顯式枚舉的一列值。
create table t_person
(
  person_id int unsigned,
  first_name varchar(),
  last_name varchar(),
  gender enum('M', 'F'),
  birth_date date,
  street varchar(),
  city varchar(),
  state varchar(),
  country varchar(),
  constraint pk_person primary key (person_id)
);
           
  • 1,2,4,5,6列都比較好了解,第三列的Null:表明插入資料時,如果沒有指定該列的值,是否允許填充為null。
    MySql學習 日記MySql學習 日記 - 第一篇 基礎篇

删除資料表

删除資料表一共有三種方法:drop,truncate和delete。使用方法都是[drop|truncate|delete] table 表名。

删除方法 特點
drop 删除表的内容,删除表的定義,釋放記憶體空間
truncate 删除表的内容,釋放空間,但是不删除表的定義,索引從頭開始
delete 删除表的内容,不删除表的定義,不釋放空間,可以復原,索引不重新設定

增删改查資料

插入一行記錄需要提供的資訊:表名,列名,各列的值。

1. 主鍵插入:主鍵一般采用自增的數字或者uuid。

主鍵類型 優點 缺點
自增 簡單,性能高 主鍵個數有限,整數類型即使是bigint也隻能支援20位數,int隻能支援到10位數
uuid 利于分布式表中的主鍵唯一 uuid占空間大,生成、查詢的速度都比較慢,性能較低

修改表t_person中主鍵person_id的生成方式為自增

  • alter table: 用于在已有的表中添加、修改或删除列。
MySql學習 日記MySql學習 日記 - 第一篇 基礎篇
  1. insert、select, update, delete語句
插入文法:INSERT INTO table_name(列1, 列2,…) VALUES (值1, 值2,….)
insert into t_person(first_name, last_name, gender, birth_date) values ('zhiwei', 'pei', 'M', '1988-05-06');
select * from t_person ;
           

插入之後查詢,得到的結果集如下所示:

MySql學習 日記MySql學習 日記 - 第一篇 基礎篇
删除文法: DELETE FROM 表名稱 WHERE 列名稱 = 值
delete from t_person where person_id=;
select * from t_person ;
           

删除之後查詢,發現之前的記錄已經沒有了.

MySql學習 日記MySql學習 日記 - 第一篇 基礎篇

查詢文法:

SELECT 列名稱 FROM 表名稱

SELECT * FROM 表名稱

insert into t_person(first_name, last_name, gender, birth_date) values ('zhiwei', 'pei', 'M', '1988-05-06');
select person_id, first_name, last_name from t_person ;
           
MySql學習 日記MySql學習 日記 - 第一篇 基礎篇
更新文法: UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值

比如我們将last_name改成’chen’

update t_person set last_name='chen' where person_id=;
select person_id, first_name, last_name from t_person ;
           
MySql學習 日記MySql學習 日記 - 第一篇 基礎篇