表的定義:
是數據庫最基本的組成單元,數據庫是用來儲存數據的,數據庫中有很多表,每一個表都是一個獨立的單元,表也是一個結構化的文件,由行和列組成,行稱爲數據或記錄,列稱爲字段,字段又包含:字段名稱、字段類型、長度、約束
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;
數據庫設計三範式
第一範式:主鍵,字段不能再分
第二範式:非主鍵字段完全依賴主鍵
第三範式:建立在第二範式基礎之上,要求非主鍵字段不能產生傳遞依賴於主鍵字段