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資料庫,-u 表示選擇登陸的使用者名, -p 表示登陸的使用者密碼,
建立資料庫
建立資料庫bank,并檢視所有的資料庫。
create datebase bank;
show databases;
配置設定權限:建立一個使用者dezho,密碼是xyz,配置設定查詢、插入,更新等權限給他。
grant select,insert,update,delete,create,drop,alter on bank.* to [email protected] identified by 'xyz';
quit
mysql -u dezho -p
輸入密碼xyz,檢視是否能夠登入。
使用資料庫
建立資料表
-
常用資料類型
選擇資料類型的原則:設計資料庫盡量用能滿足需要的最小類型。
字元型 | ||
---|---|---|
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。
删除資料表
删除資料表一共有三種方法:drop,truncate和delete。使用方法都是[drop|truncate|delete] table 表名。
删除方法 | 特點 |
---|---|
drop | 删除表的内容,删除表的定義,釋放記憶體空間 |
truncate | 删除表的内容,釋放空間,但是不删除表的定義,索引從頭開始 |
delete | 删除表的内容,不删除表的定義,不釋放空間,可以復原,索引不重新設定 |
增删改查資料
插入一行記錄需要提供的資訊:表名,列名,各列的值。
1. 主鍵插入:主鍵一般采用自增的數字或者uuid。
主鍵類型 | 優點 | 缺點 |
---|---|---|
自增 | 簡單,性能高 | 主鍵個數有限,整數類型即使是bigint也隻能支援20位數,int隻能支援到10位數 |
uuid | 利于分布式表中的主鍵唯一 | uuid占空間大,生成、查詢的速度都比較慢,性能較低 |
修改表t_person中主鍵person_id的生成方式為自增
- alter table: 用于在已有的表中添加、修改或删除列。
- 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 ;
插入之後查詢,得到的結果集如下所示:
删除文法: DELETE FROM 表名稱 WHERE 列名稱 = 值
delete from t_person where person_id=;
select * from t_person ;
删除之後查詢,發現之前的記錄已經沒有了.
查詢文法:
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 ;
更新文法: 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 ;