程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL 設計和命令行形式下樹立詳解

MySQL 設計和命令行形式下樹立詳解

編輯:MySQL綜合教程

MySQL 設計和命令行形式下樹立詳解。本站提示廣大學習愛好者:(MySQL 設計和命令行形式下樹立詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL 設計和命令行形式下樹立詳解正文


MySQL 設計和命令行形式下樹立詳解

系列文章:

MySQL 設計和命令行形式下樹立詳解

C++應用MySQL API銜接和操作數據庫實例詳解

1.數據表的設計

MySQL數據庫管理零碎(DBMS)中,包括的MySQL中定義數據字段的類型對你數據庫的優化是十分重要的。MySQL支持多品種型,大致可以分為三類:數值、日期/時間和字符串(字符)類型。

上面以大學熟習的學生選課管理零碎中用到的數據庫為例,來設計相應的數據表。次要有三張表:學生表,課程表和選課表。

學生表設計:

字段(Field) 類型(Type) 可空(Null) 鍵(Key) 默許值(Default) 其他(Extra) 學號(studentNo) VARCHAR(12) N PRI NULL 姓名(name) VARCHAR(12) N N NULL 學院(school) VARCHAR(12) N N NULL 年級(grade) VARCHAR(12) N N NULL 專業(major) VARCHAR(12) N N NULL 性別(gender) Boolean N N NULL

課程表設計:

字段(Field) 類型(Type) 可空(Null) 鍵(Key) 默許值(Default) 其他(Extra) 課程號(courseNo) VARCHAR(10) N PRI NULL 課程名(courseName) VARCHAR(10) N N NULL 課時(hour) TINYINT Unsigned N N NULL 課程學分(credit) TINYINT Unsigned N N 2

選課表設計:

字段(Field) 類型(Type) 可空(Null) 鍵(Key) 默許值(Default) 其他(Extra) 編號(id) INT Unsigned N PRI NULL auto_increment 學號(studentNo) VARCHAR(12) N MUL NULL 課程號(courseNo) VARCHAR(10) N MUL NULL 選課時間(time) TIMESTAMP N N CURRENT_TIMESTAMP

關於下面三張數據表的設計,你會發現:

(1)MySQL在為數據定義字符串(字符)類型時,需求在類型稱號的前面的小括號內指明最長字符數,即TypeName(M),這裡的M指的是字符數,而不是數據占用的字節數。例如varchar(12),則表述存儲的字符數不能超越12 ,超越12則截斷,小於12個字符則以實踐占用的存儲空間來存儲,這樣就節省了存儲空間。

(2)在對選課表的設計時,我們添加外鍵約束,可以使得兩張表關聯,保證數據的分歧性和完成一些級聯操作。

(3)MySQL中有三種Key和一個Index: Primary Key(主鍵), Unique Key(獨一鍵),Foreign Key(外鍵)和 Index(索引)。

四者的區別如下:

定義:

主鍵(Primary Key):獨一標識一條記載,不能有反復,不允許為空。
外鍵(Foreign Key):表的外鍵是另一表的主鍵, 外鍵可以有反復, 可以是空值。
獨一鍵( Unique Key):獨一標識一條記載,不能有反復,可以為空。
索引(Index):該字段可以有反復值記載,可以有空值,假如是獨一索引,那麼就不可以有反復的記載,可以有空值。

作用:

主鍵:用來保證數據完好性。
外鍵:用來和其他表樹立聯絡,以保證數據的分歧性和級聯操作。
獨一鍵:用來用避免數據拔出的時分反復。
索引:是進步查詢排序的速度。

個數:

主鍵:一個表只能有一個列是主鍵。
外鍵:一個表可以有多個列是外鍵。
獨一鍵:一個表可以有多個列是獨一鍵。
索引:一個表可以有多個列是索引。

從中可以看出,索引和獨一鍵很類似,二者的區別在於作用不同,索援用於進步查詢速度,獨一鍵用於獨一約束。當然假如樹立的索引是獨一索引的話,也可以起到獨一約束的作用。在MySQL詳細完成上,索引需求樹立數據構造,需求額定的磁盤空間來存儲索引,而鍵(主鍵,外鍵和獨一鍵)都是邏輯層面的完成和約束,二者還是有著實質的區別。

還有就是MySQL的索引包括:普通索引(Index)、獨一索引(UNIQUE INDEX)、全文索引(FULLTEXT INDEX)、組合索引。這裡就不要把獨一鍵和獨一索引弄混雜了!也不要把索引和其它的三種鍵弄混雜了。

還有一點需求留意的是,雖然鍵(key)和索引(index)有著實質的區別,但是當我們在樹立主鍵或許獨一鍵的時分,也就樹立了索引,MySQL和Oracle都是這麼做的,要是不明白這一點,很容易把索引和主鍵和獨一鍵弄混雜。

獨一鍵可以起到獨一約束的作用,當然主鍵也可以起到獨一約束的作用。當然我們可以不樹立獨一鍵和主鍵,直接為指定的數據表的列添加獨一約束。獨一約束保證指定列的值不能反復。

所以,關於下面的概念,大家不要咬文嚼字,而是依據功用去了解每一種KEY的作用,在什麼場所需求去運用它。

比方需求主鍵約束的時分,我們就可以對某一列樹立主鍵;

需求對某一列或許多個列停止獨一約束的時分,我們就樹立獨一鍵或許獨一約束;
需求放慢查詢速度的時分,我們就樹立相應類型的索引。

關於四者的了解,上未參考到威望的材料,請讀者堅持疑心的態度承受。

2.數據庫的樹立

在裝置完mysql之後,我們要樹立自己的數據庫。上面將詳細地一步一步演示如何創立下面設計好的數據庫。
在MySQL形式下,運用status命令可以檢查MySQL版本,自己運用的MySQL版本:5.6.30 MySQL Community Server (GPL)。

關於mysql大小寫問題,mysql命令是不區分大小寫的。數據表的表名在windows下不分,linux下分。數據表的字段名在windows和linux下都不分。

(1)登錄mysql DBMS

Linux命令行中輸出如下命令:

mysql -hlocalhost -uroot -p123456

闡明:順次指明登錄mysql的主機地址,用戶和用戶密碼。

(2)運用show檢查以後mysql服務器上存在什麼數據庫

show databases;

這裡寫圖片描述

闡明:在進入mysql形式下,運用mysql命令時,每條語句要以分號完畢。但是use [DatabaseName]卻不必,能夠是mysql的一個小bug。相似於quit和exit加入mysql的命令,不需求一個分號。(假如你喜歡,你可以用一個分號終止這樣的語句)。

(3)創立數據庫

mysql> CREATE DATABASE StudentCourse;

(4)運用use語句訪問數據庫

mysql>use StudentCourse;

(5)創立數據表student

mysql> create table student(
 studentNo varchar(12) not null,
 name varchar(12) not null,
 school varchar(12) not null,
 grade varchar(12) not null,
 major varchar(12) not null,
 gender boolean not null,
 primary key(studentNo)
)engine=MyISAM default charset=utf8;

察看下面的建表語句,需留意以下幾點:

(a)其中,布爾類型boolean在MySQL是以類型tinyint(1)來完成,這裡的1指代的是數據顯示時最短長度。
實踐上tinyint(1)是可以拔出-128到127之間的其它數值。由於mysql數據庫中以 :數據類型(m)來定義數據類型,其中 數字m在不同的數據類型中表示含義是不同的。 整型數零碎曾經限制了取值范圍,tinyint占一個字節、int占4個字節。所以整型數前面的m不是表示的數據長度,而是表示數據在顯示時顯示的最小長度(長度為字符數)。

tinyint(1) 這裡的1表示的是最短顯示一個字符。tinyint(2) 這裡的2表示的是最短顯示兩個字符,但這裡光設置m是沒有意義的,你還需求指定當數據少於長度m時用什麼來填充,比方zerofill(表示有0填充)。設置tinyint(2) zerofill你拔出1時他會顯示01。設置tinyint(4) zerofill你插1時他會顯示0001。

(b)還要留意一點是,運用engine可指明引擎,假如省略了engine語句,則運用默許的引擎(MYISAM)。MYSQL支持三個引擎:ISAM、MYISAM和HEAP。另外兩品種型INNODB和BERKLEY(BDB),也經常可以運用。

(c)設置default charset指明mysql數據表的編碼方式,不顯示指定編碼方式的話,數據表的默許編碼方式普通是latin1。也可以經過如下命令檢查數據表的編碼方式:

show create table student;

假如需求轉換數據表的編碼格式,運用如下命令:

alter table student convert to character set utf8;

假如想檢查以後數據庫的編碼格式:

mysql>status;
#或許
show variables like 'character%' ;

為了驗證所樹立的數據表能否是依照希冀的方式創立的,運用如下命令:

#檢查表中的列
SHOW COLUMNS FROM student;
#或許直接運用describe
describe student;

這裡寫圖片描述

(6)創立數據表course

mysql> create table course(
 studentNo varchar(12) not null primary key,
 courseNo varchar(10) not null,
 hour tinyint unsigned not null,
 credit tinyint unsigned not null default 2 
)engine=MYISAM default charset=utf8;

異樣可以運用describe檢查表信息:
這裡寫圖片描述

(7)創立數據表courseSelection

mysql> create table courseSelection(
 id int unsigned not null auto_increment primary key,
 studentNo varchar(12) not null,
 courseNo varchar(10) not null,
 time timestamp not null default CURRENT_TIMESTAMP,
 FOREIGN KEY(studentNo) REFERENCES student(ISBN) ON UPDATE CASCADE ON DELETE CASCADE,
 FOREIGN KEY(courseNo) REFERENCES course(courseNo) ON UPDATE CASCADE ON DELETE CASCADE
)engine=MYISAM default charset=utf8 AUTO_INCREMENT=0;

檢查表信息:
這裡寫圖片描述

(8)其它關於數據庫和數據表的操作命令

刪除數據庫:

mysql> DROP DATABASE 庫名;

刪除數據表:

mysql> DROP TABLE 表名;

將表中記載清空:

mysql> DELETE FROM 表名;

參考文獻:

[1]http://www.runoob.com/mysql/mysql-data-types.html
[2]Mysql 檢查、創立、更改 數據庫和表
[3]php裡tinyint(1)為什麼還能拔出99這個值?搜索
[4]MySQL引擎
[5]MySQL中的四種Key
[6]SQL的主鍵和外鍵約束
[7]獨一索引和獨一約束有什麼區別

感激閱讀,希望能協助到大家,謝謝大家對本站的支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved