(進入mysql\bin目錄下)注意在mysql控制台操作每句後要加分號 ;
初級篇
1、 進入資料庫 mysql -u 使用者名稱 -p 密碼
2、 匯出資料庫 mysqldump -u 使用者名稱 -p 密碼 資料庫名(表名)> 路徑 備份.sql
3、 匯入資料庫 mysql -u 使用者名稱 -p 密碼 資料庫名< 路徑 備份.sql
或者進入mysql,使用source 路徑 備份 此方法可以單獨匯入表
4、 顯示所有資料庫 show databases;
5、 使用資料庫 use 資料庫名;
6、 顯示所有表 show tables;
7、 建立資料庫 create database 資料庫名;
8、 建立表 create table 表名(變數名 變數類型(大小)約束條件,變數名 變數類型(變數大小)約束條件,primary key(主鍵) );
9、 描述表 describe 表名;
10、向表中輸入資料 insert into 表名 values( );
11、select 列 from 表 order by 列 desc/asc
select count(*) from 表名 統計表中記錄總數
descending 降序排列的意思
ascending 升序排列
12、刪除表內容
delete from 表名
truncate table 表名
13、更新表內容
update table 表名 set=' ' where 條件
14、改變表結構
alter table 表名 add id int(10) 【列名 資料類型】 增加列
alter table 表名 drop id 【列名】 刪除列
alter table 表名 modify id int(6); 修改列
15、改變表名
rename table 表名1 to 表名2
16、查看資料庫、表建立資訊
show create database 資料庫名
show create table 表名
17、過濾表中重複的資訊
select distinct 列名 from 表名
進階篇
1、將選出內容建立表
create table 表名2(可定義列名以及類型) as select 列名,列名 from 表名2;
將選出結果插入某表
insert 表1 select 列名1,列名2,… From 表 2
2、select語句
select [all/distinct] 列名 from 表名 [where 搜尋條件] [group by 組運算式] [having 條件][order by 列名][ASC|DESC]
選擇指定前幾條
select * from table(表名) limit m , n m為第幾行開始,n為取幾條
選擇在指定範圍內記錄
select * from table(表名) where 列名 between value1 and value2
選擇在指定內容的記錄
select * from table(表名) where in / not in 列(value1,value2 …)
選擇指定類似內容
select * from table(表名) where 列名 like / not like 'string '
萬用字元 |
含義 |
% |
任意多個字元 |
_ |
單個字元 |
[ ] |
指定範圍內的單個字元 |
[ ^ ] |
不在指定範圍內的單個字元 |
選擇為空白的記錄
select * from table(表名) where 列名 NULL/ not NULL
選擇結果統計
select 列名1 , count(列名2) from table(表名) group by 列名2 having 條件
函數名 |
功能 |
count |
求組中項數,返回整數 |
sum |
求和,返回運算式中所有值的和 |
avg |
求平均值,返回運算式中所有值的平均值 |
max |
求最大值,返回運算式中所有值的最大值 |
min |
求最小值,返回運算式中所有值的最小值 |
abs |
求絕對值,返回數值運算式的絕對值 |
ascii |
求ASCII碼,返回字元型資料的ASCII碼 |
rand |
產生隨機數,返回一個位於0-1之間的隨機數 |
| student | CREATE
TABLE student(
studno int(5) NOT NULL auto_increment,
studname char(10) NOT NULL,
studcourse char(50) NOT NULL,
studscore float default '0',
PRIMARY KEY
('studno')
) ENGINE=InnoDB
AUTO_INCREMENT=9 DEFAULT CHARSET=gbk |
mysql> select * from student;
+--------+----------+------------+-----------+-----+
| studno | studname | studcourse | studscore | sex |
+--------+----------+------------+-----------+-----+
| 1 | 祖如輝 | 資料庫原理 | 90 | 男 |
| 2 | 馬斯洛 | 資料庫原理 | 80 | 男 |
| 3 | 莉莉 | 資料庫原理 | 94 | 女 |
| 4 | 加紅基 | 資料庫原理 | 99 | 男 |
| 5 | 馬三立 | 資料庫原理 | 69 | 男 |
| 6 | 郭冬臨 | 資料庫原理 | 65 | 男 |
| 7 | 想加你 | 資料庫原理 | 55 | 女 |
| 8 | 華正白 | 資料庫原理 | 95 | 男 |
| 9 | 黎明 | 資料庫原理 | 49 | 男 |
| 10 | 徐曉娟 | 資料庫原理 | 79 | 女 |
+--------+----------+------------+-----------+-----+
10 rows in set (0.00 sec)
mysql> select * from class;
+--------+------------------+-----------+
| studno | class |
gradecode |
+--------+------------------+-----------+
| 1 | 電腦網路工程 |
3 |
| 2 | 電腦網路工程 |
1 |
| 3 | 電腦網路工程 | 1 |
| 4 | 電腦科學與技術 | 3 |
| 5 | 電腦科學與技術 | 3 |
| 6 | 電腦科學與技術 | 1 |
| 7 | 電腦科學與技術 | 4 |
| 8 | 電腦科學與技術 | 2 |
| 9 | 電腦科學與技術 | 2 |
| 10 | 電腦軟體工程 |
2 |
+--------+------------------+-----------+
10 rows in set (0.00 sec)
選出
資料庫原理及格的女學生資訊(包含學號,姓名,課程,成績)。
mysql> Select * from student having (select 成績 from studscore student where sex='女' )>60;
建立表視圖
create view 視圖名 as select 列名 from 表名
建立索引
create unique index 索引列 on 表名(列名)
內聯結也叫自然聯結,它是組合兩個表的常用方法。內聯結將兩個表中的列進行比較,將兩個表中滿足聯結條件的行組合起來,作為結果。內聯結有兩種形式的文法: (註:多個表也可)
文法一:
SELECT 列名 FROM 表1 [INNER] JOIN 表2 ON 表1.列 = 表2.列
文法二:
SELECT 列名FROM 表1,表2
WHERE 表1.列 =
表2.列
在內聯結中,只有在兩個表中匹配的行才能在結果集中出現。而在外聯結中可以只限制一個表,而對另外一個表不加限制(即不加限制的表的所有行都出現在結果集中)。
外聯結只能串連兩個表
外聯結分為左外聯結、右外聯結。
文法如下:SELECT 列名 FROM 表1 <LEFT|RIGHT
> [OUTER] JOIN 表2 ON 表1.列 = 表2.列
聯結操作不僅可以在不同的表上進行,而且可以在同一張表內進行自身聯結,即將同一個表的不同行聯結起來。自我聯結可以看作一張表的兩個副本之間的聯結。在自我聯結中,必須為表指定兩個別名,使之在邏輯上成為兩張表。
是一種特殊類型的內聯結
l
為表名指定別名的方式:
a. 在表名後面直接給出別名:表名 別名
b. 在表名和別名之間添加AS關鍵字:表名 AS 別名
l
MySQL的表別名中不能有特殊字元(如空格)
l
除了在內聯結時必須使用表別名之外,表別名也可用在其他的SQL語句中,以簡化SQL語句,提高語句的可讀性。
l
交叉聯結也叫非限制聯結,它將兩個表不加任何約束的組合起來。在數學上,就是兩個表的笛卡爾積。交叉聯結後得到的行數是兩個被聯結表的行數的乘積。
l 文法如下:SELECT 列名 FROM 表1
CROSS JOIN表2
或SELECT 列名 FROM 表1 ,表2