MySQL的建庫、建表、建約束與存儲引擎

1、MySQL建庫、建表

一、建立數據庫

建立數據庫是在系統磁盤上劃分⼀塊區域用於數據的存儲和管理,若是管理員在設置權限的時候爲用戶建立了數據庫,則能夠直接使用,不然,須要本身建立數據庫。 mysql

語法格式:
CREATE DATABASE [IF NOT EXISTS] 數據庫名
示例:

IF NOT EXISTS:在建立數據庫以前進行判斷,只有該數據庫目前尚不存在時才能執行操做。
此選項能夠用來避免數據庫已經存在而重複建立的錯誤。sql

# 建立myschool數據庫
create database myschool;

IF NOT EXISTS:在建立數據庫以前進行判斷,只有該數據庫目前尚不存在時才能執行操做。
此選項能夠用來避免數據庫已經存在而重複建立的錯誤。 數據庫

二、建立表

語法格式:

CREATE TABLE [IF NOT EXISTS] 表名 (
字段1 數據類型 [字段屬性|約束][索引][註釋],
……
字段n 數據類型 [字段屬性|約束][索引][註釋]
)[表類型][表字符集][註釋];

示例:

#建立學生表
CREATE TABLE `student`(
`studentNo` INT(4) PRIMARY KEY,
` name` CHAR(10),
……);

注意:

多字段使用逗號分隔
保留字用撇號括起來
單行註釋:#……
多行註釋:/*……*/

(1)字段的約束及屬性

image-20200603202656986

主鍵

CREATE TABLE student(
`studentNo` INT(4) PRIMARY KEY,
……);

註釋

CREATE TABLE test (
`id` int(11) UNSIGNED COMMENT ‘編號’
)COMMENT='測試表’ ;

設置字符集編碼

CREATE TABLE [IF NOT EXISTS] 表名(
#省略代碼
)CHARSET = 字符集名;

(2)在myschool數據庫中建立學生表

image-20200603202824035

所需執行的命令

create databases myschool;
use myschool;
create table student(
    `studentNo` int(4) not null comment '學號' primary key,
    `loginPwd` varchar(20) not null comment '密碼',
    `studentName` varchar(50) not null comment '姓名',
    `sex` char(2) not null default '男' comment '性別',
    `gradeID` int(4) unsigned comment '年級編號',
    `phone` varchar(50) comment '電話',
    `address` varchar(255) default '地址不詳' comment '地址',
    `bornDate` datetime comment '出生日期',
    `email` varchar(50) comment '郵件帳號',
    `identityCard` varchar(18) comment '身份證號' unique key
)charset='utf8' comment='學生表';

查看一下表結構

mysql> desc student;
+--------------+-----------------+------+-----+----------+-------+
| Field        | Type            | Null | Key | Default  | Extra |
+--------------+-----------------+------+-----+----------+-------+
| studentNo    | int(4)          | NO   | PRI | NULL     |       |
| loginPwd     | varchar(20)     | NO   |     | NULL     |       |
| studentName  | varchar(50)     | NO   |     | NULL     |       |
| sex          | char(2)         | NO   |     | 男       |       |
| gradeID      | int(4) unsigned | YES  |     | NULL     |       |
| phone        | varchar(50)     | YES  |     | NULL     |       |
| address      | varchar(255)    | YES  |     | 地址不詳 |       |
| bornDate     | datetime        | YES  |     | NULL     |       |
| email        | varchar(50)     | YES  |     | NULL     |       |
| identityCard | varchar(18)     | YES  | UNI | NULL     |       |
+--------------+-----------------+------+-----+----------+-------+
10 rows in set (0.00 sec)

三、查看錶

(1)查看錶是否存在

use myschool;
show tables;

(2)查看錶定義

語法格式:

use myschool;
desc `student`;

示例:

use myschool;
desc `student`;

四、刪除表

語法格式:

drop table [if exists] 表名;

示例:

use myschool;
drop table if exists `student`;
在刪除表以前,先使用 if exists 語句驗證表是否存在

五、刪除數據庫

刪除數據庫是將已經存在的數據庫從磁盤空間上清除,清除以後,數據庫中的全部數據也將除。
刪除數據庫語句和建立數據庫的命令類似,MySQL中刪除數據庫的基本語法格式爲: 緩存

drop database if exists 數據庫名;

示例:

drop database if exists myschool;

六、上機練習

(1)myschool數據庫中建立科目表(subject)

image-20200603211956316

create table subject(
    `subjectNo` int(4) comment '課程編號' primary key auto_increment,
    `subjectName` varchar(50) comment '課程名稱',
    `classHour` int(4) comment '學時',
    `gradeID` int(4) comment '年級編號'
);

查看一下表結構

mysql> desc subject;
+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| subjectNo   | int(4)      | NO   | PRI | NULL    | auto_increment |
| subjectName | varchar(50) | YES  |     | NULL    |                |
| classHour   | int(4)      | YES  |     | NULL    |                |
| gradeID     | int(4)      | YES  |     | NULL    |                |
+-------------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

(2)myschool數據庫中建立成績表(result)

image-20200603212010801

create table result(
    `studentNo` int(4) comment '學號' not null,
    `subjectNo` int(4) comment '課程編號' not null,
    `examDate` datetime(0) comment '考試日期' not null,
    `studentResult` int(4) comment '考試成績' not null
);

查看一下表結構

mysql> desc result;
+---------------+----------+------+-----+---------+-------+
| Field         | Type     | Null | Key | Default | Extra |
+---------------+----------+------+-----+---------+-------+
| studentNo     | int(4)   | NO   |     | NULL    |       |
| subjectNo     | int(4)   | NO   |     | NULL    |       |
| examDate      | datetime | NO   |     | NULL    |       |
| studentResult | int(4)   | NO   |     | NULL    |       |
+---------------+----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

2、MySQL的存儲引擎

一、存儲引擎簡介

數據庫存儲引擎是數據庫底層軟件組件,數據庫管理系統(DBMS)使用數據引擎進行建立、查詢、更
新和刪除數據操做。不一樣的存儲引擎提供不一樣的存儲機制、索引技巧、鎖定水平等功能。使用不一樣的存
儲引擎,還能夠得到特定的功能。
如今許多不一樣的數據庫管理系統都支持多種不一樣的數據引擎。MySQL的核心就是存儲引擎。安全

二、存儲引擎的類型

mysql有多種存儲引擎,它們分別爲: 併發

MyISAM
InnoDB
MERGE
MEMORY
EXAMPLE
FEDERATED
ARCHIVE
CSV
BLACKHOLE

三、存儲引擎的主要區別

image-20200603214932982

(1)MyISAM 存儲引擎特色

  • MySQL 5.5 以前使用 MyISAM 引擎,MySQL 5.5 以後使用 InnoDB 引擎
  • MyISAM 引擎讀取速度較快,佔用資源相對較少,不支持事務,不支持外鍵約束,但支持全文索引
  • 讀寫互相阻塞,也就是說讀數據的時候你就不能寫數據,寫數據的時候你就不能讀數據
  • MyISAM 引擎只能緩存索引,而不能緩存數據

(2)InnoDB 存儲引擎特色

  • 事務型數據庫的首選引擎,支持事務安全表,支持行鎖定和外鍵,MySQL5.5.5 版本以後,InnoDB做爲默認存儲引擎
  • 具備提交、回滾和崩潰恢復能力的事務安全存儲引擎,能處理巨大數據量,性能及效率高,徹底支持外鍵完整性約束
  • 具備很是高效的緩存特性,能緩存索引也能緩存數據,對硬件要求比較高
  • 使用InnoDB時,將在MySQL數據目錄下建立一個名爲ibdata1的10MB大小的自動擴展數據⽂文件,以及兩個名爲 ib_logfile0 和 ib_logfile1 的 5MB ⼤大⼩小的日誌⽂文件

(3)Memory 存儲引擎特色

  • Memory存儲引擎將表中的數據存儲到內存中,爲查詢和引用其餘表數據提供快速訪問
  • Memory存儲引擎執行 HASH 和 BTREE 索引,不支持 BLOB 和 TEXT 列,支持AUTO_INCREMENT列和對可包含 NULL 值得列的索引
  • 當再也不須要 Memory 表的內容時,要釋放被 Memory 表使用的內存,應該執行DELETE FROM 或
    TRUNCATE TABLE ,或者刪除整個表

四、存儲引擎適用場合

(1)MyISAM 適⽤用場景

  • 不須要事務支持的業務,例如:轉帳就不行
  • 適用於讀數據比較多的業務,不適用於讀寫頻繁的業務
  • 併發相對較低、數據修改相對較少的業務
  • 硬件資源比較差的機器能夠考慮使用 MyISAM 引擎

(2)InnoDB 適⽤用場景

  • 須要事務⽀持的業務、⾼併發的業務
  • 數據更新較爲頻繁的場景,⽐如:BBS、SNS、微博等
  • 數據⼀致性要求較⾼的業務,⽐如:充值轉帳、銀⾏卡轉帳

(3)總結

使用MyISAM: 不需事務,空間小,以查詢訪問爲主 使用InnoDB: 多刪除、更新操做,安全性高,事務處理及併發控制 ide

五、查看當前默認存儲引擎

mysql> show variables like '%storage_engine';
+----------------------------------+--------+
| Variable_name | Value |
+----------------------------------+--------+
| default_storage_engine | InnoDB |
| default_tmp_storage_engine | InnoDB |
| internal_tmp_disk_storage_engine | InnoDB |
+----------------------------------+--------+
3 rows in set, 1 warning (0.02 sec)

六、修改默認存儲引擎

(1)MySQL 5.5

修改my.ini配置文件 性能

default_storage_engine=InnoDB

(2)MySQL 5.7

最簡單的方法,就是經過命令直接修改表的存儲引擎,以下所示: 測試

alter table 表名 ENGINE = 引擎名;

示例:

ALTER TABLE student ENGINE = InnoDB;

七、設置表的存儲引擎

語法格式:

CREATE TABLE 表名(
#省略代碼
)ENGINE=存儲引擎;

示例:

CREATE TABLE `myisam` (
id INT(4)
)ENGINE=MyISAM;

3、MySQL補充知識

在mysql中,每一個數據庫最多可建立20億個表,一個表容許定義1024列,每行的最大長度爲8092字節(不包括⽂本和圖像類型的長度)。
當表中定義有varchar、nvarchar或varbinary類型列時,若是向表中插入的數據行超過8092字節時,將致使語句失敗,併產生錯誤信息。
SQL Server對每一個表中行的數量沒有直接限制,但它受數據庫存儲空間的限制。每一個數據庫的最大空間1048516TB,因此一個表可用的最大空間爲1048516TB減去數據庫類系統表和其它數據庫對象所佔用的空間。理論上無限大,就看你硬盤夠不夠大,大多數狀況先是你的硬盤不夠。 大數據

相關文章
相關標籤/搜索