我的Linux生涯之Mysql:Day01[Mysql基本使用]

瞭解提供數據庫服務的軟件有哪些?
Oracle  access   vf    sql-server   
mysql   DB2   Postgresql    Sybase

商業:Oracle DB2 sql-Server
開源:mysql Postgresql
跨平臺:  Oracle DB2 mysql postgresql
跨平臺&開源:mysql

數據庫服務應用在哪裏?
網站 BBS 證券公司 銀行等等

Mysql的特點
優點:
功能強大、速度快、性能優越、穩定性強、使用簡單、管理方便。
Mysql是一個開放源碼的小型關係型數據庫
DBMS  (data base manager system)
跨平臺、支持AIX/FreeBSD/HP-UX/LINUX/WINDOWS等
使用C/C++編寫,支持多種編譯器,保證源代碼可移植性。
爲多種編程語言提供了API,支持Python、Java、Perl、PHP等腳本語言
非關係型數據庫:Nosql

應用環境
LNMP/LAMP

搭建數據庫服務器
rpm & 源碼安裝


[root@localhost Server]# rpm -ivh mysql-server-5.0.95-3.el5.x86_64.rpm mysql-devel-5.0.95-3.el5. mysql-5.0.95-3.el5.x86_64.rpm 
[root@localhost Server]# rpm -qa |grep mysql
mysql-5.0.95-3.el5
mysql-server-5.0.95-3.el5
mysql-devel-5.0.95-3.el5  

#啓動之後
進程名 mysqld
進程名的所有者和組爲mysql
port 3306
協議  tcp
主配置文件 /etc/ym.conf
#所有者和所屬組爲mysql
#如果是源碼安裝的話要手動創建mysql用戶和組,及更改配置文件權限。
PS:
  源碼安裝的話要使用cmask構建安裝架構,也可以堅持使用之前的configure方式,通過源碼包中的BUID/auturun.sh文件生成configure文件。

檢測mysqld端口

[root@localhost Server]# netstat -atlunp |grep :3306
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6832/mysqld   

 

登陸服務器

[root@localhost ~]# mysql --help                    
[root@localhost ~]# mysql -h localhost -u root
#mysql -h [host] -u [username] -p [password]  
#再使用mysql就等於上次執行的mysql命令                                         
Welcome to the MySQL monitor.  Commands end with ; or \g.                     
Your MySQL connection id is 5                                                 
....                                                                          
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> 

               
退出可以使用exit或Crontrol+C。
連接數據庫服務----選擇一個庫----選擇一個表----把數據插入到表裏

//庫----表----字段
sql語句,SQL語句之後要求以";"、"\g"或"\G"結尾。
#結構化查詢
查詢當前用戶登錄

mysql> select user()
    -> ;
+----------------+
| user()         |
+----------------+
| root@localhost | 
+----------------+
1 row in set (0.00 sec)  

 

查看當前所在的庫

mysql> select database()
    -> ;       //因爲沒有加";"所以系統認爲命令沒有結束。
+------------+
| database() |
+------------+
| NULL       | 
+------------+
1 row in set (0.00 sec)  

 

查看庫

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema | 
| mysql              | 
| test               | 
+--------------------+
3 rows in set (0.00 sec)  

 

選擇(打開)一個庫
Use mysql;  //進入mysql庫
查看當前庫裏的表

mysql> show tables;
Empty set (0.00 sec)
#表示沒有數據。  

默認的三個庫(首次啓動mysql時自行創建的庫)
information_schema //虛擬庫,不存在的。它裏面的數據是放在物理內存裏。
#存放當前已有的庫和表的信息。
#這個庫可以不加分號。
mysql   //授權庫,授權信息。某用戶對某庫/某表有什麼權限。允許某對象連接數據庫的權限,默認只能管理員從服務登陸。
test   //公共庫,默認是空的。只要登陸到庫就可以對該庫有任何操作。
重啓mysqld之後,如果沒有這三個庫,就會重新初始化庫,重新創建。
但是如果這三個庫裏的表沒了,那麼重啓也不會創建這些表,並重啓失敗。
/var/lib/mysql/mysql.sock //mysqld啓動時纔會這個文件。
那麼,這時候就刪除這個mysql庫這個對應的文件夾,就會重新初始化。

服務器上的庫是以文件夾的方式存放在數據庫目錄下。文件夾名與數據庫同名,表是以文件的形式存放在自己所在庫對應的文件夾裏,
文件名與表名相同。(默認情況下mysql會把一個表的數據用3個文件來保存)
數據庫目錄:
/var/lib/mysql
#比如說我有個mysql庫,這個庫裏有一個hello表
則/var/lib/mysql/下就會有一個mysql目錄,這個目錄下有一個hello文件。

[root@localhost ~]# ls /var/lib/mysql/ -l |grep hello
drwx------ 2 mysql mysql     4096 12-30 17:18 hello  


 

Show tables;      //顯示當前所在庫的表
select  * from db;  加上\G是以行模式顯示
#查看db表中的所有字段(記錄)

數據庫管理
SQL命令不區別分大小寫

創建數據庫
show databases;  //查看庫
create database  databasename; //創建一個庫
use  databasename;  //切換庫
#創建一個庫,/var/lib/mysql下會生成一個 "databasename"這個文件夾,主是mysql,組也是mysql,因爲它是由mysql進程創建的。
在/var/lib/mysql下,只要mysql用戶有相應的權限,mysql就可以在數據庫中查看/寫入。
所以,也可以直接mkdir一個目錄來創建一個數據庫
drop  database  databasename; //刪除一個庫,這個庫內的表也會被刪除。
#所以,在刪除庫之前最好先備份下這個庫。
數據庫名命令規則:

數據庫名具有唯一性;
區別大小寫;
不支持純數字;
SQL命令不能命名數據庫;
不支持特殊字符;
#創建數據庫時要有標識性,如:我要給APACHE創建一個庫,那麼就以WEB命名。


表管理
create table 數據庫.表名(
<字段名    字段類型>[(寬度)    約束條件,]
#<>內是必須要寫的,[]內如果不寫則使用默認格式。
字段名    字段類型(寬度)    約束條件,
字段名    字段類型(寬度)    約束條件 //最後一個字段的","就不用寫。
#對於字段類型,如要進行數據統計,則都爲數值。
每一列要有字段名

Mysql數據類型

1、數值類型 (如:體重、年齡、身高、工資等)
   整數型
         小整數   大整數   極大整數
   浮點型(帶小數點的數字)
   單精度 float(n,m)  //n表示數字位數個數,m小數位個數
    float(5,2)  000.00
          float(8,2)  000000.00
   雙精度 double(n,m) //n表示數字位數個數,m小數位個數
不執行\c
desc   table_name;  //查看錶結構
desc   mysql.user;  //查看mysql庫下的user表結構
向表內插入記錄
insert into 數據庫名.表名(字段名1,字段2,字段名n)values
也可以這樣寫:
insert into 數據庫名.表名(字段名)
values
(字段)
#插入一條,這時候就以;結尾
多條就以“,”分開
#小數位則以四捨五入。
#超出類型的最小值則保存該類型的最小值,最大值則存最大值

unsigned 無符號的默認寬度爲3
mysql> create table tl(level tinyint unsigned);
標識該字段爲無符號的。 
2、字符串類型(名字  家庭地址)
   定長  char 255字節
   變長  varchar  0~65535字節

create  table studb.tc(
   name char(3),
   age  int(3)
);


name1 char(3)
//存的值只能是3個字符,少於3個則以空格補齊3個字符
name2 varchar(3)
//存的值也是隻能存3個字符,不夠3個字符時,則存幾個字符,開闢幾個字符的空間。但是會使用一部分來檢測字符位數,佔用系統資源。

insert into t3
values
('name',20);//新建  

insert into t3(name) values
數值類型的寬度是顯示寬度。
指定寬度是爲了節省內存。
int不指定寬度爲11
3、日期時間類型(生日 出生年份 註冊時間)
   年   日期    小時   日期時間
  year  date    time   datetime/timestamp
  year 年 YYYY
     佔用1個字節
     範圍 1901~2155
  date 日期
     佔用4個字節
     範圍 0001-01-01~9999012-31
  time 時間
     範圍 0001-01-01~9999-12-31
  datetime 日期時間
     佔用8個字節
     範圍 1000-01-01 00:00:00
          9999-12-31 00:00:00
  timestamp  日期時間
     佔用4個字節
     範圍 1970-01-01 00:00:00
          2073-12-31 00:00:00
時間涵數
  now()   
     獲取開始執行函數時和系統時間
  sysdate()   
     執行時動態獲得系統時間
  sleep(N)
     休眠N秒
  curtime()
      獲取系統當前時間
  curdate()
      獲取系統當前日期
  month()
 獲取指定日間中的月份
  date()
 獲取指定日期中的時間
  year()
 獲取指定日期中的年份
 給該字段賦值時,兩位數值的話,則爲1~69----20xx,
      70~99----19xx。
      0則爲0000,錯誤。
#只讀取與類型匹配的值

mysql> create table t7(
    -> name varchar(10),
    -> starday year,
    -> workday date,
    -> timework time,
    -> meetting datetime
    -> );  

 


insert into t7 values("jim",now(),now(),now(),now());

inter into t7
values
("tom",1987,19901009,093000,20130110093000);
#按指定格式顯示加“”
插入的記錄要與格式符合。

cretae table t8(
time1 datetime,
time2 datestamp
);  

 

datestamp 
當不給該字段賦值時,則使用當前系統時間。

只查看某字段
select name,timework, from t7;

4、枚舉類型 (字段的值只能在列舉的範圍內選擇)
(性別 愛好)
#字段的值,在例舉的值內選
   單選(在列舉範圍內只能選一個)
   enum("值1","值2","值n")
   多選(在列舉範圍內選擇多個)
   set("值1","值2","值n")
//例:在studb數據庫裏創建名爲stu_info表,保存學生的年齡。

create table t8(
name varchar(10),
age tinyint(2) unsigned
sex enum('boy','gril')
linkes set('book','music','film','football')
); 

 

#linke"
#選項值要加""
#不在字段範圍內不會保存該值。
#同一字段內,在範圍內及不在範圍內排除不在範圍內的值
單選時,可以使用列表排列的順序的值來選擇值。
多選時,使用列表排列的順序選擇的值是不固定的。

desc t9;
...
...
null
not noll //不允許爲空
default
null  //不給該字段賦值時,使用這個指定的值,表示爲空,不區分大小寫。
#只有"null"/"NULL"才被認爲是空值。

根據所需值,來設定類型。
插入的值要和類型匹配 

 

//插入3條記錄,查看錶中的記錄

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章