MYSQL學習筆記(三)

表的定義
是數據庫最基本的組成單元,數據庫是用來儲存數據的,數據庫中有很多表,每一個表都是一個獨立的單元,表也是一個結構化的文件,由行和列組成,行稱爲數據或記錄,列稱爲字段,字段又包含:字段名稱、字段類型、長度、約束
creat table t_表名/tbl_表名(
字段名稱 字段類型 字段長度 字段約束,
);

MYSQL常用數據類型

數據類型 佔用字節數 描述
char char(n) 定長字符串,儲存空間大小固定使用char(2)來表示類型或狀態
vachar varchar(n) 變長字符串,儲存空間等於實際數據空間,只包含英文字符的字符串
int 4個字節 表示整數,比如自增ID和表示數量
bigint 8個字節 表示長整數,比如自增ID(數量比較大的情況下)
float(有效數字位數,小數位) float(有效數字位數,小數位) 數值型
double(有效數字位數,小數位) double(有效數字位數,小數位) 數值型
date 8字節 表示日期和時間
BLOB Binary Large Object(二進制大對象)
CLOB Character Large Object(字符大對象)

vachar和char對比:
1.都是字符串
2.vachar比較智能,可以根據實際的數據長度分配空間,比較節省空間;
但是分配的時候需要相關判斷,效率低
3.char不需要動態分配空間,所以執行效率高,但是可能會導致空間浪費
4.若字段中的數據不具備伸縮性,建議採用char類型儲存
5.若字段中的數據具備很強的伸縮性,建議採用vachar類型儲存

創建表及刪除表
學號:no INT(4)
姓名:name varchar(32)
性別:sex char(1)
出生日期:birth date
郵箱:email varchar(128)

create table t_student(
no int(4),
name varchar(32),
gender char(1),
birth date,
email varchar(128)
);

drop table t_student;
drop table if exists t_student;

複製表語句:
create table 表名 as 查詢語句
create table emp_back as select * from emp;

DML語句:insert update delete
1.insert語法:insert into 表名(字段名,字段名)values(字段值,字段值);
insert into t_student(no,name,gender,birth,email) values(1,‘zhangsan’,‘1’,str_to_date(‘1949-10-01’,’%Y-%m-%d’),‘zhangsan126.com’);
insert into t_student(no,name,gender,birth,email) values(2,‘lisi’,‘0’,str_to_date(‘1949-11-01’,’%Y-%m-%d’),‘lisi126.com’);
insert into t_student(no,name,gender) values(3,‘lilei’,‘1’);
2.update語法:update 表名 set 字段名稱 = 字段值,字段名稱 = 字段值 where 限制條件;
update t_student set birth = str_to_date(‘1993-02-22’,’%Y-%m-%d’) where no = 3;
update t_student set gender = 1,email = ‘lisi111.com’ where no = 2;
3.delete語法:
delete from t_student;//刪除表中所有的數據
delete from t_student where no = 3;

設置表中字段默認值
create table t_student(
no int(4),
name varchar(32),
gender char(1) default ‘1’,
birth date
email varchar(128)
);
insert into t_student(no,name) values(1,‘zhangsan’);

修改表的結構:
alter table 表名 add 字段名 字段值;
alter table 表名 modify ;
alter table 表名 drop 字段名;
alter table t_student change name username varchar(32);

創建表加入約束
含義:實際上是對錶中數據的限制條件;
目的:保證表中數據的完整和有效;
1.非空約束
作用:not null約束的字段不能爲NULL值,必須賦具體數據;
2.唯一性約束
作用:unique約束的字段具有唯一性,不可重複
列級約束
表級約束
3.主鍵約束
主鍵涉及到的3個術語: 主鍵約束,主鍵字段,主鍵值
三者之間關係:
表中某個字段添加主鍵約束之後,該字段被稱爲主鍵字段,主鍵字段出現的每一個數據都被稱爲主鍵值:
個數分類:單一主鍵和複合主鍵
性質分類:自然主鍵和業務主鍵

MYSQL中自動生成主鍵值(MYSQL特有)
定義:MYSQL數據庫管理系統中提供了一個自增數字auto_increment,專門用來生成主鍵值,主鍵值不需要用戶去維護,也不需要用戶生成,MYSQL會自動生成,自增數字默認從1開始,以1遞增:1,2,3…

4.外鍵約束
外鍵涉及到的3個術語:外鍵約束,外鍵字段,外兼值
三者之間關係:
表中某個字段添加外鍵約束之後,該字段被稱爲、外鍵字段,外鍵字段出現的每一個數據都被稱爲外鍵值:
個數分爲:單一外鍵和複合外鍵
外鍵在同一張表中可以有多個外鍵存在

級聯更新與級聯刪除
用法: 在添加級聯更新與級聯刪除的時候,需要在外鍵約束後面添加關鍵字:
注意: 級聯更新與級聯刪除操作謹慎使用,因爲級聯操作會將數據改變或者刪除
級聯刪除:on delete cascade
定義: 在刪除父表的時候,級聯刪除子表中的數據:

alter table t_student  add constraint t_student_classno_fx foreign key(classno)
            references t_class(cno) on delete cascade;
alter table t_student add constraint t_student_classno_fx foreign key(classno)
            references t_class(cno) on update cascade;

常用的存儲引擎
1.MyISAM引擎是MySQL數據庫中最常用的;
它管理的表具有以下三個特性:
使用三個文件表示每個表:
a. 格式文件-----存儲表的結構
b. 數據文件-----存儲表的數據
c. 索引文件-----存儲表的索引
可轉換爲壓縮,只讀表來節省空間

2.InnoDB存儲引擎是MySQL數據庫的缺省引擎;
它管理的表具有以下特徵:
a. 每個InnoDB表在數據庫目錄中以.frm格式文件表示
b.InnoDB表空間tablespace被用於儲存表的內容
c. 提供一組用來記錄事務性活動的日誌文件
d. 用COMMIT(提交),SAVEPOINT及ROLLBACK(回滾)支持事務處理
e. 提供全部ACID兼容
f. 在MySQL服務器崩潰後提供自動恢復
g. 多版本和行級鎖定
h. 支持外鍵及引用的完整性,包括級聯更新和刪除

3.MEMORY存儲引擎
使用MEMORY存儲引擎的表,因爲數據存儲在內存中,且行的長度固定,所以使得MEMORY存儲引擎非長快;
MEMORY儲存引擎管理的表具有以下特徵:
a. 在數據庫目錄內,每個表均已.frm格式文件表示
b. 表數據及索引被存儲在內存中;
c. 表級鎖機制
d.字段屬性不能包含TEXT或BLOB;
MEMORY存儲引擎之前被稱爲HEAP引擎

索引
語法結構:
create index 索引名 on 表名(列名)
查看索引

show index from t_student;

創建視圖

create view myview as select * from emp;

刪除視圖

drop view myview;

數據庫設計三範式
第一範式:主鍵,字段不能再分
第二範式:非主鍵字段完全依賴主鍵
第三範式:建立在第二範式基礎之上,要求非主鍵字段不能產生傳遞依賴於主鍵字段

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章