MySql數據庫入門講解
一、數據庫相關的概念
Dbms: database manager system 數據庫管理系統,即數據庫的服務程序。 通常說的安裝數據庫就是安裝dbms。
只有安裝數據庫的數據庫系統才能真正的提供服務,所以安裝數據庫程序時,一般在安裝管理服務程序時,會默認安裝一個數據庫實例。如SQL Server默認安裝了相關的plus、northwind。而Mysql 默認安裝test、mysql、information等,Oracle會安裝時提示建議安裝一個orcl數據庫(當然名稱也可以改)。以後在開發應用時有需求要新建數據庫時,可以通過相關的客戶端軟件,連接服務程序創建相關的數據庫實例。
www.2cto.com
具體關系如圖:
二、MySQL數據庫的安裝
下載地址:http://www.mysql.com/downloads/
MySql的安裝其實很簡單,需要注意的是在安裝進行到選擇默認字符編碼集時,請選擇utf8。
三、SQL簡介
強烈建議在學習SQL時,前期使用命令來學習不要用可視化的工具(包括創建修改表數據庫等操作),這裡用MySQL作為學習數據庫。
Structured Query Language:SQL的縮寫,是結構化查詢語言。
1. 進入數據庫 mysql [-h 主機名或ip] -u[ ]用戶名 -p[密碼]
在window命令行中,輸入mysql -h 192.168.1.106 -u chen -p 回車換行後,會有提示要求輸入密碼即可進入。注意-h 若是本機地址時,也可以不用輸入-h的。
2. 查看dbms管理著幾個數據庫,目前有幾個數據庫 show databases;
四、SQL 語句的分類
1. DDL:data definition language 數據庫定義語言
適用對象:數據庫、表結構。 關鍵字:CREATE ALTER DROP
2. DML:data manipulate language 數據操作語言
適用對象:表中的記錄。 關鍵字:INSERT UPDATE DELETE
3. DQL:data query language 數據查詢語言
適用對象:表記錄等等。 關鍵字:SELECT
www.2cto.com
DDL舉例如下:
0> 創建數據庫:create database adtest;
1> 創建表: (先要用use test; 數據庫哦)
create table if not exists employee(
Id int primary key, Name varchar(100) unique not null,
Gender varchar(5), Birthday date, salary float
)
2> 查看表結構: desc employee;
3> 查看有哪些表:show tables;
4> 增加一列圖片列 alter table employee add image blob;
5> 修改name列長度 alter table employ modify name varchar(40);
6> 刪除圖片列 alter table employee drop image;
7> 修改表名為user rename table employee to user;
8> 修改表字符編碼utf8 alter table employee character set utf8;
9> 列名name改成username
alter table employee change name username varchar(40);
10> 刪除表employee drop table employee;
www.2cto.com
DML舉例如下:
1> 插入一條員工信息
Insert into employ(id,name,gender,birthday,salary)
values(‘1’,’xiaochen’,’2012-10-10’,12203.6);
2> 客戶端查看數據庫的各種編碼
Show variables like ‘%char%’;
有以下:
character_set_client:通知服務器客戶端使用的碼表
character_set_connection:鏈接數據庫所使用的碼表
character_set_database:e是數據庫服務器中某個庫使用的字符集設定,如果建庫時沒有指明,將使用服務器安裝時指定的字符集設置。
character_set_results:是數據庫給客戶端返回時使用的字符集設定,如果沒有指明,使用服務器默認的字符集。
character_set_server:是服務器安裝時指定的默認字符集設定。
character_set_system:是數據庫系統使用的字符集設定
注意:若在控制台中拋入中文,則必須輸入set character_set_client=gbk;為了顯示中文要輸入set character_set_results=gbk;(控制台默認用本地gbk編碼的)。這種set方式只對當前的命令控制台有效。
3> 更新操作 update tablename set columnname = value where ...或
Update t1(別名) set t1.columnname = value from tablename t1 where ...
4. 刪除操作 delete from tablename where ....
DQL舉例:
1> 查詢不同的英文成績 同一英文成績只顯示一行
Select distinct english from student
2> 查詢英文成績大於90分,學號是1,3,8,9號學生的成績
Select id, name,english,chinese,math from student where english>90 and id in (1,3,8,9);
3>對數學成績排序後輸出。 Asc 升序、Desc 降序
SELECT name,math FROM student ORDER BY math ASC;
4> 查詢購買了幾類商品,並且每類總價大於100的商品 group by ... Having...
SELECT id,product,SUM(price) FROM orders GROUP BY product HAVING SUM(price)>100;
特別注意:在SQL Server與Oracle使用group by 中,select中的字符必須是group by中出現的或使用了聚合函數如sum(ItmNum)或Agv、Min等。而MySql沒有這種要求,所以上面的select id也能出來。
4. 常用mysql函數
Count(*) 計數個數 sum(math) 數學成績匯總 avg(chinese)中文平均成績
Max(chinese)中文最高成績 Min(chinese)中文最低成績
5. DCL: data control language 數據控制語言
適用對象:相關的dba操作 如grant等操作
五、數據庫約束
1. 主外鍵約束 主鍵約束primary key 外鍵 foreign key
業務主鍵 與業務相關 、 邏輯主鍵 與業務無關。 推薦有邏輯主鍵。
2. 主鍵自動自增 MySql 主鍵要求int且用auto_increment自增。
3. 定義唯一約束 unique
4. 定義非空約束 not null
六、表與表之間的關系
1. 一對多
CREATE TABLE department(
id int PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) UNIQUE NOT NULL
);
CREATE TABLE employee(
id int PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100) NOT NULL,
salary FLOAT(8,2),dept_id int,
CONSTRAINT dept_id_fk FOREIGN KEY(dept_id) REFERENCES department(id)
);
2. 多對多關系
CREATE TABLE teacher(
id int PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL,
salary FLOAT(8,2)
);
CREATE TABLE students(
id int PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL,
grade VARCHAR(10)
);
CREATE TABLE teacher_student(
t_id int, s_id int, PRIMARY KEY(t_id,s_id),
CONSTRAINT t_id_fk FOREIGN KEY(t_id) REFERENCES teacher(id),
CONSTRAINT s_id_fk FOREIGN KEY(s_id) REFERENCES students(id)
);
www.2cto.com
3. 一對一關系
CREATE TABLE book(
id int PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL,
price FLOAT(8,2)
);
CREATE TABLE cartitem(
id int PRIMARY KEY , num int, price FLOAT(8,2),
CONSTRAINT b_id_fk FOREIGN KEY(id) REFERENCES book(id)
);