關係模型和SQL

2021-09-24 15:31:37 字數 2825 閱讀 1077

為了介紹關係模型, 以mysql資料庫為例.

安裝mariadb

sql是結構化查詢語言structured query language. 2023年被iso組織標準化.

所有主流的關係型資料庫都支援sql, nosql也有很大一部分支援sql.

sql語句分為:

語言規範

sql語句大小寫不敏感

sql語句末尾應該使用分號結束注釋

使用空格或或縮進來提高可讀性

命名規範

dclgrant授權,revoke撤銷

grant all on empliyees.

* to "gogs"@"%" identified by "密碼"

revoke all on *

.* from 使用者 ##撤銷許可權

##*.* 第乙個*basebases所有庫, 第二個*匹配所有庫內的所有表

*為萬用字元, 指代任一款或者任意表

*.*所有庫的所有表;

emloyees.*表示employess庫下的所有表

% 為萬用字元, 它是sql語句的萬用字元, 匹配任意長度字串注意是匹配字元的.

'_'指代乙個字元

ddl刪除使用者(慎用)

drop user gogs;
建立資料庫

庫的資料的集合, 所有資料按照資料模型組織在資料庫中.

greate database if not existe test character set utf8mb64_general_ci;

greate database if not existe test charcter set utf8;

character set 指定字符集.

utfmb4是utf8的擴充套件, 支援4位元組(一些特殊符號需要), 需要mysql5.5.3+.

collate指定字符集的校對規則, 用來做字串的比較. 例如a, a誰大

刪除資料庫

drop database if exist gogs;
建立表

表分為行和列, mysql是行存資料庫. 資料時一行行存的, 列必須固定多少列.

行row, 也稱為記錄record,元組.

列column, 也稱字段field,屬性.

欄位的取值範圍叫做域domain. 例如gender欄位的取值就是m或者f連個值

create table `employess`( 

`emp_no` int(11

) not null,

`birth date` date not null,

`first_name` varchar(

14) not null,

`last_name` varchar(

16) not null,

`gender` enum(

'm',

'f') not null,

`hire_date` date not null, primary key(`emp_no`)

) engine=innodb default charset = utf8;

desc

檢視列資訊

tbl_name[col_name | wild]

desc employees;

desc employees '%name'

關係

在關係型資料庫中. 關係就是二維表, 由行和列組成.

行row,也稱記錄record,元組.

列column, 也稱字段field, 屬性.

欄位的取值範圍叫做 域domain. 例如gender欄位的取值就是m或者f兩個值

維數: 關係的維數指關係中屬性的個數

基數: 元組的個數

注意在關係中, 屬性的順序並不重要. 理論上, 元組順序也不重要, 但是由於元組順序和儲存相關, 會影響查詢效率.

候選鍵關係中, 能夠唯一標識一條元組的屬性或者屬性集合, 稱為候選鍵.

primary key主鍵

表中一列或者多列組成唯一的key, 也就是通過這乙個或者多個列能夠唯一標識一條記錄, 即被選擇的候選鍵.

主鍵的列不能包含空值null. 主鍵往往設定為整形, 長整型, 可以為自增auto_increment欄位.

表中可以沒有主鍵, 但是, 一般表設計中 ,往往都會有主鍵, 以避免記錄重複.

foreign key外來鍵

嚴格來說, 當乙個關係中的某個屬性或者集合與另乙個關係(也可以是自身)的候選鍵匹配是, 就乘坐這個屬性或屬性集合是外來鍵.

索引index

可以看做是一本字典的目錄, 為了快速檢索用. 空間換時間, 顯著提高查詢效率.

可以對一列或者多列字段設定索引.

主鍵索引, 主鍵會自動建立主鍵索引, 主鍵本身就是為了快速定位唯一記錄的.

唯一索引, 表中的所用組成的索引必須唯一, 但可以為空, 非空值必須唯一

普通索引, 沒有唯一性的要求, 就是建乙個字典的目錄而已.

約束constraint

為了保證資料的完整爭取, 資料模型還必須支援完整性約束.

引用完整性referential integrity

外來鍵定義中, 可以不是引用另一張表的主鍵, 但是, 往往實際只會關注引用主鍵.

外來鍵: 在表b中的列, 引用了表a中的主鍵, 表b中的列就是外來鍵.

a表稱為主表, b表稱為從表

SQL 關係模型

主鍵是關係表中記錄的唯一標識。主鍵的選取 主鍵不要帶有業務含義,而應該使用bigint自增或者guid型別。主鍵也不應該允許null。idclass id name other columns 11 小明 21 小紅 52 小白 在students表中,通過class id的字段,可以把資料與另一張...

SQL基礎 關係模型 主鍵

描述 能通過某個字段唯一區分出不同的記錄,這個欄位被成為主鍵 特性 a.主鍵必須包含唯一的值 b.主鍵列不能包含null值 c.每個表都應該有乙個主鍵,並且每個表只能有乙個主鍵 選取主鍵的基本原則 不使用任何業務相關的字段作為主鍵 身份證號 手機號 郵箱位址均不可用作主鍵 作為主鍵最好是完全與業務無...

SQL筆記02 關係模型

學習sql關係模型並總結,廖雪峰教程 表和表之間應該建立 一對多 多對一 的關係 int自增型別,記錄數最多21億,bigint自增型別最多922億億 mysql alter table students add constraint fk class id foreign key class id...