mySQL (關系型數(shù)據(jù)庫管理系統(tǒng))

MySQL是一個[關系型數(shù)據(jù)庫管理系統(tǒng)]由瑞典MySQL AB 公司開發(fā)鹦肿,目前屬于 Oracle旗下產(chǎn)品。MySQL 是最流行的[關系型數(shù)據(jù)庫管理系統(tǒng)]之一纠炮,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關系數(shù)據(jù)庫管理系統(tǒng)) 應用軟件犹芹。
MySQL是一種關系數(shù)據(jù)庫管理系統(tǒng),關系數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中鞠绰,而不是將所有數(shù)據(jù)放在一個大倉庫內(nèi)腰埂,這樣就增加了速度并提高了靈活性。
MySQL所使用的 **SQL **語言是用于訪問數(shù)據(jù)庫標準化語言蜈膨。MySQL 軟件采用了雙授權政策屿笼,分為社區(qū)版和商業(yè)版,由于其體積小翁巍、速度快驴一、總體擁有成本低,尤其是[開放源碼]這一特點灶壶,一般中小型網(wǎng)站的開發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫肝断。

什么是數(shù)據(jù)庫呢?

簡單的說數(shù)據(jù)庫就是裝數(shù)據(jù)、管理數(shù)據(jù)的地方胸懈,每個網(wǎng)站的資源(比如圖像担扑、聲音、視屏趣钱、軟件等)涌献、每個游戲的資源,都是放在服務器里的數(shù)據(jù)庫中的羔挡。

什么是 SQL洁奈?

SQL 指結構化查詢語言
SQL 使我們有能力訪問數(shù)據(jù)庫
SQL 是一種 ANSI (美國國家標準化組織)的標準計算機語言

SQL 能做什么?

SQL 面向數(shù)據(jù)庫執(zhí)行查詢
SQL 可從數(shù)據(jù)庫取回數(shù)據(jù)
SQL 可在數(shù)據(jù)庫中插入新的記錄
SQL 可更新數(shù)據(jù)庫中的數(shù)據(jù)
SQL 可從數(shù)據(jù)庫刪除記錄
SQL 可創(chuàng)建新數(shù)據(jù)庫
SQL 可在數(shù)據(jù)庫中創(chuàng)建新表
SQL 可在數(shù)據(jù)庫中創(chuàng)建存儲過程
SQL 可在數(shù)據(jù)庫中創(chuàng)建視圖
SQL 可以設置表绞灼、存儲過程和視圖的權限

SQL 是一種標準 - 但是...
SQL 是一門 ANSI 的標準計算機語言利术,用來訪問和操作數(shù)據(jù)庫系統(tǒng)。SQL 語句用于取回和更新數(shù)據(jù)庫中的數(shù)據(jù)低矮。SQL 可與數(shù)據(jù)庫程序協(xié)同工作印叁,比如 MS Access、DB2军掂、Informix轮蜕、MS SQL Server、Oracle蝗锥、Sybase 以及其他數(shù)據(jù)庫系統(tǒng)跃洛。
不幸地是,存在著很多不同版本的 SQL 語言终议,但是為了與 ANSI 標準相兼容汇竭,它們必須以相似的方式共同地來支持一些主要的關鍵詞(比如 SELECT、UPDATE穴张、DELETE细燎、INSERT、WHERE 等等)皂甘。
注釋:除了 SQL 標準之外玻驻,大部分 SQL 數(shù)據(jù)庫程序都擁有它們自己的私有擴展!

MySql簡單概念

1.MySQL 數(shù)據(jù)庫MySQL是一個快速偿枕,易于使用的RDBMS璧瞬,被用于許多小型和大型企業(yè)。MySQL由一個瑞典公司MySQL AB支持渐夸。正在開發(fā)嗤锉,銷售。MySQL變得如此受歡迎捺萌,因為許多很好的理由:
MySQL在一個開源許可下發(fā)布。所以使用它不要擔心什么問題。

2.MySQL本身是非常強大的程序桃纯。它擁有可處理最昂貴酷誓,最強大的數(shù)據(jù)庫軟件包的相當大一部分功能。

3.MySQL使用眾所周知的SQL數(shù)據(jù)語言的標準形式态坦。

4.MySQL可運行在許多類操作系統(tǒng)和許多語言盐数,包括 C#, PHP, PERL, C, C++, JAVA ,Python等

5.MySQL運行得非常快伞梯,甚至在大型數(shù)據(jù)集也可以運行得很好玫氢。

6.MySQL支持大型數(shù)據(jù)庫,可達5千萬行以上的表谜诫。 表的默認文件大小限制為4GB漾峡,但可以增加(如果操作系統(tǒng)可以處理它),800萬TB是一個理論極限(TB).

7.MySQL是定制的喻旷。開源GPL許可允許程序員修改MySQL軟件生逸,以適應自己的特定環(huán)境。

8.MySQL 為關系型數(shù)據(jù)庫(Relational Database Management System), 這種所謂的"關系型"可以理解為"表格"的概念, 一個關系型數(shù)據(jù)庫由一個或數(shù)個表格組成, 如圖所示的一個表格:

表頭(header): 每一列的名稱;列(row): 具有相同數(shù)據(jù)類型的數(shù)據(jù)的集合;行(col): 每一行用來描述某個人/物的具體信息;值(value): 行的具體信息, 每個值必須與該列的數(shù)據(jù)類型相同;主鍵(key): 表中用來識別某個特定的人\物的方法, 主鍵的值在當前列中具有唯一性且预。外鍵: 外鍵是兩個表之間的連接值槽袄。
MySQL服務 DOS下的啟動、停止與卸載在 Windows 命令提示符下運行:
啟動:
net start MySQL停止: net stop MySQL卸載: sc delete MySQL

MySql中的數(shù)據(jù)類型

整形

MySql數(shù)據(jù)類型
含義(有符號)

tinyint
1個字節(jié) 范圍(-128~127)

smallint
2個字節(jié) 范圍(-32768~32767)

mediumint
3個字節(jié) 范圍(-8388608~8388607)

int
4個字節(jié) 范圍(-2147483648~2147483647)

bigint
8個字節(jié) 范圍(+-9.22*10的18次方)

2锋谐、浮點型(float和double)

float(m,d)
單精度浮點型 8位精度(4字節(jié)) m總個數(shù)遍尺,d小數(shù)位

double(m,d)
雙精度浮點型 16位精度(8字節(jié)) m總個數(shù),d小數(shù)位

設一個字段定義為float(5,3)涮拗,如果插入一個數(shù)12.45678,實際數(shù)據(jù)庫里存的是12.457乾戏,但總個數(shù)還以實際為準,即5位多搀。
3歧蕉、定點數(shù)浮點型在數(shù)據(jù)庫中存放的是近似值,而定點類型在數(shù)據(jù)庫中存放的是精確值康铭。
4惯退、字符串(char,varchar,_text)

MySQL數(shù)據(jù)類型

char(n)
固定長度,最多255個字符

varchar(n)固定長度从藤,最多65535個字符

tinytext
可變長度催跪,最多255個字符

text
可變長度,最多65535個字符

mediumtext
可變長度夷野,最多2的24次方-1個字符

longtext
可變長度懊蒸,最多2的32次方-1個字符

char和varchar:1.char(n) 若存入字符數(shù)小于n,則以空格補于其后悯搔,查詢之時再將空格去掉骑丸。所以char類型存儲的字符串末尾不能有空格,varchar不限于此。2.char(n) 固定長度通危,char(4)不管是存入幾個字符铸豁,都將占用4個字節(jié),varchar是存入的實際字符數(shù)+1個字節(jié)(n<=255)或2個字節(jié)(n>255)菊碟,所以varchar(4),存入3個字符將占用4個字節(jié)节芥。3.char類型的字符串檢索速度要比varchar類型的快。
varchar和text:1.varchar可指定n逆害,text不能指定头镊,內(nèi)部存儲varchar是存入的實際字符數(shù)+1個字節(jié)(n<=255)或2個字節(jié)(n>255),text是實際字符數(shù)+2個字節(jié)魄幕。2.text類型不能有默認值相艇。3.varchar可直接創(chuàng)建索引,text創(chuàng)建索引要指定前多少個字符梅垄。varchar查詢速度快于text,在都創(chuàng)建索引的情況下厂捞,text的索引似乎不起作用。
5.二進制數(shù)據(jù)(_Blob)1._BLOB和_text存儲方式不同队丝,_TEXT以文本方式存儲靡馁,英文存儲區(qū)分大小寫,而_Blob是以二進制方式存儲机久,不分大小寫臭墨。2._BLOB存儲的數(shù)據(jù)只能整體讀出。3._TEXT可以指定字符集膘盖,_BLO不用指定字符集胧弛。
6.日期時間類型
MySQL數(shù)據(jù)類型
含義

date
日期 '2008-12-2'

time
時間 '12:25:36'

datetime
日期時間 '2008-12-2 22:06:44'

timestamp
自動存儲記錄修改時間

若定義一個字段為timestamp,這個字段里的時間數(shù)據(jù)會隨其他字段修改的時候自動刷新侠畔,所以這個數(shù)據(jù)類型的字段可以存放這條記錄最后被修改的時間结缚。
數(shù)據(jù)類型的屬性
MySQL關鍵字
含義

NULL
數(shù)據(jù)列可包含NULL值

NOT NULL
數(shù)據(jù)列不允許包含NULL值

DEFAULT
默認值

PRIMARY KEY
主鍵

AUTO_INCREMENT
自動遞增,適用于整數(shù)類型

UNSIGNED
無符號

CHARACTER SET name
指定一個字符集

  1. 使用數(shù)據(jù)庫
    1> 創(chuàng)建數(shù)據(jù)庫
    使用 create database 語句可完成對數(shù)據(jù)庫的創(chuàng)建, 創(chuàng)建命令的格式如下:
    create database 數(shù)據(jù)庫名 [其他選項];

例如我們需要創(chuàng)建一個名為 samp_db 的數(shù)據(jù)庫, 在命令行下執(zhí)行以下命令:
create database Person_DB character;

注意: MySQL語句以分號(;)作為語句的結束, 若在語句結尾不添加分號時, 命令提示符會以 -> 提示你繼續(xù)輸入(有個別特例, 但加分號是一定不會錯的);

  1. 創(chuàng)建數(shù)據(jù)庫表
    使用 create table 語句可完成對表的創(chuàng)建, create table 的常見形式:
    create table 表名稱(列聲明);

以創(chuàng)建 students 表為例, 表中將存放 學號(id)软棺、姓名(name)红竭、性別(sex)、年齡(age)喘落、聯(lián)系電話(tel) 這些內(nèi)容:

create table students ( id int unsigned not null 
auto_increment primary key, name char(8) not null,
 gender char(4) not null, age tinyint unsigned not null,
 tel char(13) null default "-" );

對于一些較長的語句在命令提示符下可能容易輸錯, 因此我們可以通過任何文本編輯器將語句輸入好后保存為 createtable.sql 的文件中, 通過命令提示符下的文件重定向執(zhí)行執(zhí)行該腳本茵宪。打開命令提示符, 輸入: mysql -D samp_db -u root -p < createtable.sql
(提示: 1.如果連接遠程主機請加上 -h 指令; 2. createtable.sql 文件若不在當前工作目錄下需指定文件的完整路徑。)語句解說:create table tablename(columns) 為創(chuàng)建數(shù)據(jù)庫表的命令, 列的名稱以及該列的數(shù)據(jù)類型將在括號內(nèi)完成;括號內(nèi)聲明了5列內(nèi)容, id瘦棋、name稀火、sex、age赌朋、tel為每列的名稱, 后面跟的是數(shù)據(jù)類型描述, 列與列的描述之間用逗號(,)隔開;以 "id int unsigned not null auto_increment primary key" 行進行介紹:
"id" 為列的名稱;
"int" 指定該列的類型為 int(取值范圍為 -8388608到8388607), 在后面我們又用 **"unsigned" 加以修飾, 表示該類型為無符號型, 此時該列的取值范圍為 0到16777215;
"not null" 說明該列的值不能為空, 必須要填, 如果不指定該屬性, 默認可為空;
"auto_increment" 需在整數(shù)列中使用, 其作用是在插入數(shù)據(jù)時若該列為 NULL, MySQL將自動產(chǎn)生一個比現(xiàn)存值更大的唯一標識符值凰狞。在每張表中僅能有一個這樣的值且所在列必須為索引列篇裁。
"primary key" 表示該列是表的主鍵, 本列的值必須唯一, MySQL將自動索引該列。

下面的 char(8) 表示存儲的字符長度為8, tinyint的取值范圍為 -127到128, default 屬性指定當該列值為空時的默認值赡若。
**提示: **1. 使用 show tables; 命令可查看已創(chuàng)建了表的名稱; 2. 使用 describe 表名; 命令可查看已創(chuàng)建的表的詳細信息茴恰。
操作MySQL數(shù)據(jù)庫
1. 向表中插入數(shù)據(jù)insert 語句可以用來將一行或多行數(shù)據(jù)插到數(shù)據(jù)庫表中, 使用的一般形式如下:
insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);

其中 [] 內(nèi)的內(nèi)容是可選的, 例如, 要給 Person_DB 數(shù)據(jù)庫中的 students 表插入一條記錄, 執(zhí)行語句:
insert into students values(NULL, "王剛", "男", 20, "13811371377");

按回車鍵確認后若提示 Query Ok, 1 row affected (0.05 sec) 表示數(shù)據(jù)插入成功。 若插入失敗請檢查是否已選擇需要操作的數(shù)據(jù)庫斩熊。有時我們只需要插入部分數(shù)據(jù), 或者不按照列的順序進行插入, 可以使用這樣的形式進行插入:
insert into students (name, sex, age) values("孫麗華", "女", 21);

2. 查詢表中的數(shù)據(jù)select 語句常用來根據(jù)一定的查詢規(guī)則到數(shù)據(jù)庫中獲取數(shù)據(jù), 其基本的用法為:
select 列名稱 from 表名稱 [查詢條件];

例如要查詢 students 表中所有學生的名字和年齡, 輸入語句
select name, age from students;

執(zhí)行結果如下:
name
age

王剛
20

孫麗華
21

王永恒
23

鄭俊杰
19

陳芳
22

張偉朋
21

6 rows in set (0.00 sec) mysql>也可以使用通配符 * 查詢表中所有的內(nèi)容, 語句:
select * from students;

2.1按特定條件查詢:where 關鍵詞用于指定查詢條件, 用法形式為:
select 列名稱 from 表名稱 where 條件;

以查詢所有性別為女的信息為例, 輸入查詢語句:
select * from students where sex="女";

where 子句不僅僅支持 "where 列名 = 值" 這種名等于值的查詢形式, 對一般的比較運算的運算符都是支持的, 例如 =、>伐庭、<粉渠、>=、<圾另、!= 以及一些擴展運算符 is [not] null霸株、in、like 等等集乔。 還可以對查詢條件使用 or 和 and 進行組合查詢去件。示例:查詢年齡在21歲以上的所有人信息:
select * from students where age > 21;

查詢名字中帶有 "王" 字的所有人信息:
select * from students where name like "%王%";

查詢id小于5且年齡大于20的所有人信息:
select * from students where id<5 and age>20;

更新表中的數(shù)據(jù)update 語句可用來修改表中的數(shù)據(jù), 基本的使用形式為:
update 表名稱 set 列名稱=新值 where 更新條件;

使用示例:將id為5的手機號改為默認的"-":
update students set tel=default where id=5;

將所有人的年齡增加1:
update students set age=age+1;

將手機號為 13288097888 的姓名改為 "張偉鵬", 年齡改為 19:
update students set name="張偉鵬", age=19 where tel="13288097888";

刪除表中的數(shù)據(jù)delete 語句用于刪除表中的數(shù)據(jù), 基本用法為:
delete from 表名稱 where 刪除條件;

使用示例:刪除id為2的行:
delete from students where id=2;

刪除所有年齡小于21歲的數(shù)據(jù):
delete from students where age<20;

刪除表中的所有數(shù)據(jù):
delete from students;

創(chuàng)建后表的修改alter table 語句用于創(chuàng)建后對表的修改, 基礎用法如下:添加列基本形式:
alter table 表名 add 列名 列數(shù)據(jù)類型 [after 插入位置];

示例:在表的最后追加列 address:
alter table students add address char(60);

在名為 age 的列后插入列 birthday:
alter table students add birthday date after age;

修改列基本形式:
alter table 表名 change 列名稱 列新名稱 新數(shù)據(jù)類型;

示例:將表 tel 列改名為 telphone:
alter table students change tel telphone char(13) default "-";

將 name 列的數(shù)據(jù)類型改為 char(16):
alter table students change name name char(16) not null;

刪除列基本形式: alter table 表名 drop 列名稱;
示例:刪除 birthday 列:
alter table students drop birthday;

重命名表基本形式:
alter table 表名 rename 新表名;

示例:重命名 students 表為 workmates:
alter table students rename workmates;

刪除整張表基本形式:
drop table 表名;

示例:刪除 workmates 表:
drop table workmates;

刪除整個數(shù)據(jù)庫基本形式:
drop database 數(shù)據(jù)庫名;

示例:刪除 samp_db 數(shù)據(jù)庫:
drop database samp_db;

C# 操作數(shù)據(jù)庫
先下載mysql針對 .net的命名空間 下載地址
下載完成之后,得到

mysql .net擴展包

v4.0和v4.5中扰路,分別針對于.NetFramework的版本號尤溜。
這里我選用v4.0,在項目中添加引用:


添加引用

添加引用

選擇引用的文件

導入命名空間:using MySql.Data.MySqlClient;

// Host 數(shù)據(jù)庫所在的ip地址 這里取本機的數(shù)據(jù) 汗唱, 數(shù)據(jù)庫名稱宫莱,就是我們將要操作的數(shù)據(jù), UserName哩罪、Password就是登陸數(shù)據(jù)庫的賬號授霸, 密碼。 string hostName = "Host=localhost;Database=bank;Username=root;Password="; // 1. 創(chuàng)建一個數(shù)據(jù)庫連接對象 MySqlConnection con = new MySqlConnection(hostName); // 打開該數(shù)據(jù)庫的連接 con.Open(); #region mysql執(zhí)行插入語句 //2 . 創(chuàng)建出一個命令對象 际插。 通過該對象去執(zhí)行sql語句 碘耳。 // 第一個參數(shù),將要執(zhí)行的sql語句框弛, 第二個參數(shù)辛辨,是在哪個連接上面執(zhí)行。 該連接包含了數(shù)據(jù)庫的名字功咒,主機地址愉阎,還有登錄的賬戶 //MySqlCommand command = new MySqlCommand("insert into student (name, age, gender) values ('張三', 99, '女')", con); //if (command.ExecuteNonQuery() > 0) //{ // Console.WriteLine("插入數(shù)據(jù)成功"); //} //else //{ // Console.WriteLine("插入數(shù)據(jù)失敗"); //} #endregion #region mysql執(zhí)行查詢語句 MySqlCommand command = new MySqlCommand("select * from student", con); // 執(zhí)行一個查詢命令, 獲取到的數(shù)據(jù)力奋,存放在reader中榜旦。 MySqlDataReader reader = command.ExecuteReader(); // read方法, 如果獲取到數(shù)據(jù)景殷,就返回True溅呢,否則 false澡屡。 while (reader.Read()) { Console.WriteLine("id :" + reader["id"] + " name : " + reader["name"] + " age : " + reader["age"]); } #endregion // 數(shù)據(jù)庫使用完畢要及時關閉 。 不然下次打開的時候會出異常 con.Close(); Console.WriteLine("程序執(zhí)行完畢"); Console.ReadKey();

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咐旧,一起剝皮案震驚了整個濱河市驶鹉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铣墨,老刑警劉巖室埋,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異伊约,居然都是意外死亡姚淆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門屡律,熙熙樓的掌柜王于貴愁眉苦臉地迎上來腌逢,“玉大人,你說我怎么就攤上這事超埋〔龋” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵霍殴,是天一觀的道長媒惕。 經(jīng)常有香客問我,道長来庭,這世上最難降的妖魔是什么吓笙? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮巾腕,結果婚禮上面睛,老公的妹妹穿的比我還像新娘。我一直安慰自己尊搬,他們只是感情好叁鉴,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著佛寿,像睡著了一般幌墓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上冀泻,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天常侣,我揣著相機與錄音,去河邊找鬼弹渔。 笑死胳施,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的肢专。 我是一名探鬼主播舞肆,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼焦辅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了椿胯?” 一聲冷哼從身側響起筷登,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哩盲,沒想到半個月后前方,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡廉油,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年镣丑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娱两。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖金吗,靈堂內(nèi)的尸體忽然破棺而出十兢,到底是詐尸還是另有隱情,我是刑警寧澤摇庙,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布旱物,位于F島的核電站,受9級特大地震影響卫袒,放射性物質發(fā)生泄漏宵呛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一夕凝、第九天 我趴在偏房一處隱蔽的房頂上張望宝穗。 院中可真熱鬧,春花似錦码秉、人聲如沸逮矛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽须鼎。三九已至,卻和暖如春府蔗,著一層夾襖步出監(jiān)牢的瞬間晋控,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工姓赤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赡译,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓不铆,卻偏偏與公主長得像捶朵,于是被迫代替她去往敵國和親蜘矢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容