最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL 設計和命令行模式下建立詳解

 更新時間:2017年01月09日 09:28:46   投稿:lqh  
這篇文章主要介紹了MySQL 設計和命令行模式下建立詳解的相關資料,主要講解了數(shù)據庫的建立與數(shù)據表的設計,需要的朋友可以參考下

MySQL 設計和命令行模式下建立詳解

系列文章:

MySQL 設計和命令行模式下建立詳解

C++利用MySQL API連接和操作數(shù)據庫實例詳解

1.數(shù)據表的設計

MySQL數(shù)據庫管理系統(tǒng)(DBMS)中,包含的MySQL中定義數(shù)據字段的類型對你數(shù)據庫的優(yōu)化是非常重要的。MySQL支持多種類型,大致可以分為三類:數(shù)值、日期/時間和字符串(字符)類型。

下面以大學熟悉的學生選課管理系統(tǒng)中用到的數(shù)據庫為例,來設計相應的數(shù)據表。主要有三張表:學生表,課程表和選課表。

學生表設計:

字段(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
專業(yè)(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

對于上面三張數(shù)據表的設計,你會發(fā)現(xiàn):

(1)MySQL在為數(shù)據定義字符串(字符)類型時,需要在類型名稱的后面的小括號內指明最長字符數(shù),即TypeName(M),這里的M指的是字符數(shù),而不是數(shù)據占用的字節(jié)數(shù)。例如varchar(12),則表述存儲的字符數(shù)不能超過12 ,超過12則截斷,小于12個字符則以實際占用的存儲空間來存儲,這樣就節(jié)省了存儲空間。

(2)在對選課表的設計時,我們添加外鍵約束,可以使得兩張表關聯(lián),保證數(shù)據的一致性和實現(xiàn)一些級聯(lián)操作。

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

四者的區(qū)別如下:

定義:

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

作用:

主鍵:用來保證數(shù)據完整性。
外鍵:用來和其他表建立聯(lián)系,以保證數(shù)據的一致性和級聯(lián)操作。
唯一鍵:用來用防止數(shù)據插入的時候重復。
索引:是提高查詢排序的速度。

個數(shù):

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

從中可以看出,索引和唯一鍵很相似,二者的區(qū)別在于作用不同,索引用于提高查詢速度,唯一鍵用于唯一約束。當然如果建立的索引是唯一索引的話,也可以起到唯一約束的作用。在MySQL具體實現(xiàn)上,索引需要建立數(shù)據結構,需要額外的磁盤空間來存儲索引,而鍵(主鍵,外鍵和唯一鍵)都是邏輯層面的實現(xiàn)和約束,二者還是有著本質的區(qū)別。

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

還有一點需要注意的是,雖然鍵(key)和索引(index)有著本質的區(qū)別,但是當我們在建立主鍵或者唯一鍵的時候,也就建立了索引,MySQL和Oracle都是這么做的,要是不明白這一點,很容易把索引和主鍵和唯一鍵弄混淆。

唯一鍵可以起到唯一約束的作用,當然主鍵也可以起到唯一約束的作用。當然我們可以不建立唯一鍵和主鍵,直接為指定的數(shù)據表的列添加唯一約束。唯一約束保證指定列的值不能重復。

所以,關于上面的概念,大家不要咬文嚼字,而是根據功能去理解每一種KEY的作用,在什么場合需要去使用它。

比如需要主鍵約束的時候,我們就可以對某一列建立主鍵;

需要對某一列或者多個列進行唯一約束的時候,我們就建立唯一鍵或者唯一約束;
需要加快查詢速度的時候,我們就建立相應類型的索引。

關于四者的理解,上未參考到權威的資料,請讀者保持懷疑的態(tài)度接受。

2.數(shù)據庫的建立

在安裝完mysql之后,我們要建立自己的數(shù)據庫。下面將詳細地一步一步演示如何創(chuàng)建上面設計好的數(shù)據庫。
在MySQL模式下,使用status命令可以查看MySQL版本,本人使用的MySQL版本:5.6.30 MySQL Community Server (GPL)。

關于mysql大小寫問題,mysql命令是不區(qū)分大小寫的。數(shù)據表的表名在windows下不分,linux下分。數(shù)據表的字段名在windows和linux下都不分。

(1)登錄mysql DBMS

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

mysql -hlocalhost -uroot -p123456

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

(2)使用show查看當前mysql服務器上存在什么數(shù)據庫

show databases;

這里寫圖片描述

說明:在進入mysql模式下,使用mysql命令時,每條語句要以分號結束。但是use [DatabaseName]卻不用,可能是mysql的一個小bug。類似于quit和exit退出mysql的命令,不需要一個分號。(如果你喜歡,你可以用一個分號終止這樣的語句)。

(3)創(chuàng)建數(shù)據庫

mysql> CREATE DATABASE StudentCourse;

(4)使用use語句訪問數(shù)據庫

mysql>use StudentCourse;

(5)創(chuàng)建數(shù)據表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)來實現(xiàn),這里的1指代的是數(shù)據顯示時最短長度。
實際上tinyint(1)是可以插入-128到127之間的其它數(shù)值。因為mysql數(shù)據庫中以 :數(shù)據類型(m)來定義數(shù)據類型,其中 數(shù)字m在不同的數(shù)據類型中表示含義是不同的。 整型數(shù)系統(tǒng)已經限制了取值范圍,tinyint占一個字節(jié)、int占4個字節(jié)。所以整型數(shù)后面的m不是表示的數(shù)據長度,而是表示數(shù)據在顯示時顯示的最小長度(長度為字符數(shù))。

tinyint(1) 這里的1表示的是最短顯示一個字符。tinyint(2) 這里的2表示的是最短顯示兩個字符,但這里光設置m是沒有意義的,你還需要指定當數(shù)據少于長度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數(shù)據表的編碼方式,不顯示指定編碼方式的話,數(shù)據表的默認編碼方式一般是latin1。也可以通過如下命令查看數(shù)據表的編碼方式:

show create table student;

如果需要轉換數(shù)據表的編碼格式,使用如下命令:

alter table student convert to character set utf8;

如果想查看當前數(shù)據庫的編碼格式:

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

為了驗證所建立的數(shù)據表是否是按照期望的方式創(chuàng)建的,使用如下命令:

#查看表中的列
SHOW COLUMNS FROM student;
#或者直接使用describe
describe student;

這里寫圖片描述

(6)創(chuàng)建數(shù)據表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)創(chuàng)建數(shù)據表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)其它關于數(shù)據庫和數(shù)據表的操作命令

刪除數(shù)據庫:

mysql> DROP DATABASE 庫名;

刪除數(shù)據表:

mysql> DROP TABLE 表名;

將表中記錄清空:

mysql> DELETE FROM 表名;

參考文獻:

[1]http://www.runoob.com/mysql/mysql-data-types.html
[2]Mysql 查看、創(chuàng)建、更改 數(shù)據庫和表
[3]php里tinyint(1)為什么還能插入99這個值?搜索
[4]MySQL引擎
[5]MySQL中的四種Key
[6]SQL的主鍵和外鍵約束
[7]唯一索引和唯一約束有什么區(qū)別

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

相關文章

  • Mysql中Row size too large (> 8126) 錯誤的問題解決

    Mysql中Row size too large (> 8126)&n

    本文主要介紹了Mysql中Row size too large (> 8126) 錯誤的問題解決,原因實插入的行數(shù)據可能太大了,超過了設定的闕值,下面就來看一下如何解決
    2024-07-07
  • mysql給一張表添加外鍵的4種方法

    mysql給一張表添加外鍵的4種方法

    這篇文章主要給大家介紹了關于mysql給一張表添加外鍵的4種方法,MySQL是一種常用的關系型數(shù)據庫管理系統(tǒng),它支持外鍵約束以保證數(shù)據庫的數(shù)據完整性,需要的朋友可以參考下
    2023-08-08
  • MySQL數(shù)據庫誤刪恢復的超詳細教程

    MySQL數(shù)據庫誤刪恢復的超詳細教程

    MySQL誤刪數(shù)據庫,造成了數(shù)據的丟失,這是非常尷尬的,但是有許多方案可以用來嘗試恢復丟失的數(shù)據庫,這篇文章主要給大家介紹了關于MySQL數(shù)據庫誤刪恢復的超詳細教程,需要的朋友可以參考下
    2024-03-03
  • MySQL服務啟動與關閉如何操作圖文詳解

    MySQL服務啟動與關閉如何操作圖文詳解

    這篇文章主要為大家介紹了MySQL服務啟動與關閉如何操作圖文詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2023-10-10
  • Mysql中的find_in_set的使用方法介紹

    Mysql中的find_in_set的使用方法介紹

    Mysql中的find_in_set的使用方法介紹,需要的朋友可以參考一下
    2013-03-03
  • MySQL 8.0.41圖文詳細安裝教程 附安裝包

    MySQL 8.0.41圖文詳細安裝教程 附安裝包

    本文詳細介紹了MySQL 8.0.41的安裝步驟,包括下載安裝包、選擇安裝模式、設置數(shù)據庫密碼、配置系統(tǒng)環(huán)境變量以及驗證安裝結果,適合初學者和企業(yè)級應用,感興趣的朋友一起看看吧
    2025-03-03
  • mysql-8.0.17-winx64 部署方法

    mysql-8.0.17-winx64 部署方法

    這篇文章主要介紹了mysql-8.0.17-winx64 部署方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • mysql 遞歸查找菜單節(jié)點的所有子節(jié)點的方法

    mysql 遞歸查找菜單節(jié)點的所有子節(jié)點的方法

    這篇文章主要介紹了mysql 遞歸查找菜單節(jié)點的所有子節(jié)點,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 深入理解mysql各種鎖

    深入理解mysql各種鎖

    大家好,本篇文章主要講的是深入理解mysql各種鎖,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • linux/mac安裝mysql忘記密碼的解決辦法

    linux/mac安裝mysql忘記密碼的解決辦法

    這篇文章主要給大家介紹了關于linux/mac安裝mysql忘記密碼的解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-10-10

最新評論

江北区| 涿州市| 同江市| 正宁县| 延庆县| 绥中县| 拉孜县| 刚察县| 吴川市| 佛学| 张家川| 公主岭市| 桑植县| 门源| 天门市| 肇源县| 太和县| 仁布县| 三原县| 滨海县| 民丰县| 容城县| 繁峙县| 崇阳县| 枣庄市| 新昌县| 江源县| 株洲县| 威海市| 临高县| 姚安县| 沂源县| 滨海县| 新平| 越西县| 楚雄市| 炉霍县| 五寨县| 秦安县| 体育| 和静县|