天天看點

MySQL用法----基于Web伺服器

 建立web伺服器一般是由LAMP(linux:作業系統、Apache:http伺服器軟體、MySQL:資料庫軟體和PHP:(有時也是指Perl 或 Python) 的第一個字母)組合起來的。

元件分析:

 Linux   

Linux 是免費開源軟體,這意味着源代碼可用的作業系統。

  Apache   

Apache 是使用中最受歡迎的一個開放源碼的WEB伺服器軟體。   

  MySQL   

MySQL 是多線程、多使用者的SQL資料庫管理系統。   

  PHP,(Perl 或 Python )  

PHP 是一種程式設計語言最初設計生産動态網站。

PHP 是主要用于伺服器端的應用程式軟體。Perl 和 Python 類似。

聯系:

建立一台WEB伺服器,需要有Apache軟體,而php是挂在apache底下執行的一個子產品,而我們要用網頁的php程式程控MySQL時,php就得要支援MySQL的子產品。

是以我們配置一台web伺服器需要的軟體主要有:

httpd(提供Apache主程式)

mysql(MySQL用戶端程式)

mysql-server(MySQL伺服器端程式)

php(php主程式含給apache使用的子產品)

php-mysql(提供給php程式讀取MySQL資料庫的子產品)

這裡我們主要介紹下web伺服器中mysql的用法。

MySQL:

 資料庫其實是一種特殊格式的檔案,這種檔案必需要通過一個特殊的接口(資料庫軟體)來進行讀寫。

 開源的資料庫中,MySQL在性能、穩定性和功能上是首選,可以達到百萬級别的資料存儲,網站初期可以将MySQL和Web伺服器放在一起,

 但是當通路 量達到一定規模後,應該将MySQL資料庫從Web Server上獨立出來,在單獨的伺服器上運作,同時保持Web Server和MySQL伺服器的穩定連接配接。

資料庫模型分類:

層次模型

網狀模型

關系模型(實體-關系模型)

對象-關系模型

非關系模型

關系模型是目前最常用的

MySQL的資料類型:

數值型:精确數值型,整型,近似數值型(浮點型)

其中整型包括(tinyint  smallint mediumint  int(integer)  )

近似數值型也包括(單精度浮點型 fioat 雙精度浮點型 double)

字元型:

字元( char(length):不區分大小寫   varchar(length) 可以變化  character set :字元集 collate:排序規則   區分字母大小寫:binary(length)  varbinary(length))

多字元:(text:不區分大小寫 tinytext text  midiumtext longtext  blob等)

隻要是字元,都有字元集和排序規則

内部類型(enum :枚舉 定義了什麼,隻能存什麼  set:定義了的字元,可以組合用)

日期時間型:(日期:date 時間:time  日期時間:datetime  年:year)

類型通常還有修飾符:unsigned (無符号的)

注:這裡隻列出一部分,想要知道更多的類型,可以網上搜尋下哦

MySQL中對資料庫操作的一些指令:

1、資料庫對象操作:

建立   create

修改 alter

删除 drop

我們稱其為DDL:database defining language 資料庫定義語言

2、對表的操作:

添加 insert into

删除 delete

修改 update

查詢 select

這些語言我們稱其為DML: database manipulate language  資料庫操作語言

3、對使用者,角色的控制:

授予權限 grant

取消權限 revoke

這些操作我們稱其為DCL:database conctrolling language  資料庫控制語言

注:(以上這寫指令是不區分大小寫的)

下面以一個執行個體來解析下資料庫這些指令的用法:

要想使用MySQL中這些指令,首先在我們系統上要有和MySQL相關的一些rpmbao

這裡我們使用yum安裝mysql.i386  、mysql-server.i386(基于Red Hat Enterprise Linux Server release 5.8 )這裡yum安裝就不多做介紹了

使用service mysqld start 啟動資料庫服務,

使用mysql指令進入資料庫系統,便可進行進一步的操作了:

mysql>drop database if exists mydata; #如果存在mydata則删除

mysql> create database mydata; #建立庫mydata

mysql> use mydata;   #打開庫mydata

Database changed

  1. mysql> use mydata;  
  2. Database changed 
  3. mysql> create table data (ID int unsigned,Name char(20),Age int unsigned,Gender enum ('Female','Male'),Course char(30));     //建表結束 
  4. Query OK, 0 rows affected (0.01 sec) 
  5. 注:在建表中(1)data将ID設為長度為整型的數字字段:并且是無符号的 
  6. (2)将NAME設為長度為20的字元字段 
  7. (3)将Age設為整型的數字字段而且是無符号的 
  8. (4)将Gender設為和Male或Female比對的字元 
  9. (5)課程設定長度為30的字元字段。 

mysql> desc data;  #檢視定義的表

  1. +--------+-----------------------+------+-----+---------+-------+ 
  2. | Field  | Type                  | Null | Key | Default | Extra | 
  3. +--------+-----------------------+------+-----+---------+-------+ 
  4. | ID     | int(10) unsigned      | YES  |     | NULL    |       |  
  5. | Name   | char(20)              | YES  |     | NULL    |       |  
  6. | Age    | int(10) unsigned      | YES  |     | NULL    |       |  
  7. | Gender | enum('Female','Male') | YES  |     | NULL    |       |  
  8. | Course | char(30)              | YES  |     | NULL    |       |  
  9. +--------+-----------------------+------+-----+---------+-------+ 
  10. 5 rows in set (0.00 sec) 

#以下為在表中插入字段

mysql> insert into data values (1, 'aa', 24, 'Male', 'math');

Query OK, 1 row affected (0.00 sec)

mysql> insert into data values (2, 'bb', 20, 'Female', 'language');

按照以上方式插入5條資料資訊

mysql> select * from data;  #完成後,檢視表裡的内容:

  1. mysql> select * from data; 
  2. +------+------+------+--------+----------+ 
  3. | ID   | Name | Age  | Gender | Course   | 
  4. +------+------+------+--------+----------+ 
  5. |    1 | aa   |   24 | Male   | math     |  
  6. |    2 | bb   |   20 | Female | language |  
  7. |    3 | cc   |   21 | Male   | English  |  
  8. |    4 | dd   |   22 | Male   | history  |  
  9. |    5 | ee   |   25 | Female | Chinese  |  
  10. +------+------+------+--------+----------+ 
  11. 5 rows in set (0.00 sec) 
  12. 以上就是自己定義的資料的資訊了哦。。 

對表中資料的操作(定義表):

update tb_name set colum_name=value where condition;    #更改某一字段的屬性(限制條件)

一般來講,where 中的condition指的是對表中某字段或某些字段做判定(等值比較,或正規表達式比對,通配符比對)

  1. eg: 
  2. mysql>update data set Course='math' where ID=2;#将ID号為2的人選的課程更改為math 
  3. Query OK, 1 row affected (0.00 sec) 
  4. Rows matched: 1  Changed: 1  Warnings: 0 
  5. mysql> select * from data; 
  6. +------+------+------+--------+---------+ 
  7. | ID   | Name | Age  | Gender | Course  | 
  8. +------+------+------+--------+---------+ 
  9. |    1 | aa   |   24 | Male   | math    |  
  10. |    2 | bb   |   20 | Female | math    |  
  11. |    3 | cc   |   21 | Male   | English |  
  12. |    4 | dd   |   22 | Male   | history |  
  13. |    5 | ee   |   25 | Female | Chinese |  
  14. +------+------+------+--------+---------+ 
  15. 5 rows in set (0.00 sec) 

delete from tb_name where condition;  #從表中删除符合某種條件的資料

  1. eg: 
  2. mysql> delete from data where Age < 22;  #将年齡小于22的所有人删除 
  3. Query OK, 2 rows affected (0.00 sec) 
  4. mysql> select * from data;    
  5. +------+------+------+--------+---------+ 
  6. | ID   | Name | Age  | Gender | Course  | 
  7. +------+------+------+--------+---------+ 
  8. |    1 | aa   |   24 | Male   | math    |  
  9. |    4 | dd   |   22 | Male   | history |  
  10. |    5 | ee   |   25 | Female | Chinese |  
  11. +------+------+------+--------+---------+ 
  12. 3 rows in set (0.00 sec) 

查詢:

select 字段 from 表 [where condition] 

  1. mysql> select Name ,Age ,ID from data where Gender='Male'; 
  2.  #查找性别為男的姓名、年齡和ID号。 
  3. +------+------+------+ 
  4. | Name | Age  | ID   | 
  5. +------+------+------+ 
  6. | aa   |   24 |    1 |  
  7. | dd   |   22 |    4 |  
  8. +------+------+------+ 
  9. 2 rows in set (0.00 sec) 

對字段進行操作:

alter table tb_name drop 字段名稱;  #删除字段

  1. mysql> alter table data drop Age;    #删除年齡這個字段 
  2. Query OK, 3 rows affected (0.02 sec) 
  3. Records: 3  Duplicates: 0  Warnings: 0 
  4. mysql> select * from data; 
  5. +------+------+--------+---------+ 
  6. | ID   | Name | Gender | Course  | 
  7. +------+------+--------+---------+ 
  8. |    1 | aa   | Male   | math    |  
  9. |    4 | dd   | Male   | history |  
  10. |    5 | ee   | Female | Chinese |  
  11. +------+------+--------+---------+ 
  12. 3 rows in set (0.01 sec) 

alter table tb_name add 字段名 類型 [{first|after column_name}]; #添加字段

  1. mysql> alter table data add class int unsigned after ID;  
  2. #在ID 号之後添加一個CLASS 字段 
  3. Query OK, 3 rows affected (0.05 sec) 
  4. Records: 3  Duplicates: 0  Warnings: 0 
  5. mysql> select * from data; 
  6. +------+-------+------+--------+---------+ 
  7. | ID   | class | Name | Gender | Course  | 
  8. +------+-------+------+--------+---------+ 
  9. |    1 |  NULL | aa   | Male   | math    |  
  10. |    4 |  NULL | dd   | Male   | history |  
  11. |    5 |  NULL | ee   | Female | Chinese |  
  12. +------+-------+------+--------+---------+ 
  13. 3 rows in set (0.00 sec) 

alter table tb_name change old_name new_name datatype;  #更改字段名

alter table tb_name modify column_name datatype;    #更改一個字段的屬性

(可以按照上面的例子自己嘗試一下哦)

資料控制語言DCL:

grant  privileges on db_name to 'username'@host'identified by 'passwd';  #賦予某使用者什麼權限

  1. mysql> grant all on mydata.data to 'abc'@'172.16.%.%' identified by 'redhat';
  2. Query OK, 0 rows affected (0.00 sec) 
  3. mysql> flush privileges; 
  4. #将mydata庫中表data的所有權限授予172.16/24這個網段内的abc使用者,
  5. 并給使用者指定密碼為redhat 
  6. #讓建立使用者和授權立即生效:flush privileges; 

revoke privileges on db_name.tb_name to 'username'@'host';  #從使用者收回在資料庫對象上的權限

  1. mysql> revoke delete on mydata.data from 'abc'@'172.16.%.%';  
  2.  #從abc使用者上收回對資料庫delete的權限 
  3. Query OK, 0 rows affected (0.00 sec) 
  1. mysql> flush privileges; 

驗證效果,再打開一台主機(172.16.10.1),連接配接該資料庫,進行操作。

遠端連接配接有些指令選項:

-h:指定伺服器位址

-u:指定使用者名

-p:讓使用者輸入密碼

  1. [root@www ~]# mysql -h 172.16.9.1 -u abc -p; #以使用者abc的身份連接配接伺服器上的資料庫    
  2. Enter password:  
  3. Welcome to the MySQL monitor.  Commands end with ; or \g. 
  4. Your MySQL connection id is 12 
  5. Server version: 5.0.77 Source distribution 
  6. Type 'help;' or '\h' for help. Type '\c' to clear the buffer. 
  7. mysql> mysql> select * from data;  #可以查詢的哦!! 
  8. +------+-------+------+--------+---------+ 
  9. | ID   | class | Name | Gender | Course  | 
  10. +------+-------+------+--------+---------+ 
  11. |    1 |  NULL | aa   | Male   | math    |  
  12. |    4 |  NULL | dd   | Male   | history |  
  13. |    5 |  NULL | ee   | Female | Chinese |  
  14. +------+-------+------+--------+---------+ 
  15. 3 rows in set (0.00 sec) 
  16. mysql> delete from data where ID=1; 
  17. ERROR 1142 (42000): DELETE command denied to user 'abc'@'172.16.10.1' for table 'data' 
  18. #在這裡就會顯示不允許delete操作的提示了!! 

繼續閱讀