1、連接、登錄MySQL
搭建好環境,啟動MYSQL服務:net start mysql
然后登錄MySQL數據庫
shell>mysql -hhost?-uuser?-p
Enter password:********
2、創建數據庫
mysql>CREATE DATABASE 數據庫名;
mysql>USE 數據庫名
可以在調用mysql時,通過命令行選擇數據庫,只需要在提供連接參數之后指定數據庫名稱
shell>mysql -h?hos t-u?user?-p 數據庫名
Enter password:********
3、創建表
3.1 查看現有數據庫列表
mysql>SHOW TABLES;
3.2 創建一個寵物數據表(名字、主人、種類,性別、出生和死亡日期)
mysql>CREATE TABLE pet (
name VARCHAR(20),?
owner VARCHAR(20),
species VARCHAR(20),?
sex CHAR(1),?
birth DATE, death DATE
);
查看表結構是否正確(忘記列名也可用):DESCRIBE pet;
3.3 插入數據:
INSERT INTO pet?VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
注意,這里字符串和日期值均為引號擴起來的字符串。另外,可以直接用INSERT語句插入NULL代表不存在的值。
3.41 ?SELECT語句:從數據表中檢索信息,語句的一般格式是:?
SELECTwhat_to_select
FROMwhich_table
WHEREconditions_to_satisfy;
實例:SELECT * FROM pet;
3.42 添加WHERE條件實例:
SELECT * FROM pet WHERE name = 'Bowser';
SELECT * FROM pet WHERE birth >'1998-1-1';
SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';
SELECT * FROM pet WHERE species = 'snake' OR species = 'bird';
注意:AND和OR可以混用,但AND比OR具有更高的優先級。如果你使用兩個操作符,使用圓括號指明如何對條件進行分組是一個好主意,如:
SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm')?OR (species = 'dog' AND sex = 'f');
3.43 選擇指定列:
SELECT name, birth FROM pet;
SELECT owner FROM pet;
3.44 增加關鍵字DISTINCT檢索出每個唯一的輸出記錄:
SELECT DISTINCT owner FROM pet;
3.45 使用一個WHERE子句結合行選擇與列選擇。例如,要想查詢狗和貓的出生日期
SELECT name, species, birth FROM pet?WHERE species = 'dog' OR species = 'cat';
3.46?分類行
按動物生日日期排序:
SELECT name, birth FROM pet ORDER BY birth;
注意:默認排序是升序,最小的值在第一。要想以降序排序,在你正在排序的列名上增加DESC(降序 )關鍵字,如:
SELECT name, birth FROM pet ORDER BY birth DESC;
3.47 可以對多個列進行排序,并且可以按不同的方向對不同的列進行排序。例如,按升序對動物的種類進行排序,然后按降序根據生日對各動物種類進行排序(最年輕的動物在最前面)
SELECT name, species, birth FROM pet?ORDER BY species, birth DESC;
注意 : DESC關鍵字僅適用于在它前面的列名(birth);不影響species列的排序順序。
3.48 模式匹配
SQL模式匹配允許你使用“_”匹配任何單個字符,而“%”匹配任意數目字符(包括零字符)。如要想找出以“b”開頭的名字:
SELECT * FROM pet WHERE name LIKE 'b%';
要想找出以“fy”結尾的名字:
SELECT * FROM pet WHERE name LIKE '%fy';
要想找出包含“w”的名字:
SELECT * FROM pet WHERE name LIKE '%w%';
要想找出正好包含5個字符的名字,使用“_”模式字符:
SELECT * FROM pet WHERE name LIKE '_____';
3.49 計數行
COUNT(*)函數計算行數,所以計算動物數目的查詢應為:
SELECT COUNT(*) FROM pet;
如果你想要知道每個主人有多少寵物,可使用GROUP BY對每個owner的所有記錄分組,你可以使用COUNT( )函數:,
SELECT owner, COUNT(*) FROM pet GROUP BY owner;
每種動物的數量:
SELECT species, COUNT(*) FROM pet GROUP BY species;
每種性別的動物數量:
SELECT sex, COUNT(*) FROM pet GROUP BY sex;
按種類和性別組合的動物數量:
SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex;
若使用COUNT( ),你不必檢索整個表。例如,前面的查詢,當只對狗和貓進行時,應為:
mysql>SELECT species, sex, COUNT(*) FROM pet
->WHERE species = 'dog' OR species = 'cat'
->GROUP BY species, sex;
如果你僅需要知道已知性別的按性別的動物數目:
mysql>SELECT species, sex, COUNT(*) FROM pet
->WHERE sex IS NOT NULL
->GROUP BY species, sex;
3.410 使用1個以上的表
先創個寵物事件表(寵物名字、發生日期、描述事件的字段、事件類型字段)
CREATE TABLE event (name VARCHAR(20), date DATE,
->type VARCHAR(15), remark VARCHAR(255));
然后從EVENT表中,查找到寶寶出生日期,找出每只寵物的年齡。
mysql>SELECT pet.name,
->(YEAR(date)-YEAR(birth)) - (RIGHT(date,5)
->remark
->FROM pet, event
->WHERE pet.name = event.name AND event.type = 'litter';
關于該查詢要注意的幾件事情:
FROM子句列出兩個表,因為查詢需要從兩個表提取信息。
當從多個表組合(聯結)信息時,你需要指定一個表中的記錄怎樣能匹配其它表的記錄。這很簡單,因為它們都有一個name列。查詢使用WHERE子句基于name值來匹配2個表中的記錄。
因為name列出現在兩個表中,當引用列時,你一定要指定哪個表。把表名附在列名前即可以實現。
你不必有2個不同的表來進行聯結。如果你想要將一個表的記錄與同一個表的其它記錄進行比較,可以將一個表聯結到自身。例如,為了在你的寵物之中繁殖配偶,你可以用pet聯結自身來進行相似種類的雄雌配對:
mysql>SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species
->FROM pet AS p1, pet AS p2
->WHERE p1.species = p2.species AND p1.sex = 'f' AND p2.sex = 'm';
在這個查詢中,我們為表名指定別名以便能引用列并且使得每一個列引用與哪個表實例相關聯更直觀
3.5. 獲得數據庫和表的信息
3.51 列出由服務器管理的數據庫:
mysql>SELECT DATABASE();
3.52 列出當前的數據庫的數據表:
mysql>SHOW TABLES;
3.53 查看表結構
mysql>DESCRIBE pet;
注意:Field顯示列名字,Type是列的數據類型,Null表示列是否能包含NULL值,Key顯示列是否被索引而Default指定列的默認值。
3.54 ?在批處理模式下使用mysql
涉及腳本,后續補充
3.6 常用查詢例子
先創建一個例子表
CREATE TABLE shop (
->article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,
->dealer? CHAR(20)???????????????? DEFAULT ''???? NOT NULL,
->price?? DOUBLE(16,2)???????????? DEFAULT '0.00' NOT NULL,
->PRIMARY KEY(article, dealer));
mysql>INSERT INTO shop VALUES
->(1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),
->(3,'C',1.69),(3,'D',1.25),(4,'D',19.95);
3.6.1. 列的最大值
“最大的物品號是什么?”
SELECT MAX(article) AS article FROM shop;
3.6.2. 擁有某個列的最大值的行
任務:找出最貴物品的編號、銷售商和價格。
這很容易用一個子查詢做到:
SELECT article, dealer, price
FROM?? shop
WHERE? price=(SELECT MAX(price) FROM shop);
另一個解決方案是按價格降序排序所有行并用MySQL特定LIMIT子句只得到第一行:
SELECT article, dealer, price
FROM shop
ORDER BY price DESC
LIMIT 1;
注:如果有多項最貴的物品(例如每個的價格為19.95),LIMIT解決方案僅僅顯示其中一個!
3.6.3. 列的最大值:按組
任務:每項物品的的最高價格是多少?
SELECT article, MAX(price) AS price
FROM? shop
GROUP BY article
任務:對每項物品,找出最貴價格的物品的經銷商。
可以用這樣一個子查詢解決該問題:
SELECT article, dealer, price
FROM? shop s1
WHERE? price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article);
3.6.5. 使用用戶變量
可以清空MySQL用戶變量以記錄結果,不必將它們保存到客戶端的臨時變量中。(
例如,要找出價格最高或最低的物品的,其方法是:
mysql>SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop;mysql>SELECT * FROM shop WHERE price=@min_price OR price=@max_price;
3.6.6. 使用外鍵
未完待續
3.5 UPDATE更新數據
mysql>UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';