瞭解提供數據庫服務的軟件有哪些?
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條記錄,查看錶中的記錄