您好,登錄后才能下訂單哦!
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬于 Oracle 旗下產品。MySQL 最流行的關系型數據庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關系數據庫管理系統) 應用軟件之一。
MySQL是一種關聯數據庫管理系統,關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。
MySQL所使用的 SQL 語言是用于訪問數據庫的最常用標準化語言。MySQL 軟件采用了雙授權政策,它分為社區版和商業版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站數據庫。
由于其社區版的性能卓越,搭配 PHP 和 Apache 可組成良好的開發環境。
數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,
每個數據庫都有一個或多個不同的API用于創建,訪問,管理,搜索和復制所保存的數據。
我們也可以將數據存儲在文件中,但是在文件中讀寫數據速度相對較慢。
所以,現在我們使用關系型數據庫管理系統(RDBMS)來存儲和管理的大數據量。所謂的關系型數據庫,是建立在關系模型基礎上的數據庫,借助于集合代數等數學概念和方法來處理數據庫中的數據。
RDBMS即關系數據庫管理系統(Relational Database Management System)的特點:
1.數據以表格的形式出現
2.每行為各種記錄名稱
3.每列為記錄名稱所對應的數據域
4.許多的行和列組成一張表單
5.若干的表單組成database
在我們開始學習MySQL 數據庫前,讓我們先了解下RDBMS的一些術語:
數據庫: 數據庫是一些關聯表的集合。.
數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。
列: 一列(數據元素) 包含了相同的數據, 例如郵政編碼的數據。
行:一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。
冗余:存儲兩倍數據,冗余可以使系統速度更快。
主鍵:主鍵是唯一的。一個數據表中只能包含一個主鍵。你可以使用主鍵來查詢數據。
外鍵:外鍵用于關聯兩個表。
復合鍵:復合鍵(組合鍵)將多個列作為一個索引鍵,一般用于復合索引。
索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。類似于書籍的目錄。
參照完整性: 參照的完整性要求關系中不允許引用不存在的實體。與實體完整性是關系模型必須滿足的完整性約束條件,目的是保證數據的一致性。
MySQL是一個關系型數據庫管理系統,由瑞典MySQL AB公司開發,目前屬于Oracle公司。MySQL是一種關聯數據庫管理系統,關聯數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。
Mysql是開源的,所以你不需要支付額外的費用。
Mysql支持大型的數據庫。可以處理擁有上千萬條記錄的大型數據庫。
MySQL使用標準的SQL數據語言形式。
Mysql可以允許于多個系統上,并且支持多種語言。這些編程語言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
Mysql對PHP有很好的支持,PHP是目前最流行的Web開發語言。
MySQL支持大型數據庫,支持5000萬條記錄的數據倉庫,32位系統表文件最大可支持4GB,64位系統支持最大的表文件為8TB。
Mysql是可以定制的,采用了GPL協議,你可以修改源碼來開發自己的Mysql系統。
MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,采用GPL授權許可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品。在存儲引擎方面,使用XtraDB(英語:XtraDB)來代替MySQL的InnoDB。 MariaDB由MySQL的創始人Michael Widenius(英語:Michael Widenius)主導開發,他早前曾以10億美元的價格,將自己創建的公司MySQL AB賣給了SUN,此后,隨著SUN被甲骨文收購,MySQL的所有權也落入Oracle的手中。MariaDB名稱來自Michael Widenius的女兒Maria的名字。
MariaDB基于事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎,它使用了Percona的 XtraDB,InnoDB的變體,分支的開發者希望提供訪問即將到來的MySQL 5.4 InnoDB性能。這個版本還包括了 PrimeBase XT (PBXT) 和 FederatedX存儲引擎。
成立于2009年,MySQL之父Michael “Monty” Widenius用他的新項目MariaDB完成了對MySQL的“反戈一擊”。開發這個分支的原因之一是:甲骨文公司收購了MySQL后,有將MySQL閉源的潛在風險,因此社區采用分支的方式來避開這個風險。 過去一年中,大型互聯網用戶以及Linux發行商紛紛拋棄MySQL,轉投MariaDB陣營。MariaDB是目前最受關注的MySQL數據庫衍生版,也被視為開源數據庫MySQL的替代品。
MariaDB雖然被視為MySQL數據庫的替代品,但它在擴展功能、存儲引擎以及一些新的功能改進方面都強過MySQL。而且從MySQL遷移到MariaDB也是非常簡單的:
1、數據和表定義文件(.frm)是二進制兼容的
2、所有客戶端API、協議和結構都是完全一致的
3、所有文件名、二進制、路徑、端口等都是一致的
4、所有的MySQL連接器,比如PHP、Perl、Python、Java、.NET、MyODBC、Ruby以及MySQL C connector等在MariaDB中都保持不變
5、mysql-client包在MariaDB服務器中也能夠正常運行
6、共享的客戶端庫與MySQL也是二進制兼容的
也就是說,在大多數情況下,你完全可以卸載MySQL然后安裝MariaDB,然后就可以像之前一樣正常的運行。
為何改了個名字呢,這其中是有些典故的。
MySQL之父Widenius先生離開了Sun之后,覺得依靠Sun/Oracle來發展MySQL,實在很不靠譜,于是決定另開分支,這個分支的名字叫做MariaDB。
MariaDB跟MySQL在絕大多數方面是兼容的,對于開發者來說,幾乎感覺不到任何不同。目前MariaDB是發展最快的MySQL分支版本,新版本發布速度已經超過了Oracle官方的MySQL版本。
在Oracle控制下的MySQL開發,有兩個主要問題:1. MySQL核心開發團隊是封閉的,完全沒有Oracle之外的成員參加。很多高手即使有心做貢獻,也沒辦法做到。2. MySQL新版本的發布速度,在Oracle收購Sun之后大為減緩。Widenius有一個ppt,用數據比較了收購之前和之后新版本的發布速度。有很多bugfix和新的feature,都沒有及時加入到發布版本之中。
以上這兩個問題,導致了各個大公司,都開發了自己定制的MySQL版本,包括Yahoo!/Facebook/Google/阿里巴巴+淘寶網等等。
MySQL是開源社區的資產,任何個人/組織都無權據為己有。為了依靠廣大MySQL社區的力量來更快速的發展MySQL,另外開分支是必須的。
MariaDB默認的存儲引擎是Maria,不是MyISAM。Maria可以支持事務,但是默認情況下沒有打開事務支持,因為事務支持對性能會有影響。可以通過以下語句,轉換為支持事務的Maria引擎。ALTER TABLE `tablename` ENGINE=MARIA TRANSACTIONAL=1;
這兩個數據庫究竟有什么本質的區別,我看mariadb文件夾BIN中還是mysql*.exe,除了MySQL會被ORACLE閉源外,而mariadb則開源,他倆之間到底還有什么本質區別沒有?
區別一:
MariaDB不僅僅是Mysql的一個替代品,它的主要目的是創新和提高Mysql的技術。
區別二:
MySQL之父Widenius先生離開了Sun之后,覺得依靠Sun/Oracle來發展MySQL,實在很不靠譜,于是決定另開分支,這個分支的名字叫做MariaDB。
MariaDB跟MySQL在絕大多數方面是兼容的,對于開發者來說,幾乎感覺不到任何不同。目前MariaDB是發展最快的MySQL分支版本,新版本發布速度已經超過了Oracle官方的MySQL版本。
MariaDB 是一個采用Aria存儲引擎的MySQL分支版本,是由原來 MySQL 的作者Michael Widenius創辦的公司所開發的免費開源的數據庫服務器。
這個項目的更多的代碼都改編于 MySQL 6.0,例如 “pool of threads”功能提供解決多數據連接問題。MariaDB 5.1.41 RC可以到這里下載,32位和64位已編譯Linux版本,還包括源代碼包。MariaDB基于GPL 2.0發布。
所以對于大部分的MySQL用戶來說,從現在主流的MySQL轉到MariaDB應該是沒有什么難度的
區別三:
LAMP架構盛極一時,這離不開MySQL的免費與易用,但是在Oracle收購了Sun之后,很多公司開始擔憂MySQL的開源前景,而最近Oracle進一步閉源的舉措更是讓人難以安心,眾多互聯網公司紛紛開始尋求MySQL的替代方案。
不得不提的是Apple的遠見,在Oracle收購Sun之初就宣布遷移到PostgreSQL。但PostgreSQL的設計初衷就不同于MySQL,并不是使用MySQL的大部分互聯網公司合適的解決方案。除了Apple,Google、Facebook、Twitter也大量使用了MySQL,紛紛發布了自己的MySQL分支/補丁集,并為不少公司所采用。同時,MariaDB、Percona等MySQL分支也漸漸步入大眾的視野。
根據Wikipedia介紹,MariaDB是一個社區驅動的、采用XtraDb存儲引擎的MySQL分支版本,由MySQL創始人Michael Widenius帶領開發,遵循GPL v2.0協議開源。因為MySQL創始人的介入,MariaDB備受關注,Drupal、MediaWiki、phpMyAdmin、WordPress等眾多應用都宣布支持MariaDB。
從MySQL遷移到MariaDB Wikipedia力求開放
LAMP架構盛極一時,這離不開MySQL的免費與易用,但是在Oracle收購了Sun之后,很多公司開始擔憂MySQL的開源前景,而最近Oracle進一步閉源的舉措更是讓人難以安心,眾多互聯網公司紛紛開始尋求MySQL的替代方案。
mysql和mariaDB開發團隊一致,區別在于mysql已經被oracle閉源了而mariaDB是開源的 但是當然不排除若干年后oracle再花幾十億美金收買mysql之父。
下載MySql
官網:http://dev.mysql.com/downloads/
關閉防火墻
實例:
一、概念: 數據: data 數據庫: DB 數據庫管理系統:DBMS 數據庫系統:DBS MySQL:數據庫 mysql:客戶端命令(用來連接服務或發送sql指令) SQL:結構化查詢語言 ,其中MySQL支持這個。 SQL語言分為4個部分:DDL、DML、DQL、DCL 二、連接數據庫: mysql -h 主機名 -u 用戶名 -p密碼 庫名 C:\>mysql --采用匿名賬號和密碼登陸本機服務 C:\>mysql -h localhost -u root -proot --采用root賬號和root密碼登陸本機服務 C:\>mysql -u root -p --推薦方式默認登陸本機 Enter password: **** C:\>mysql -u root -p lnmp61 --直接進入lnmp61數據庫的方式登陸 三、授權: 格式:grant 允許操作 on 庫名.表名 to 賬號@來源 identified by '密碼'; --實例:創建zhangsan賬號,密碼123,授權lnmp庫下所有表的增/刪/改/查數據,來源地不限 mysql> grant select,insert,update,delete on lnmp61.* to zhangsan@'%' identified by '123'; Query OK, 0 rows affected (0.00 sec) 四、SQL的基本操作 mysql>show databases; --查看當前用戶下的所有數據庫 mysql>create database 數據庫名; --創建數據庫 mysql> use test; --選擇進入test數據庫 mysql> drop database 數據庫名; --刪除一個數據庫 mysql> show tables; --查看當前庫下的所有表格 mysql> select database(); --查看當前所在的數據庫 mysql> desc tb1; --查看tb1的表結構。 mysql> create table demo( --創建demo表格 -> name varchar(16) not null, -> age int, -> sex enum('w','m') not null default 'm'); Query OK, 0 rows affected (0.05 sec) mysql> desc demo; --查看表結構 +-------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------------+------+-----+---------+-------+ | name | varchar(16) | NO | | NULL | | | age | int(11) | YES | | NULL | | | sex | enum('w','m') | NO | | m | | +-------+---------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) mysql>drop table if exists mytab; -- 嘗試刪除mytab表格 --添加一條數據 mysql> insert into demo(name,age,sex) values('zhangsan',20,'w'); Query OK, 1 row affected (0.00 sec) mysql> insert into demo values('lisi',22,'m'); --不指定字段名來添加數據 Query OK, 1 row affected (0.00 sec) mysql> insert into demo(name,age) values('wangwu',23); --指定部分字段名來添加數據 Query OK, 1 row affected (0.00 sec) --批量添加數據 mysql> insert into demo(name,age,sex) values('aaa',21,'w'),("bbb",22,'m'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from demo; --查詢數據 mysql> update demo set age=24 where name='aaa'; --修改 Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> delete from demo where name='bbb'; --刪除 Query OK, 1 row affected (0.00 sec) mysql>\h -- 快捷幫助 mysql>\c -- 取消命令輸入 mysql>\s -- 查看當前數據庫的狀態 mysql>\q -- 退出mysql命令行 五、 MySQL數據庫的數據類型: MySQL的數據類型分為四大類:數值類型、字串類型、日期類型、NULL。 5.1 數值類型: *tinyint(1字節) smallint(2字節) mediumint(3字節) *int(4字節) bigint(8字節) *float(4字節) float(6,2) *double(8字節) decimal(自定義)字串形數值 5.2 字串類型 普通字串 *char 定長字串 char(8) *varchar 可變字串 varchar(8) 二進制類型 tinyblob blob mediumblob longblob 文本類型 tinytext *text 常用于<textarea></textarea> mediumtext longtext *enum枚舉 set集合 5.3 時間和日期類型: date 年月日 time 時分秒 datatime 年月日時分秒 timestamp 時間戳 year 年 5.4 NULL值 NULL意味著“沒有值”或“未知值” 可以測試某個值是否為NULL 不能對NULL值進行算術計算 對NULL值進行算術運算,其結果還是NULL 0或NULL都意味著假,其余值都意味著真 MySQL的運算符: 算術運算符:+ - * / % 比較運算符:= > < >= <= <> != 數據庫特有的比較:in,not in, is null,is not null,like, between and 邏輯運算符:and or not 六、 表的字段約束: unsigned 無符號(正數) zerofill 前導零填充 auto_increment 自增 default 默認值 not null 非空 PRIMARY KEY 主鍵 (非null并不重復) unique 唯一性 (可以為null但不重復) index 常規索引 七: 建表語句格式: create table 表名( 字段名 類型 [字段約束], 字段名 類型 [字段約束], 字段名 類型 [字段約束], ... ); mysql> create table stu( -> id int unsigned not null auto_increment primary key, -> name varchar(8) not null unique, -> age tinyint unsigned, -> sex enum('m','w') not null default 'm', -> classid char(6) -> ); Query OK, 0 rows affected (0.05 sec) mysql> desc stu; +---------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+---------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(8) | NO | UNI | NULL | | | age | tinyint(3) unsigned | YES | | NULL | | | sex | enum('m','w') | NO | | m | | | classid | char(6) | YES | | NULL | | +---------+---------------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec) mysql> show create table stu\G --查看建表的語句 *************************** 1. row *************************** Table: stu Create Table: CREATE TABLE `stu` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(8) NOT NULL, `age` tinyint(3) unsigned default NULL, `sex` enum('m','w') NOT NULL default 'm', `classid` char(6) default NULL, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 1 row in set (0.00 sec) mysql> mysql> insert into stu(id,name,age,sex,classid) values(1,'zhangsan',20,'m','lnmp 61'); Query OK, 1 row affected (0.00 sec) mysql> insert into stu(name,age,sex,classid) values('lisi',22,'w','lnmp61'); Query OK, 1 row affected (0.00 sec) mysql> insert into stu(name,age,classid) values('wangwu',21,'lnmp61'); Query OK, 1 row affected (0.00 sec) mysql> insert into stu values(null,'qq',24,'w','lnmp62'); Query OK, 1 row affected (0.00 sec) mysql> insert into stu values(null,'aa',20,'m','lamp62'),(null,'bb',25,'m','lnmp 63'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql> select * from stu; +----+----------+------+-----+---------+ | id | name | age | sex | classid | +----+----------+------+-----+---------+ | 1 | zhangsan | 20 | m | lnmp61 | | 2 | lisi | 22 | w | lnmp61 | | 3 | wangwu | 21 | m | lnmp61 | | 4 | qq | 24 | w | lnmp62 | | 5 | aa | 20 | m | lnmp62 | | 6 | bb | 25 | m | lnmp63 | +----+----------+------+-----+---------+ 6 rows in set (0.00 sec) 八、修改表結構 //需求分析->功能(模塊)->數據庫設計->找實體、找屬性、找關系
深入部分:
mysql> desc stu; +---------+---------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+---------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(16) | NO | UNI | NULL | | | sex | enum('m','w') | NO | | m | | | age | tinyint(3) unsigned | NO | | NULL | | | classid | char(6) | NO | | NULL | | +---------+---------------------+------+-----+---------+----------------+ 5 rows in set (0.00 sec) -- 標準格式添加,指定所有的字段,給定所有的值 mysql> insert into stu(id,name,sex,age,classid) values(null,'zhangsan','m',20,'lnmp80'); Query OK, 1 row affected (0.09 sec) -- 給定部分字段添加值(值和字段要對應上) mysql> insert into stu(name,age,classid) values('lisi',22,'lnmp80'); Query OK, 1 row affected (0.03 sec) -- 不給字段信息,來添加值。(值和表結構對應上) mysql> insert into stu values(null,'wangwu','w',25,'lnmp80'); Query OK, 1 row affected (0.08 sec) -- 批量添加數據 mysql> insert into stu(name,sex,age,classid) -> values('qq','w',21,'lamp81'), -> ('aa','m',26,'lnmp81'), -> ('bb','w',20,'lnmp80'); Query OK, 3 rows affected (0.03 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> select * from stu; +----+----------+-----+-----+---------+ | id | name | sex | age | classid | +----+----------+-----+-----+---------+ | 1 | zhangsan | m | 20 | lnmp80 | | 2 | lisi | m | 22 | lnmp80 | | 3 | wangwu | w | 25 | lnmp80 | | 4 | qq | w | 21 | lnmp81 | | 5 | aa | m | 26 | lnmp81 | | 6 | bb | w | 20 | lnmp80 | +----+----------+-----+-----+---------+ 6 rows in set (0.00 sec) mysql> mysql> insert into stu values -> (null,'zhaoliu','w',19,'lnmp81'), -> (null,'tianqi','m',27,'lnmp82'), -> (null,'uu','w',26,'lnmp80'), -> (null,'yy','m',24,'lnmp82'), -> (null,'pp','w',29,'lnmp81'); Query OK, 5 rows affected (0.03 sec) Records: 5 Duplicates: 0 Warnings: 0 mysql> select * from stu; +----+----------+-----+-----+---------+ | id | name | sex | age | classid | +----+----------+-----+-----+---------+ | 1 | zhangsan | m | 20 | lnmp80 | | 2 | lisi | m | 22 | lnmp80 | | 3 | wangwu | w | 25 | lnmp80 | | 4 | qq | w | 21 | lnmp81 | | 5 | aa | m | 26 | lnmp81 | | 6 | bb | w | 20 | lnmp80 | | 7 | zhaoliu | w | 19 | lnmp81 | | 8 | tianqi | m | 27 | lnmp82 | | 9 | uu | w | 26 | lnmp80 | | 10 | yy | m | 24 | lnmp82 | | 11 | pp | w | 29 | lnmp81 | +----+----------+-----+-----+---------+ 11 rows in set (0.00 sec) mysql> --2. 數據的修改: --=================================================== --格式: update 表名 set 字段名=修改值[,字段名=修改值[,....]] [where 條件] [order by 排序] [limit 部分數據] --實例 --將學號id值為5的信息,年齡改為28,班級設為lamp82 mysql> update stu set age=28,classid='lamp82' where id=5 Query OK, 1 row affected (0.11 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from stu; +----+----------+-----+-----+---------+ | id | name | sex | age | classid | +----+----------+-----+-----+---------+ | 1 | zhangsan | m | 20 | lnmp80 | | 2 | lisi | m | 22 | lnmp80 | | 3 | wangwu | w | 25 | lnmp80 | | 4 | qq | w | 21 | lnmp81 | | 5 | aa | m | 28 | lnmp82 | | 6 | bb | w | 20 | lnmp80 | | 7 | zhaoliu | w | 19 | lnmp81 | | 8 | tianqi | m | 27 | lnmp82 | | 9 | uu | w | 26 | lnmp80 | | 10 | yy | m | 24 | lnmp82 | | 11 | pp | w | 29 | lnmp81 | +----+----------+-----+-----+---------+ 11 rows in set (0.00 sec) mysql> --3. 數據的刪除 ---=========================================================================== --格式: delete from 表名 [where 條件] [order by 排序] [limit 部分數據] --刪除實例: --1.刪除id號為5的信息 mysql> delete from stu where id=5; --2.刪除班級為lnmp80的男生信息 mysql> delete from stu where classid='lnmp80' and sex='m'; --3.刪除年齡在21到25之間的信息 mysql> delete from stu where age>=21 and age<=25; mysql> delete from stu where age between 21 and 25; --4.刪除年齡在21到25之外的信息 mysql> delete from stu where age<21 or age>25; mysql> delete from stu where age not between 21 and 25; -- 4. 數據的查詢 --======================================================= --格式: select 字段名|* from 表名 -- [ where 搜索條件] -- [ group by 分組列名[having 分組后的子條件]] -- [ order by 排序列名 [desc降序|asc升序(默認)]] -- [ limit m[,n] 獲取部分數據(分頁) ] 實例: mysql> mysql> select * from stu; --查看所有字段的所有信息 +----+----------+-----+-----+---------+ | id | name | sex | age | classid | +----+----------+-----+-----+---------+ | 1 | zhangsan | m | 20 | lnmp80 | | 2 | lisi | m | 22 | lnmp80 | | 3 | wangwu | w | 25 | lnmp80 | | 4 | qq | w | 21 | lnmp81 | | 5 | aa | m | 28 | lnmp82 | | 6 | bb | w | 20 | lnmp80 | | 7 | zhaoliu | w | 19 | lnmp81 | | 8 | tianqi | m | 27 | lnmp82 | | 9 | uu | w | 26 | lnmp80 | | 10 | yy | m | 24 | lnmp82 | | 11 | pp | w | 29 | lnmp81 | +----+----------+-----+-----+---------+ 11 rows in set (0.00 sec) -- 查看name/sex/age這幾個字段的所有信息 mysql> select name,sex,age from stu; +----------+-----+-----+ | name | sex | age | +----------+-----+-----+ | zhangsan | m | 20 | | lisi | m | 22 | | wangwu | w | 25 | | qq | w | 21 | | aa | m | 28 | | bb | w | 20 | | zhaoliu | w | 19 | | tianqi | m | 27 | | uu | w | 26 | | yy | m | 24 | | pp | w | 29 | +----------+-----+-----+ 11 rows in set (0.00 sec) -- 查看數據,將name字段名換成username (其中as關鍵字可以省略不寫) mysql> select name as username,sex,age from stu; -- 查看所有學生信息,并追加一列(年齡都加5的值),起個別名age2 mysql> select *,age+5 age2 from stu; +----+----------+-----+-----+---------+------+ | id | name | sex | age | classid | age2 | +----+----------+-----+-----+---------+------+ | 1 | zhangsan | m | 20 | lnmp80 | 25 | | 2 | lisi | m | 22 | lnmp80 | 27 | ..... | 11 | pp | w | 29 | lnmp81 | 34 | +----+----------+-----+-----+---------+------+ 11 rows in set (0.00 sec) -- 在查看學生信息時,追加一列。值為beijing,字段名為city mysql> select *,"beijing" city from stu; +----+----------+-----+-----+---------+---------+ | id | name | sex | age | classid | city | +----+----------+-----+-----+---------+---------+ | 1 | zhangsan | m | 20 | lnmp80 | beijing | | 2 | lisi | m | 22 | lnmp80 | beijing | | 3 | wangwu | w | 25 | lnmp80 | beijing | .... | 10 | yy | m | 24 | lnmp82 | beijing | | 11 | pp | w | 29 | lnmp81 | beijing | +----+----------+-----+-----+---------+---------+ 11 rows in set (0.00 sec) -- 將字串aa和bb合并到一列中輸出 mysql> select concat("aa","bb"); +-------------------+ | concat("aa","bb") | +-------------------+ | aabb | +-------------------+ 1 row in set (0.02 sec) -- 將stu表中班級和姓名字段合并到一列輸出,起字段名為uname mysql> select concat(classid,":",name) as uname from stu; +-----------------+ | uname | +-----------------+ | lnmp80:zhangsan | | lnmp80:lisi | 。。。 | lnmp82:tianqi | | lnmp80:uu | | lnmp82:yy | | lnmp81:pp | +-----------------+ 11 rows in set (0.00 sec) mysql> -- where條件查詢語句 --1. 年齡在20至25歲的學生信息(包含20和25) mysql> select * from stu where age>=20 and age<=25; mysql> select * from stu where age between 20 and 25; --2. id號為3,5,8,9的學生信息。 mysql> select * from stu where id=3 or id=5 or id=8 or id=9 mysql> select * from stu where id in(3,5,8,9); --3. 獲取lamp80期的女生信息 mysql> select * from stu where classid='lnmp80' and sex="w" --4. 獲取性別為m的lamp81和lamp82的學生信息 mysql> select * from stu where classid in('lnmp81','lamp82') and sex="w" --5. 查詢數據時去除重復的數據 mysql> select distinct classid from stu; +---------+ | classid | +---------+ | lnmp80 | | lnmp81 | | lnmp82 | +---------+ 3 rows in set (0.00 sec) --6. 查詢學生信息id不是1,3,5,8,10的信息 mysql> select * from stu where id not in(1,3,5,8,10); --7. like模糊查詢只支持兩個通配符: '%'表示任意長度的任意值, '_'表示1位的任意值。 -- 獲取name是由z字符開頭的所有信息 mysql> select * from stu where name like 'z%'; +----+----------+-----+-----+---------+ | id | name | sex | age | classid | +----+----------+-----+-----+---------+ | 1 | zhangsan | m | 20 | lnmp80 | | 7 | zhaoliu | w | 19 | lnmp81 | +----+----------+-----+-----+---------+ 2 rows in set (0.00 sec) -- 查看name值中包含a字符的所有信息 mysql> select * from stu where name like '%a%'; +----+----------+-----+-----+---------+ | id | name | sex | age | classid | +----+----------+-----+-----+---------+ | 1 | zhangsan | m | 20 | lnmp80 | | 3 | wangwu | w | 25 | lnmp80 | | 5 | aa | m | 28 | lnmp82 | | 7 | zhaoliu | w | 19 | lnmp81 | | 8 | tianqi | m | 27 | lnmp82 | +----+----------+-----+-----+---------+ 5 rows in set (0.00 sec) -- 查看name是由兩個字符構成的信息。 mysql> select * from stu where name like '__'; +----+------+-----+-----+---------+ | id | name | sex | age | classid | +----+------+-----+-----+---------+ | 4 | qq | w | 21 | lnmp81 | | 5 | aa | m | 28 | lnmp82 | | 6 | bb | w | 20 | lnmp80 | | 9 | uu | w | 26 | lnmp80 | | 10 | yy | m | 24 | lnmp82 | | 11 | pp | w | 29 | lnmp81 | +----+------+-----+-----+---------+ 6 rows in set (0.00 sec) -- 統計查詢(mysql的聚合函數:count() /sum() /max() /min() /avg() -- 統計stu表的數據條數11,年齡最大29,最小19,平均年齡23.7273,年齡總和261 mysql> select count(*),max(age),min(age),avg(age),sum(age) from stu; +----------+----------+----------+----------+----------+ | count(*) | max(age) | min(age) | avg(age) | sum(age) | +----------+----------+----------+----------+----------+ | 11 | 29 | 19 | 23.7273 | 261 | +----------+----------+----------+----------+----------+ 1 row in set (0.00 sec) -- 分組查詢: group by 字段名 -- 按班級號分組查詢 mysql> select classid from stu group by classid; +---------+ | classid | +---------+ | lnmp80 | | lnmp81 | | lnmp82 | +---------+ 3 rows in set (0.00 sec) -- 按班級分組并統計,統計每個班的人數,最大年齡,最小年齡 mysql> select classid,count(*),max(age),min(age) from stu group by classid; +---------+----------+----------+----------+ | classid | count(*) | max(age) | min(age) | +---------+----------+----------+----------+ | lnmp80 | 5 | 26 | 20 | | lnmp81 | 3 | 29 | 19 | | lnmp82 | 3 | 28 | 24 | +---------+----------+----------+----------+ 3 rows in set (0.00 sec) -- 統計每個班男生的平均年齡 mysql> select classid,avg(age) from stu where sex='m' group by classid; +---------+----------+ | classid | avg(age) | +---------+----------+ | lnmp80 | 21.0000 | | lnmp82 | 26.3333 | +---------+----------+ 2 rows in set (0.00 sec) -- 按班級分組,統計每個班的平均年齡,并獲取平均年齡在23及以上信息。 mysql> select classid,avg(age) from stu group by classid having avg(age)>=23; +---------+----------+ | classid | avg(age) | +---------+----------+ | lnmp81 | 23.0000 | | lnmp82 | 26.3333 | +---------+----------+ 2 rows in set (0.02 sec) --排序:order by 字段名 [asc升(默認)|desc降] mysql> select * from stu; --沒有排序 +----+----------+-----+-----+---------+ | id | name | sex | age | classid | +----+----------+-----+-----+---------+ | 1 | zhangsan | m | 20 | lnmp80 | | 2 | lisi | m | 22 | lnmp80 | | 3 | wangwu | w | 25 | lnmp80 | 。。。 | 9 | uu | w | 26 | lnmp80 | | 10 | yy | m | 24 | lnmp82 | | 11 | pp | w | 29 | lnmp81 | +----+----------+-----+-----+---------+ 11 rows in set (0.00 sec) --按照年齡升序排序 mysql> select * from stu order by age; mysql> select * from stu order by age asc; --等價于上面語句 +----+----------+-----+-----+---------+ | id | name | sex | age | classid | +----+----------+-----+-----+---------+ | 7 | zhaoliu | w | 19 | lnmp81 | | 1 | zhangsan | m | 20 | lnmp80 | | 6 | bb | w | 20 | lnmp80 | | 4 | qq | w | 21 | lnmp81 | | 2 | lisi | m | 22 | lnmp80 | | 10 | yy | m | 24 | lnmp82 | | 3 | wangwu | w | 25 | lnmp80 | | 9 | uu | w | 26 | lnmp80 | | 8 | tianqi | m | 27 | lnmp82 | | 5 | aa | m | 28 | lnmp82 | | 11 | pp | w | 29 | lnmp81 | +----+----------+-----+-----+---------+ 11 rows in set (0.00 sec) --多列排序:首先按班級升序,相同班級再按年齡降序排序 mysql> select * from stu order by classid,age desc; +----+----------+-----+-----+---------+ | id | name | sex | age | classid | +----+----------+-----+-----+---------+ | 9 | uu | w | 26 | lnmp80 | | 3 | wangwu | w | 25 | lnmp80 | | 2 | lisi | m | 22 | lnmp80 | | 1 | zhangsan | m | 20 | lnmp80 | | 6 | bb | w | 20 | lnmp80 | | 11 | pp | w | 29 | lnmp81 | | 4 | qq | w | 21 | lnmp81 | | 7 | zhaoliu | w | 19 | lnmp81 | | 5 | aa | m | 28 | lnmp82 | | 8 | tianqi | m | 27 | lnmp82 | | 10 | yy | m | 24 | lnmp82 | +----+----------+-----+-----+---------+ 11 rows in set (0.00 sec) --limit 分頁: --分頁公式: limit (當前頁-1)*頁大小,頁大小; mysql> select * from stu limit 5; --獲取前5條信息 +----+----------+-----+-----+---------+ | id | name | sex | age | classid | +----+----------+-----+-----+---------+ | 1 | zhangsan | m | 20 | lnmp80 | | 2 | lisi | m | 22 | lnmp80 | | 3 | wangwu | w | 25 | lnmp80 | | 4 | qq | w | 21 | lnmp81 | | 5 | aa | m | 28 | lnmp82 | +----+----------+-----+-----+---------+ 5 rows in set (0.00 sec) --獲取年齡最大的3條數據 mysql> select * from stu order by age desc limit 3; +----+--------+-----+-----+---------+ | id | name | sex | age | classid | +----+--------+-----+-----+---------+ | 11 | pp | w | 29 | lnmp81 | | 5 | aa | m | 28 | lnmp82 | | 8 | tianqi | m | 27 | lnmp82 | +----+--------+-----+-----+---------+ 3 rows in set (0.00 sec) --以4條數據為一頁,取第一頁 mysql> select * from stu limit 0,4; +----+----------+-----+-----+---------+ | id | name | sex | age | classid | +----+----------+-----+-----+---------+ | 1 | zhangsan | m | 20 | lnmp80 | | 2 | lisi | m | 22 | lnmp80 | | 3 | wangwu | w | 25 | lnmp80 | | 4 | qq | w | 21 | lnmp81 | +----+----------+-----+-----+---------+ 4 rows in set (0.00 sec) --以4條數據為1頁,取第二頁 mysql> select * from stu limit 4,4; +----+---------+-----+-----+---------+ | id | name | sex | age | classid | +----+---------+-----+-----+---------+ | 5 | aa | m | 28 | lnmp82 | | 6 | bb | w | 20 | lnmp80 | | 7 | zhaoliu | w | 19 | lnmp81 | | 8 | tianqi | m | 27 | lnmp82 | +----+---------+-----+-----+---------+ 4 rows in set (0.00 sec) mysql> select * from stu limit 8,4; +----+------+-----+-----+---------+ | id | name | sex | age | classid | +----+------+-----+-----+---------+ | 9 | uu | w | 26 | lnmp80 | | 10 | yy | m | 24 | lnmp82 | | 11 | pp | w | 29 | lnmp81 | +----+------+-----+-----+---------+ 3 rows in set (0.00 sec) -- 數據的導入和導出 --================================================ -- 導出lnmp80數據的所有信息 D:\xampp\htdocs\lamp80>mysqldump -u root -p lnmp80 >lnmp80_20170106.sql Enter password: -- 只導出lamp80庫下的stu表信息 D:\xampp\htdocs\lnmp80>mysqldump -u root -p lnmp80 stu>stu.sql Enter password: D:\xampp\htdocs\lnmp80\python_mysql03> --數據庫lnmp80的導入(要求數據庫必須存在) D:\xampp\htdocs\lnmp80>mysql -u root -p lnmp80<lnmp80_20170106.sql Enter password: --數據庫lnmp80下stu表信息的導入 D:\xampp\htdocs\lnmp80>mysql -u root -p lnmp80 < stu.sql
多表查詢:
-- 多表查詢: -- 1. 嵌套方式的多表查詢 -- 2. where關聯查詢 -- 3. 左聯和右聯,內聯的查詢。 ================================================= -- 已知條件: mysql> select * from stu; +----+------------+-----+------+---------+ | id | name | sex | age | classid | +----+------------+-----+------+---------+ | 1 | zhangsan | m | 20 | lnmp01 | | 2 | lisi | w | 21 | lnmp02 | | 3 | wangwu | m | 25 | lnmp01 | | 4 | zhaoliu | w | 29 | lnmp02 | | 5 | qq01 | w | 28 | lnmp01 | | 6 | qq02 | m | 30 | lnmp02 | | 7 | qq03 | w | 31 | lnmp03 | | 8 | xiaowang | m | 18 | lnmp04 | | 9 | xiaoli | w | 19 | lnmp03 | | 10 | xiaobai | m | 22 | lnmp02 | | 11 | xiaosun | w | 24 | lnmp01 | | 12 | xiaozhang2 | w | 36 | lnmp05 | +----+------------+-----+------+---------+ 12 rows in set (0.05 sec) mysql> select * from grade; +----+-----+------+-------+ | id | sid | php | mysql | +----+-----+------+-------+ | 1 | 4 | 80 | 92 | | 2 | 2 | 78 | 80 | | 3 | 1 | 99 | 95 | | 4 | 6 | 58 | 62 | | 5 | 7 | 89 | 98 | | 6 | 3 | 68 | 54 | +----+-----+------+-------+ 6 rows in set (0.00 sec) mysql> -- 一、嵌套查詢:一個查詢結果是另外一個查詢的條件。 -- 例如在學生表中獲取年齡最大的信息 mysql> select max(age) from stu; +----------+ | max(age) | +----------+ | 36 | +----------+ 1 row in set (0.00 sec) mysql> select * from stu where age=(select max(age) from stu); +----+------------+-----+------+---------+ | id | name | sex | age | classid | +----+------------+-----+------+---------+ | 12 | xiaozhang2 | w | 36 | lnmp05 | +----+------------+-----+------+---------+ 1 row in set (0.00 sec) mysql> -- 獲取php考試成績最好的是誰? mysql> select max(php) from grade; --獲取php最高成績 +----------+ | max(php) | +----------+ | 99 | +----------+ 1 row in set (0.11 sec) mysql> select sid from grade where php=99; --獲取php成績在99分的sid學號信息 +-----+ | sid | +-----+ | 1 | +-----+ 1 row in set (0.00 sec) mysql> select * from stu where id=1; --獲取學號為1的學生信息 +----+----------+-----+------+---------+ | id | name | sex | age | classid | +----+----------+-----+------+---------+ | 1 | zhangsan | m | 20 | lnmp01 | +----+----------+-----+------+---------+ 1 row in set (0.00 sec) mysql> select * from stu where id=(select sid from grade where php=99); mysql> select * from stu where id in(select sid from grade where php=99); +----+----------+-----+------+---------+ | id | name | sex | age | classid | +----+----------+-----+------+---------+ | 1 | zhangsan | m | 20 | lnmp01 | +----+----------+-----+------+---------+ 1 row in set (0.19 sec) -- 三層嵌套查詢,解決考試php成績最好的信息 mysql> select * from stu where id in(select sid from grade where php=(select max(p hp) from grade)); +----+----------+-----+------+---------+ | id | name | sex | age | classid | +----+----------+-----+------+---------+ | 1 | zhangsan | m | 20 | lnmp01 | +----+----------+-----+------+---------+ 1 row in set (0.00 sec) -- 二、 where關聯查詢 -- 查詢stu表與grade表的關聯查詢 mysql> select * from stu,grade where stu.id=grade.sid; +----+----------+-----+------+---------+----+-----+------+-------+ | id | name | sex | age | classid | id | sid | php | mysql | +----+----------+-----+------+---------+----+-----+------+-------+ | 4 | zhaoliu | w | 29 | lnmp02 | 1 | 4 | 80 | 92 | | 2 | lisi | w | 21 | lnmp02 | 2 | 2 | 78 | 80 | | 1 | zhangsan | m | 20 | lnmp01 | 3 | 1 | 99 | 95 | | 6 | qq02 | m | 30 | lnmp02 | 4 | 6 | 58 | 62 | | 7 | qq03 | w | 31 | lnmp03 | 5 | 7 | 89 | 98 | | 3 | wangwu | m | 25 | lnmp01 | 6 | 3 | 68 | 54 | +----+----------+-----+------+---------+----+-----+------+-------+ 6 rows in set (0.13 sec) -- 查詢stu表與grade表的關聯查詢,只顯示部分字段 mysql> select s.id,s.name,g.php,g.mysql from stu s,grade g -> where s.id=g.sid; +----+----------+------+-------+ | id | name | php | mysql | +----+----------+------+-------+ | 4 | zhaoliu | 80 | 92 | | 2 | lisi | 78 | 80 | | 1 | zhangsan | 99 | 95 | | 6 | qq02 | 58 | 62 | | 7 | qq03 | 89 | 98 | | 3 | wangwu | 68 | 54 | +----+----------+------+-------+ 6 rows in set (0.03 sec) -- 查詢lnmp01班的學生考試信息,顯示:學號、姓名、班級、php和MySQL字段。 mysql> select s.id,s.name,s.classid,g.php,g.mysql from stu s,grade g -> where s.id=g.sid and s.classid='lamp01'; +----+----------+---------+------+-------+ | id | name | classid | php | mysql | +----+----------+---------+------+-------+ | 1 | zhangsan | lnmp01 | 99 | 95 | | 3 | wangwu | lnmp01 | 68 | 54 | +----+----------+---------+------+-------+ 2 rows in set (0.00 sec) -- 統計每個班的考試人數和平均成績:顯示:班級,人數和平均成績 mysql> select s.classid,count(*) num,avg(g.php) php ,avg(g.mysql) mysql -> from stu s,grade g -> where s.id=g.sid group by s.classid; +---------+-----+---------+---------+ | classid | num | php | mysql | +---------+-----+---------+---------+ | lnmp01 | 2 | 83.5000 | 74.5000 | | lnmp02 | 3 | 72.0000 | 78.0000 | | lnmp03 | 1 | 89.0000 | 98.0000 | +---------+-----+---------+---------+ 3 rows in set (0.00 sec) -- 查詢姓名中含有ang的考試信息 mysql> select s.id,s.name,g.php,g.mysql from stu s,grade g -> where s.id=g.sid and s.name like '%ang%'; +----+----------+------+-------+ | id | name | php | mysql | +----+----------+------+-------+ | 1 | zhangsan | 99 | 95 | | 3 | wangwu | 68 | 54 | +----+----------+------+-------+ 2 rows in set (0.00 sec) --三、 左聯和右聯、內聯(等價于where) 查詢 ------------------------------------------------------ --查詢所有學生的考試信息(包含沒有考試的) -- 采用左聯查詢(以左邊為主,右邊沒有的對應數據補null) mysql> select s.id,s.name,g.php,g.mysql from stu s left join grade g -> on s.id=g.sid; +----+------------+------+-------+ | id | name | php | mysql | +----+------------+------+-------+ | 2 | lisi | 78 | 80 | | 5 | qq01 | NULL | NULL | | 6 | qq02 | 58 | 62 | | 7 | qq03 | 89 | 98 | | 3 | wangwu | 68 | 54 | | 10 | xiaobai | NULL | NULL | | 9 | xiaoli | NULL | NULL | | 11 | xiaosun | NULL | NULL | | 8 | xiaowang | NULL | NULL | | 12 | xiaozhang2 | NULL | NULL | | 1 | zhangsan | 99 | 95 | | 4 | zhaoliu | 80 | 92 | +----+------------+------+-------+ 12 rows in set (0.00 sec) -- 采用右聯查詢(以右邊為主,左邊沒有的對應數據補null) mysql> select s.id,s.name,g.php,g.mysql from grade g right join stu s -> on s.id=g.sid; +----+------------+------+-------+ | id | name | php | mysql | +----+------------+------+-------+ | 2 | lisi | 78 | 80 | | 5 | qq01 | NULL | NULL | | 6 | qq02 | 58 | 62 | | 7 | qq03 | 89 | 98 | | 3 | wangwu | 68 | 54 | | 10 | xiaobai | NULL | NULL | | 9 | xiaoli | NULL | NULL | | 11 | xiaosun | NULL | NULL | | 8 | xiaowang | NULL | NULL | | 12 | xiaozhang2 | NULL | NULL | | 1 | zhangsan | 99 | 95 | | 4 | zhaoliu | 80 | 92 | +----+------------+------+-------+ 12 rows in set (0.00 sec) -- 內聯查詢,就是兩邊表都存在的。 mysql> select s.id,s.name,g.php,g.mysql from grade g inner join stu s -> on s.id=g.sid; +----+----------+------+-------+ | id | name | php | mysql | +----+----------+------+-------+ | 4 | zhaoliu | 80 | 92 | | 2 | lisi | 78 | 80 | | 1 | zhangsan | 99 | 95 | | 6 | qq02 | 58 | 62 | | 7 | qq03 | 89 | 98 | | 3 | wangwu | 68 | 54 | +----+----------+------+-------+ 6 rows in set (0.00 sec) mysql> -- 查詢lnmp01班的學生考試信息 mysql> select s.id,s.name,s.classid,g.php,g.mysql -> from stu s left join grade g -> on s.id=g.sid -> where s.classid='lnmp01'; +----+----------+---------+------+-------+ | id | name | classid | php | mysql | +----+----------+---------+------+-------+ | 1 | zhangsan | lnmp01 | 99 | 95 | | 3 | wangwu | lnmp01 | 68 | 54 | | 5 | qq01 | lnmp01 | NULL | NULL | | 11 | xiaosun | lnmp01 | NULL | NULL | +----+----------+---------+------+-------+ 4 rows in set (0.00 sec) mysql>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。