《Mysql必讀MySQL 設計和命令行模式下建立詳解》要點:
本文介紹了Mysql必讀MySQL 設計和命令行模式下建立詳解,希望對您有用。如果有疑問,可以聯系我們。
MYSQL實例MySQL 設計和命令行模式下建立詳解
MYSQL實例系列文章:
MYSQL實例MySQL 設計和命令行模式下建立詳解
MYSQL實例C++利用MySQL API連接和操作數據庫實例詳解
MYSQL實例1.數據表的設計
MYSQL實例MySQL數據庫管理系統(DBMS)中,包含的MySQL中定義數據字段的類型對你數據庫的優化是非常重要的.MySQL支持多種類型,大致可以分為三類:數值、日期/時間和字符串(字符)類型.
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 |
MYSQL實例課程表設計:
字段(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 |
MYSQL實例選課表設計:
字段(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 |
MYSQL實例對于上面三張數據表的設計,你會發現:
MYSQL實例(1)MySQL在為數據定義字符串(字符)類型時,需要在類型名稱的后面的小括號內指明最長字符數,即TypeName(M),這里的M指的是字符數,而不是數據占用的字節數.例如varchar(12),則表述存儲的字符數不能超過12 ,超過12則截斷,小于12個字符則以實際占用的存儲空間來存儲,這樣就節省了存儲空間.
MYSQL實例(2)在對選課表的設計時,我們添加外鍵約束,可以使得兩張表關聯,保證數據的一致性和實現一些級聯操作.
MYSQL實例(3)MySQL中有三種Key和一個Index: Primary Key(主鍵), Unique Key(唯一鍵),Foreign Key(外鍵)和 Index(索引).
MYSQL實例四者的區別如下:
MYSQL實例定義:
MYSQL實例主鍵(Primary Key):唯一標識一條記錄,不能有重復,不允許為空.
外鍵(Foreign Key):表的外鍵是另一表的主鍵, 外鍵可以有重復, 可以是空值.
唯一鍵( Unique Key):唯一標識一條記錄,不能有重復,可以為空.
索引(Index):該字段可以有重復值記錄,可以有空值,如果是唯一索引,那么就不可以有重復的記錄,可以有空值.
MYSQL實例作用:
MYSQL實例主鍵:用來保證數據完整性.
外鍵:用來和其他表建立聯系,以保證數據的一致性和級聯操作.
唯一鍵:用來用防止數據插入的時候重復.
索引:是提高查詢排序的速度.
MYSQL實例個數:
MYSQL實例主鍵:一個表只能有一個列是主鍵.
外鍵:一個表可以有多個列是外鍵.
唯一鍵:一個表可以有多個列是唯一鍵.
索引:一個表可以有多個列是索引.
MYSQL實例從中可以看出,索引和唯一鍵很相似,二者的區別在于作用不同,索引用于提高查詢速度,唯一鍵用于唯一約束.當然如果建立的索引是唯一索引的話,也可以起到唯一約束的作用.在MySQL具體實現上,索引需要建立數據結構,需要額外的磁盤空間來存儲索引,而鍵(主鍵,外鍵和唯一鍵)都是邏輯層面的實現和約束,二者還是有著本質的區別.
MYSQL實例還有就是MySQL的索引包括:普通索引(Index)、唯一索引(UNIQUE INDEX)、全文索引(FULLTEXT INDEX)、組合索引.這里就不要把唯一鍵和唯一索引弄混淆了!也不要把索引和其它的三種鍵弄混淆了.
MYSQL實例還有一點需要注意的是,雖然鍵(key)和索引(index)有著本質的區別,但是當我們在建立主鍵或者唯一鍵的時候,也就建立了索引,MySQL和Oracle都是這么做的,要是不明白這一點,很容易把索引和主鍵和唯一鍵弄混淆.
MYSQL實例唯一鍵可以起到唯一約束的作用,當然主鍵也可以起到唯一約束的作用.當然我們可以不建立唯一鍵和主鍵,直接為指定的數據表的列添加唯一約束.唯一約束保證指定列的值不能重復.
MYSQL實例所以,關于上面的概念,大家不要咬文嚼字,而是根據功能去理解每一種KEY的作用,在什么場合需要去使用它.
MYSQL實例比如需要主鍵約束的時候,我們就可以對某一列建立主鍵;
MYSQL實例需要對某一列或者多個列進行唯一約束的時候,我們就建立唯一鍵或者唯一約束;
需要加快查詢速度的時候,我們就建立相應類型的索引.
MYSQL實例關于四者的理解,上未參考到權威的資料,請讀者保持懷疑的態度接受.
MYSQL實例2.數據庫的建立
MYSQL實例在安裝完mysql之后,我們要建立自己的數據庫.下面將詳細地一步一步演示如何創建上面設計好的數據庫.
在MySQL模式下,使用status命令可以查看MySQL版本,本人使用的MySQL版本:5.6.30 MySQL Community Server (GPL).
MYSQL實例關于mysql大小寫問題,mysql命令是不區分大小寫的.數據表的表名在windows下不分,linux下分.數據表的字段名在windows和linux下都不分.
MYSQL實例(1)登錄mysql DBMS
MYSQL實例Linux命令行中輸入如下命令:
MYSQL實例
mysql -hlocalhost -uroot -p123456
MYSQL實例說明:依次指明登錄mysql的主機地址,用戶和用戶密碼.
MYSQL實例(2)使用show查看當前mysql服務器上存在什么數據庫
MYSQL實例
show databases;
MYSQL實例
MYSQL實例說明:在進入mysql模式下,使用mysql命令時,每條語句要以分號結束.但是use [DatabaseName]卻不用,可能是mysql的一個小bug.類似于quit和exit退出mysql的命令,不需要一個分號.(如果你喜歡,你可以用一個分號終止這樣的語句).
MYSQL實例(3)創建數據庫
MYSQL實例
mysql> CREATE DATABASE StudentCourse;
MYSQL實例(4)使用use語句訪問數據庫
MYSQL實例
mysql>use StudentCourse;
MYSQL實例(5)創建數據表student
MYSQL實例
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;
MYSQL實例觀察上面的建表語句,需注意以下幾點:
MYSQL實例(a)其中,布爾類型boolean在MySQL是以類型tinyint(1)來實現,這里的1指代的是數據顯示時最短長度.
實際上tinyint(1)是可以插入-128到127之間的其它數值.因為mysql數據庫中以 :數據類型(m)來定義數據類型,其中 數字m在不同的數據類型中表示含義是不同的. 整型數系統已經限制了取值范圍,tinyint占一個字節、int占4個字節.所以整型數后面的m不是表示的數據長度,而是表示數據在顯示時顯示的最小長度(長度為字符數).
MYSQL實例tinyint(1) 這里的1表示的是最短顯示一個字符.tinyint(2) 這里的2表示的是最短顯示兩個字符,但這里光設置m是沒有意義的,你還需要指定當數據少于長度m時用什么來填充,比如zerofill(表示有0填充).設置tinyint(2) zerofill你插入1時他會顯示01.設置tinyint(4) zerofill你插1時他會顯示0001.
MYSQL實例(b)還要注意一點是,使用engine可指明引擎,如果省略了engine語句,則使用默認的引擎(MYISAM).MYSQL支持三個引擎:ISAM、MYISAM和HEAP.另外兩種類型INNODB和BERKLEY(BDB),也常常可以使用.
MYSQL實例(c)設置default charset指明mysql數據表的編碼方式,不顯示指定編碼方式的話,數據表的默認編碼方式一般是latin1.也可以通過如下命令查看數據表的編碼方式:
MYSQL實例
show create table student;
MYSQL實例如果需要轉換數據表的編碼格式,使用如下命令:
MYSQL實例
alter table student convert to character set utf8;
MYSQL實例如果想查看當前數據庫的編碼格式:
MYSQL實例
mysql>status;
#或者
show variables like 'character%' ;
MYSQL實例為了驗證所建立的數據表是否是按照期望的方式創建的,使用如下命令:
MYSQL實例
#查看表中的列
SHOW COLUMNS FROM student;
#或者直接使用describe
describe student;
MYSQL實例
MYSQL實例(6)創建數據表course
MYSQL實例
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;
MYSQL實例同樣可以使用describe查看表信息:
MYSQL實例(7)創建數據表courseSelection
MYSQL實例
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;
MYSQL實例查看表信息:
MYSQL實例(8)其它關于數據庫和數據表的操作命令
MYSQL實例刪除數據庫:
MYSQL實例
mysql> DROP DATABASE 庫名;
MYSQL實例刪除數據表:
MYSQL實例
mysql> DROP TABLE 表名;
MYSQL實例將表中記錄清空:
MYSQL實例
mysql> DELETE FROM 表名;
MYSQL實例參考文獻:
MYSQL實例[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]唯一索引和唯一約束有什么區別
MYSQL實例感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/1748.html