1、 MySQL: ● MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB公司開發,目前屬於Oracle公司。 MySQL最流行的關係型資料庫管理系統,在Web應用方面MySQL是最好的RDBMS(Relational Database Management System,關係資料庫管理系 ...
1、 MySQL:
● MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB公司開發,目前屬於Oracle公司。
MySQL最流行的關係型資料庫管理系統,在Web應用方面MySQL是最好的RDBMS(Relational Database Management System,關係資料庫管理系統)應用軟體之一。
MySQL是一種關聯資料庫管理系統,關聯資料庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性。
MySQL所使用的SQL語言是用於訪問資料庫的最常用標準化語言。
MySQL軟體採用了雙授權政策,它分為社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇
MySQL作為網站資料庫。由於其社區版的性能卓越,搭配PHP和Apache可組成良好的開發環境。
2、MySQL的特點:
1)Mysql是開源的,所以你不需要支付額外的費用。 2)Mysql支持大型的資料庫。可以處理擁有上千萬條記錄的大型資料庫。 3)MySQL使用標準的SQL數據語言形式。 4)Mysql可以允許於多個系統上,並且支持多種語言。這些編程語言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。 5)Mysql對PHP有很好的支持,PHP是目前最流行的Web開發語言。 6)MySQL支持大型資料庫,支持5000萬條記錄的數據倉庫,32位系統表文件最大可支持4GB,64位系統支持最大的表文件為8TB。 7)Mysql是可以定製的,採用了GPL協議,你可以修改源碼來開發自己的Mysql系統。 |
MySQL系統特性: 1)使用C和C++編寫,並使用了多種編譯器進行測試,保證了源代碼的可移植性。 2)支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統。 3)為多種編程語言提供了API。這些編程語言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby、.NET和Tcl 等。 4)支持多線程,充分利用 CPU 資源。 5)優化的 SQL查詢演算法,有效地提高查詢速度。 6)既能夠作為一個單獨的應用程式應用在客戶端伺服器網路環境中,也能夠作為一個庫而嵌入到其他的軟體中。 7)提供多語言支持,常見的編碼如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作數據表名和數據列名。 8)提供 TCP/IP、ODBC 和 JDBC等多種資料庫連接途徑。 9)提供用於管理、檢查、優化資料庫操作的管理工具。 10)支持大型的資料庫。可以處理擁有上千萬條記錄的大型資料庫。 11)支持多種存儲引擎。 12)線上 DDL/更改功能,數據架構支持動態應用程式和開發人員靈活性。 13)複製全局事務標識,可支持自我修複式集群。 14)複製無崩潰從機,可提高可用性。 15)複製多線程從機,可提高性能。 |
3、MySQL的優勢:
1、運行速度快,MySQL體積小,命令執行的速度快;
2、使用成本低:MySQL是開源的,且提供免費版本,對大多數用戶來說,大大降低了使用成本;
3、容易使用:與其他大型資料庫的設置和關聯相比,其複雜程度較低,易於使用;
4、可移植性強:MySQL能夠運行於多種系統平臺上;
5、 適用用戶廣:MySQL支持最常用的數據管理功能,適用於中小型企業甚至大型網站應用;
4、Mysql:
MySQL版本:
|
MySQL運行機制:
|
|
MySQL的配置: 1、埠號:3306 2、預設字元集:utf8 3、utf8:一種Unicode編碼,解決國際上字元不統一的多位元組編碼,通用性強 4、將bin目錄寫入環境變數 5、root密碼設置 |
||
MySQL安裝目錄: 主要文件夾 bin include lib share |
my.ini:記錄MySQL配置信息,可修改配置內容,如埠號,字元等
|
命令行連接MySQL: 檢查是否啟動服務 啟動方式:屬性視窗 DOS命令:net start mysql57 停止:net stop mysql57 註意:如果修改了配置文件,必須重啟MySQL服務才能生效; |
命令行連接MySQL:
Eg: mysql –u root –proot mysql –u root – p 連接的兩種方式: DOS下運行 MySQL Command Line Client 預設root登錄,僅輸入密碼 |
系統資料庫: Information_schema:主要存儲系統中的一些資料庫對象信息; Performance_schema:主要存儲資料庫伺服器性能參數; mysql:主要存儲系統的用戶許可權信息; test:MySQL資料庫管理系統自動創建的測試資料庫,任何用戶可放心使用; |
|
用戶資料庫:用戶根據實際需求創建的資料庫;
|
5、操作Mysql:
創建資料庫: CREATE DATABASE 資料庫名; Eg:CREATE DATABASE myschool;//分號為結束符,不可缺
|
查看資料庫列表: SHOW databases;
|
選擇資料庫: USE 資料庫名; Eg: USE mybase; USE myschool;
|
刪除資料庫: DROP DATABASE 資料庫名; Eg: DROP DATABASE myschool;
|
6、SQLyog:
SQLyog——圖形化的MySQL管理工具 免費 簡潔高效 功能強大 |
SQLyog管理工具:工具操作方便,但熟練編寫SQL語句仍是程式員的必備技能;
|
||||||||||||||||||
結構化查詢語言:
|
7、Mysql數值類型:
●UNSIGNED屬性:標識為無符號數 •ZEROFILL屬性:寬度(位數)不足以0填充 |
Eg: CREATE TABLE `tb_type` ( `sid` INT(4) ZEROFILL); INSERT INTO ` tb_type1 ` VALUE(12) ,(1234),(123456); 註意:若某數值欄位指定了ZEROFILL屬性,將自動添加UNSIGNED屬性
|
TINYINT |
非常小的數據 |
有符值:-27 ~ 27-1 無符號值:0 ~ 28-1 |
1位元組 |
SMALLINT |
較小的數據 |
有符值: -215 ~ 215-1 無符號值: 0 ~ 216-1 |
2位元組 |
MEDIUMINT |
中等大小的數據 |
有符值: -223 ~ 223-1 無符號值: 0 ~ 224-1 |
3位元組 |
INT |
標準整數 |
有符值:-231 ~ 231-1 無符號值:0 ~ 232-1 |
4位元組 |
BIGINT |
較大的整數 |
有符值:-263 ~263-1 無符號值:0 ~264-1 |
8位元組 |
FLOAT |
單精度浮點數 |
±1.1754351e -38 |
4位元組 |
DOUBLE |
雙精度浮點數 |
±2.2250738585072014e -308 |
8位元組 |
DECIMAL |
字元串形式的浮點數 |
Decimal(M,D) |
M+2個位元組 |
8、MySQL字元串類型:
字元串類型 |
說明 |
長度 |
CHAR[(M)] |
定長字元串 |
M位元組 |
VARCHAR[(M)] |
可變字元串 |
可變長度 |
TINYTEXT |
微型文本串 |
0~28–1位元組 |
TEXT |
文本串 |
0~216–1位元組 |
9、MySQL日期類型:
日期類型 |
格式 |
取值類型 |
DATE |
YYYY-MM-DD,日期格式 |
1000-01-01~ 9999-12-31 |
DATETIME |
YY-MM-DD hh:mm:ss: |
1000-01-01 00:00:00 ~9999-12-31 23:59:59 |
TIME |
hh:mm:ss: |
-835:59:59 ~ 838:59:59 |
TIMESTAMP |
YYYYMMDDHHMMSS |
1970年某時刻~2038年某時刻,精度為1秒 |
YEAR |
YYYY格式的年份 |
1901~2155 |
10、SQLyog創建表:
CREATE TABLE [IF NOT EXISTS] 表名( 欄位1 數據類型[欄位屬性|約束][索引][註釋], …… 欄位n 數據類型[欄位屬性|約束][索引][註釋] )[表類型][表字元集][註釋]; 查看表:SHOW TABLES; |
Eg: #創建學生表 CREATE TABLE `student`( `studentNo` INT(4) PRIMARY KEY, ` name` CHAR(10), ……); |
註意: 在MySQL中,如果使用的資料庫名、表名、或欄位名等與保留字衝突時,需要使用撇號(`)括起來; 在MySQL生成的代碼中,表名,欄位名等全部使用撇號(`)括起來;eg:上面; 多欄位使用逗號分隔 單行註釋:#...... 多行註釋:/*……*/ 表的欄位也可成為列; |
●欄位的約束及屬性:
非空約束 |
NOT NULL |
欄位不允許為空 |
預設約束 |
DEFAULT |
賦予某欄位預設值 |
唯一約束 |
UNIQUE KEY(UK) |
設置欄位的值是唯一的,但允許為空,但只能有一個空值 |
主鍵約束 |
PRIMARY KEY(PK) |
設置該欄位為表的主鍵,唯一標識該表記錄 |
外鍵約束 |
FOREIGN KEY(FK) |
用於在兩表之間建立關係,需要指定引用主表的哪一欄位 |
自動增長 |
AUTO_INCREMENT |
設置該列為自增欄位,預設每條自增1,通常用於設置主鍵 |
●單欄位主鍵:
在定義欄位的同時指定主鍵: 語法: CREATE TABLE[IF NOT EXISTS] 表明{ 欄位1 數據類型PRIMARY KEY, ……. }; |
在定義完所有欄位之後指定主鍵: 語法: CREATE TABLE[IF NOT EXISTS] 表明{ 欄位1 數據類型, ……. [CONSTRAINT<約束名>]PRIMARY KEY[列名] }; |
Eg: CREATE TABLE student( `studentNo` INT(4) PRIMARY KEY, ……); |
Eg: CREATE TABLE student( `studentNo` INT(4) , …… PRIMARY KEY(`id`) ); |
●多欄位聯合主鍵:
語法: CREATE TABLE[IF NOT EXISTS] 表明{ PRIMARY KEY[欄位1,欄位2……] ……. }; |
Eg: CREATE TABLE student( `id` INT(4), `name` VARCHAR(11). …… PRIMARY KEY(`id`,`NAME`) ); |
●註釋:在創建表的同時可以為表或欄位添加說明性文字,即註釋。註釋是使用COMMENT關鍵字來添加的;
Eg: CREATE TABLE test ( `id` int(11) UNSIGNED COMMENT ‘編號’ )COMMENT='測試表’ ; |
●編碼格式:預設情況下,MySQL所有資料庫、表、欄位等使用MySQL預設字元集;也可以通過my.ini文件中的default-character-set參數來修改預設值;
語法: CREATE TABLE [IF NOT EXISTS] 表名( #省略代碼 )CHARSET = 字元集名; |
Eg:在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) DEFAULT '男' NOT NULL 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) UNIQUE KEY COMMENT '身份證號' ) COMMENT='學生表'; |
11、查看表:
查看表是否存在 USE 資料庫名;
|
看表定義: DESCRIBE 表名; 或 DESC 表名; Eg: USE myschool; DESCRIBE `student`;
|
避免DOS視窗亂碼,可執行SET NAMES gbk; 此代碼等同於: SET charct_set_client=gbk; SET charct_set_result=gbk; SET charct_set_connection=gbk; |
12、刪除表:在刪除表之前,先使用IF EXISTS語句驗證表是否存在
DROP TABLE [IF EXISTS] 表名; Eg: USE myschool; DROP TABLE IF EXISTS `student`; |
13、MySQL的存儲引擎:
存儲引擎的類型 MyISAM、InnoDB 、Memory、CSV等9種 可以使用SHOW ENGINES語句查看系統所支持的引擎類型; |
MyISAM與InnoDB類型主要區別
適用場合
|
14、MySQL的存儲引擎:
查看當前預設存儲引擎 SHOW VARIABLES LIKE ‘%storage_engine%’;
|
修改存儲引擎 修改my.ini配置文件
|
|
設置表的存儲引擎: CREATE TABLE 表名( #省略代碼 )ENGINE=存儲引擎; Eg: CREATE TABLE `myisam` ( id INT(4) )ENGINE=MyISAM; |
數據表的存儲位置: MyISAM類型表文件 *.frm:表結構定義文件 *.MYD:數據文件 *.MYI:索引文件 |
|
InnoDB類型表文件 *.frm:表結構定義文件 ibdata1文件 |
||
存儲位置 因操作系統而異,可查my.ini datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/" innodb_data_home_dir="D:/MySQL Datafiles/" |
15、MySQL系統幫助:
HELP 查詢內容; Eg: HELP contents;
|
HELP Data Types;
HELP INT;
|
17、附加1:
什麼是資料庫? 資料庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫, 每個資料庫都有一個或多個不同的API用於創建,訪問,管理,搜索和複製所保存的數據。 我們也可以將數據存儲在文件中,但是在文件中讀寫數據速度相對較慢。所以,現在我們使用關係型資料庫管理系統(RDBMS)來存儲和管理的大數據量。 所謂的關係型資料庫,是建立在關係模型基礎上的資料庫,藉助於集合代數等數學概念和方法來處理資料庫中的數據。 RDBMS即關係資料庫管理系統(Relational Database Management System)的特點: 1)數據以表格的形式出現 2)每行為各種記錄名稱 3)每列為記錄名稱所對應的數據域 4)許多的行和列組成一張表單 5)若幹的表單組成database |
關係型資料庫(RDBMS)術語: 針對關係型資料庫作如下解釋: 1)關係型資料庫可以簡單的理解為二維資料庫,表格式類似於excel表格,我們平時我接觸的數據據,一般都是關係型資料庫。 2)關係型資料庫不是唯一的高級資料庫模型,也不是最優的一種,但是,關係型資料庫是現今使用最廣泛、最易於理解和使用的資料庫模型。 3)在我們開始學習MySQL資料庫前,讓我們先瞭解下RDBMS的一些術語: 1資料庫: 資料庫是一些關聯表的集合。 2數據表: 表是數據的矩陣。在一個資料庫中的表看起來像一個簡單的電子錶格。 3關係:可以理解成一張二維表,每個關係都有一個關係名,即表名。 4關係模式:對關係的描述,在資料庫中通常稱之為表結構。 5元組:可以理解成二維表中的一行,在資料庫中常被稱作記錄。一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。 6屬性:可以理解成二維表中的一列,在資料庫中常被成為欄位。一列(數據元素) 包含了相同的數據, 例如郵政編碼的數據。 7域:屬性的取值範圍,也是資料庫中某一列的取值限制。 8關鍵字:一組可以唯一標識元組的屬性。資料庫中常稱為主鍵有一個或多個列組成。 9冗餘:存儲兩倍數據,冗餘可以使系統速度更快。 10主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢數據。 11外鍵:外鍵用於關聯兩個表。 12複合鍵:複合鍵(組合鍵)將多個列作為一個索引鍵,一般用於複合索引。 13索引:使用索引可快速訪問資料庫表中的特定信息。索引是對資料庫表中一列或多列的值進行排序的一種結構。類似於書籍的目錄。 14參照完整性: 參照的完整性要求關係中不允許引用不存在的實體。與實體完整性是關係模型必須滿足的完整性約束條件,目的是保證數據的一致性。 4)關係型資料庫特點: 1容易理解:二維表結構是非常貼近邏輯世界的一個概念,相對與網狀、層次以及其它模型更容易理解。 2使用方便:通過SQL語言程式員和數據管理員可以很方便的在邏輯層面操作資料庫而不必理解其底層實現。 3易於維護:豐富的完整性(實體完整性、參照完整性、用戶自定義完整性)降低數據冗餘和數據不一致的概率。 5)關係操作: 1數據查詢:選擇、投影、連接、並、交、差、除 2數據操作:增加、刪除、修改、查詢 6)SQL(Structured Query Language):結構化查詢語言,一種特殊目的的編程語言,資料庫查詢和程式設計語言,用於存儲數據以及查詢、更新和管理關係型資料庫。 |
SQL查詢語言組成部分: 1DDL(Data Definition Languages)語句:數據定義語句,用於定義不同的數據段、資料庫、表、列、索引等資料庫的對象定義。常用關鍵字主要包括create、drop、alter等。 2DML(Data Manipulation Language)語句:數據操縱語句,用於添加、刪除、更新和查詢資料庫記錄,並檢查數據完整性。常用關鍵字包括insert、delete、update和select等。 3DCL(Data Control Language)語句:數據控制語句,用於控制不同數據段直接的許可和訪問級別的語句,用於定義資料庫、表、欄位、用戶的訪問許可權和安全級別。常用關鍵字有grant、revoke等。 |
18、附加2:
default-character-set 客戶端預設字元集; character-set-sever 伺服器端預設字元集; MySQL的預設埠號是3306; |
delete是刪除表中的數據,而drop是撤銷表; |
MySQL刪除表;刪除表:Drop table if exists ‘student’或drop table ‘student’; |
Mysql中的約束類型有:主鍵(primary key)、預設值(default)、唯一(unique)、外鍵(foreign key)和非空(not null), |
DELETE * from Student 只是刪除學生表裡面的所有數據,所以Student這張表還存在的,只是裡面沒有數據了。 DROP table`student`則會刪除整張表 |
對錶及以上級別的刪除操作都是drop,數據級別的操作都是delete; |
在MYSQL中實現模糊查詢的關鍵字是LIKE。 |
grant on …to 用來允許用戶獲得許可權 |
DDL :資料庫定義語言(Data Definition Language),用來創建資料庫中的各種對象-----表、視圖、索引、同義詞、聚簇等 如:CREATE TABLE/VIEW/INDEX/SYN/CLUSTERDQL : 數據查詢語言(Data Query Language),數據查詢語言DQL基本結構是由SELECT子 句,FROM子句,WHEREDML : 數據操縱語言(Data Manipulation Language),INSERT UPDATE DELETE DCL :數據控制語言(Data Control Language),GRANT ROLLBACK COMMIT |
在使用modify對列進行更改時,需要同時設定其當前列的全部屬性(至少包括數據類型),否則該列數據只有最新設置的屬性。 |
查看所有數據表的語法是:show tables; 查詢所有的資料庫名稱的語法是:show databases; |
查看表中的列時,使用show columns from 表名 查看所有表 show tables 查看資料庫 show databases |
WHERE是條件判斷 ORDER BY是排序、 LIKE模糊查詢 |
字元集設置可以分別對資料庫、表、欄位層面進行設置,所以,如果設置的值不同,字元集可以不相同的。 |
character_set_server:預設的內部操作字元集 character_set_client:客戶端來源數據使用的字元集 character_set_connection:連接層字元集 character_set_results:查詢結果字元集 character_set_database:當前選中資料庫的預設字元集 character_set_system:系統元數據(欄位名等)字元集 |
編譯MySQL 時,指定的預設的字元集是latin1。 執行命令SET character_set_client = utf8 。 安裝MySQL可以在配置文件(my.ini)中指定預設字元集。 安裝MySQL選擇多語言支持,安裝程式會自動在配置文件中把字元集設置utf8; |
通過命令: –mysql>show character set; 查看Mysql支持的字元集 – mysql> show collation; 查看Mysql排序方式 |
While迴圈語句可以根據某些條件重覆執行一條SQL語句或一個語句塊 |
可以在建庫、建表、建列時設置字元集,但不能在添加數據類型時候設置字元集; |
修改表字元集ALTER TABLE TABLENAME CHARACTER SET XXX;這個語句只修改表的字元集,影響後續該表新增列的預設定義,已有列的字元集不受影響。 ALTER TABLE TABLENAME CONVERT TO CHARACTER SET XXX;這個語句同時修改表字元集和已有列字元集,並將已有數據進行字元集編碼轉換 |
MySQL 使用 AUTO_INCREMENT 關鍵字來執行 auto-increment 任務。預設地,AUTO_INCREMENT 的開始值是 1,每條新記錄遞增 1。 要讓 AUTO_INCREMENT 序列以其他的值起始。設置了PRIMARY KEY後,預設的屬性為:not null 、 unique |
為了使索引鍵的值在基本表中唯一,在建立索引的語句中應使用保留字unique |
對於mysqldump命令導出的SQL備份腳本,可通過mysql命令導入以恢複數據,命令格式為:mysql -u 用戶名 -p [庫名] </備份路徑/備份文件名 |
對於字元集, mysql支持細分為4個層次。【伺服器,資料庫等等】在編譯和安裝mysql時,如果沒有顯示指明,預設就是latin1;啟動時此文件繼承源自配置文件。 |