一、創建並導入數據庫
create database if not exists yiibaidb default charset utf8 collate utf8_general_ci; use yiibaidb; source /home/jxc/Downloads/yiibaidb.sql;
這里我們使用的是yiibaidb下載這個汽車零售商數據庫模型,yiibaidb數據庫由以下表組成
- customers: 存儲客戶的數據。
- products: 存儲汽車的數據
- productLines: 存儲產品類別數據。
- orders: 存儲客戶訂購的銷售訂單。
- orderDetails: 存儲每個銷售訂單的訂單產品數據項。
- payments: 存儲客戶訂單的付款數據信息。
- employees: 存儲所有員工信息以及組織結構,例如,直接上級
- offices: 存儲銷售處數據,類似於各個分公司。
表與表之間的關系見下圖:
在Linux下導出數據庫,可以使用mysqldump的shell命令,格式如下:
mysqldump -u 數據庫擁有者 -p 數據庫名 [ 表名 ] > 輸出文件名(最好用全路徑)
mysqldump -u root -p test Data > /home/jxc/Documents/Data.sql
二、select語句簡介
select語句可以從視圖或表中獲取數據,select語句的語法如下
SELECT column_1, column_2, ... FROM table_1 [INNER | LEFT |RIGHT] JOIN table_2 ON conditions WHERE conditions GROUP BY column_1 HAVING group_conditions ORDER BY column_1 LIMIT offset, length;
select語句由以下列表中所述的幾個子句組成:
- SELECT 之后是逗號分隔列或者星號,表示要返回的列
- FROM 指定要查詢的表或視圖
- JOIN 根據某些鏈接條件從其他表中獲取數據
- WHERE 過濾結果集中的行
- GROUP BY 把查詢結果按指定的列分成集合組,當一個聚合函數和一個GROUP BY子句一起使用時,聚合函數的范圍變成每組的所有記錄。
- HAVING 對GROUP BY產生的分組進行進一步的控制,用這個子句定義這些分組所必須滿足的條件
- ORDER BY 用於對查詢結果進行排序
- LIMIT 限制返回的行數
說明:當where、group by和having子句同時出現在一個查詢中時,SQL的執行順序如下:
- 執行where子句,從表中選擇行
- 由group by 對選取的行進行分組
- 執行聚合函數
- 執行having子句選取滿足條件的分組
例子:從employees表中獲取辦公室代碼為1的銷售代表員工,可以使用以下查詢:
select lastName,firstName,jobtitle from employees where jobtitle = 'Sales Rep' AND officeCode = '1';
還有一些有用的運算符可以子啊where子句中使用來形成復雜的條件,如:
- BETWEEN A NAD B: 選擇在給定范圍值內的值。
- LIKE: 匹配基於模式匹配的值,SQL提供了兩個通配符與LIKE一起使用:百分比符號(%)匹配任何字符的零個或多個字符,下划線(_)匹配任何單個字符一次。
- IN: 指定值是否匹配列表中的任何值。
IS NULL
: 檢查該值是否為NULL
。
三、INSERT語句簡介
SELECT語句允許將一行或多行插入到表中,其基本語法如下:
insert into table(column1,column2...) values ( vslue1,value2,...);
創建一個新的名為tasks的表來練習insert語句:
create database test; use test; create table if not exists tasks( task_id int(11) auto_incerment, subject varchar(45) default null, start_date date null, end_date date default null, description varchar(200) default null, primary key (task_id) )engine=InnoDB default carset=utf8;
如果要將數據插入到tasks表中,可以使用如下語句:
insert into tasks(task_id,subject,start_date,end_date,description) values(1,'Learn MySQL INSERT','2017-09-15','2017-10-01','Start learning...');
四、UPDATE 和 DELETE 語句簡介
update 可以用來跟新表中現有的數據,其基本語法如下:
update table_name set column_name1 = expr1, column_name2 = expr2, ... where condition
例如,我們要把tasks表中的第一條數據的description改為‘Description’:
use testdb update tasks set secription = 'Description' where task_id = 1
delete 語句可以從表中刪除數據,其基本語法如下:
delete from table_name where condition
五、數據庫的創建與刪除
1.創建數據庫使用 create database語句,語法如下:
create database [ if not exists ] database_name;
2.刪除數據庫使用 drop database 語句,語法如下:
drop database [ if exists ] database_name
3.顯示和使用數據庫:
show databases; use database_name;
六、表的創建與修改
1.使用 create table 語句來創建表,其基本語法如下:
create table [ if not exists ] table_name( column_list ) engine=table_type;
說明:
- 表名在一個數據庫中必須時唯一,不能有同名的表存在
- column_list 指定表的列,為表定義列,至少要包含列名和數據類型。其語法為:
column_name data_type[ size ] [ not null | null ] [default value ] [ auto_increment ]
- coloumn_name 指定列的名稱,列具有特定的數據類型和大小,這些都必須指定
- not null 或 null 指定該列是否接受null值
- default 用於指定列的默認值
- auto_increment 指定每當新行插入表中時,列值自動增加
- engine 指定表的存儲引擎,默認為InnoDB,也可以使用其他存儲引擎,如:InnoDB,MyISAM,HEAP,EXAMPLE,CSV,ARCHIVE,MERGE, FEDERATED或NDBCLUSTER
- 使用primary key ( col1,col2 ) 可以將某些列設置為主鍵
2.使用alter table 語句可以更改表的結構,該語句可以用來添加列、刪除列、更改列的數據結構、添加主鍵、重命名表等。基本語法格式如下:
altre table table_name action
action表示要對標進行的操作,可以是命令:
語句 | 作用 |
---|---|
change column 列名 數據類型或其他屬性修改 | 修改指定列名的相關屬性 |
add column 列名 相關屬性 | 添加新的列 |
rename to new_name | 重命名表 |