MySql基礎(chǔ)(二)

文章摘要:
1、級(jí)聯(lián)查詢、聯(lián)表查詢
2、批處理
3、用戶變量在查詢中的應(yīng)用
4、AUTO_INCREMENT及其注意事項(xiàng)


1、級(jí)聯(lián)、聯(lián)表查詢

mysql> select pet1.主人,pet1.名字,pet1.性別,pet2.主人,pet2.名字,pet2.性別,pet1.種類
    -> from 寵物 as pet1,寵物 as pet2
    -> where pet1.種類 = pet2.種類 AND pet1.性別 = 'f' AND pet2.性別 = 'm';
+--------+--------+--------+-----------+--------+--------+--------+
| 主人   | 名字   | 性別   | 主人      | 名字   | 性別   | 種類   |
+--------+--------+--------+-----------+--------+--------+--------+
| Gwen   | Slim   | f      | 高大胖    | 旺財(cái)   | m      | cat    |
| Gwen   | Chirpy | f      | Harold    | Fang   | m      | bird   |
+--------+--------+--------+-----------+--------+--------+--------+
2 rows in set (0.00 sec)

3、批處理

3.1、批處理就像如下命令,將一系列的sql語(yǔ)句,封裝在字符串“”內(nèi)。

mysql> mysql -uroot -p -e "select User,Host from mysql.user;"
Enter password: 
+-----------+-----------+
| User      | Host      |
+-----------+-----------+
| mysql.sys | localhost |
| root      | localhost |
+-----------+-----------+

3.2、將批處理sql語(yǔ)句封裝在txt文件內(nèi),執(zhí)行批處理文件。-t 格式化輸出 -v顯示執(zhí)行的sql語(yǔ)句。

mysql> mysql -uroot -p </Users/ifei/my/Android那些事兒/寵物批處理.txt -t -v
Enter password: 
--------------
show databases
--------------

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
--------------
select pet.名字,pet_event.事件類型,pet_event.評(píng)論  from test.寵物 as pet,test.寵物日志 as pet_event  where pet.id = pet_event.事件id AND pet.名字 = pet_event.名字
--------------

+--------+--------------+-----------------------------------+
| 名字   | 事件類型     | 評(píng)論                              |
+--------+--------------+-----------------------------------+
| 大虎   | 生崽         | 5個(gè)小狗,4公1母                   |
| 老笨   | 治療         | 打狂犬疫苗                        |
| Fang   | 生日         | 吃了頓大餐:廈門小黑蟲(chóng)            |
| Chirpy | 鳥(niǎo)籠         | 換了新鳥(niǎo)籠                        |
| Buffy  | 生日         | 吃了頓大餐:深圳小黑蟲(chóng)            |
+--------+--------------+-----------------------------------+

3.3、進(jìn)入到mysql環(huán)境中,使用source或者“.”來(lái)執(zhí)行。

mysql> source /Users/ifei/寵物批處理.txt;
批處理文件內(nèi)容:
select User,Host from mysql.user;
select pet.名字,pet_event.事件類型,pet_event.評(píng)論  from test.寵物 as pet,test.寵物日志 as pet_event  where pet.id = pet_event.事件id AND pet.名字 = pet_event.名字;

二、常用查詢案例

1、創(chuàng)建查詢案例數(shù)據(jù)庫(kù)

create table shop(
id int(4) unsigned zerofill default 0000 not null,
item char(20) default ' ',
price double(16,2) default '0.00' not null,
primary key(id,item)
);

insert into shop values
(1,'面包',2),(2,'泡面',5),(2,'掛面',8.25),(5,'雪糕',6),
(8,'蒸包',9),(9,'海鮮粥',99.99);
1、查詢最大的類別號(hào)。
mysql> select max(id) as 類別 from shop;
+--------+
| 類別   |
+--------+
|      9 |
+--------+
1 row in set (0.00 sec)

2、找出最貴的商品詳情

mysql> select * from shop where price = (select max(price) as 類別 from shop);

等同于

mysql> select * from shop order by price desc limit 1;
+------+-----------+-------+
| id   | item      | price |
+------+-----------+-------+
| 0009 | 海鮮粥    | 99.99 |
+------+-----------+-------+
1 row in set (0.00 sec)

3、用戶變量在查詢中的使用

mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop;
+------------------------+------------------------+
| @min_price:=MIN(price) | @max_price:=MAX(price) |
+------------------------+------------------------+
|                   2.00 |                  99.99 |
+------------------------+------------------------+
1 row in set (0.00 sec)

使用用戶變量:

mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price;
+------+-----------+-------+
| id   | item      | price |
+------+-----------+-------+
| 0001 | 面包      |  2.00 |
| 0009 | 海鮮粥    | 99.99 |
+------+-----------+-------+
2 rows in set (0.00 sec)

4、使用AUTO_INCREMENT

4.1、可以通過(guò)AUTO_INCREMENT屬性為新的行產(chǎn)生唯一的標(biāo)識(shí):

CREATE TABLE person (
    id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
    name CHAR(60) NOT NULL,
    PRIMARY KEY (id)
);
insert into person(name) values("Hieron9");

4.2、如果表不含有AUTO_INCREMENT,可以通過(guò)如下方式添加:

ALTER TABLE person
CHANGE COLUMN `id` `id` INT AUTO_INCREMENT;

4.3、可通過(guò)LAST_INSERT_ID()函數(shù)來(lái)獲得最后一次的插入ID。

4.4、修改起始ID,可通過(guò)如下方式:

ALTER TABLE tbl AUTO_INCREMENT = 100;

4.5、如果插入的值與已有的編號(hào)重復(fù),則會(huì)出現(xiàn)出錯(cuò)信息,因?yàn)锳UTO_INCREMENT數(shù)據(jù)列的值必須是唯一的;

4.6、如果插入的值大于已編號(hào)的值,則會(huì)把該插入到數(shù)據(jù)列中,并使在下一個(gè)編號(hào)將從這個(gè)新值開(kāi)始遞增。也就是說(shuō),可以跳過(guò)一些編號(hào)。

如果自增序列的最大值被刪除了,則在插入新記錄時(shí),該值被重用。
如果用UPDATE命令更新自增列,如果列值與已有的值重復(fù),則會(huì)出錯(cuò)。如果大于已有值,則下一個(gè)編號(hào)從該值開(kāi)始遞增。

就是說(shuō)如果表中原本有AUTO_INCREMENT屬性值連續(xù)為78、100的值,但100這個(gè)數(shù)據(jù)被刪除了,下此再添加數(shù)據(jù)的時(shí)候自增值為101,100被重用了。
即使在你將整個(gè)表中的所有數(shù)據(jù)delete清空后,之前的自增序列最大值還是會(huì)被重用。

4.7、全表刪除時(shí),MySQL AUTO_INCREMENT會(huì)從1重新開(kāi)始編號(hào)。

4.8、AUTO_INCREMENT數(shù)據(jù)列必須有唯一索引,以避免序號(hào)重復(fù)(即是主鍵或者主鍵的一部分,必須具備NOT NULL屬性)。

4.9、AUTO_INCREMENT數(shù)據(jù)列序號(hào)的最大值受該列的數(shù)據(jù)類型約束.

如TINYINT數(shù)據(jù)列的最大編號(hào)是127,如加上UNSIGNED,則最大為255。一旦達(dá)到上限,AUTO_INCREMENT就會(huì)失效。

5、LAST_INSERT_ID

自動(dòng)返回最后一個(gè) INSERT 或 UPDATE 操作為 AUTO_INCREMENT 列設(shè)置的第一個(gè)發(fā)生的值.
``
SELECT LAST_INSERT_ID();

+------------------+
| LAST_INSERT_ID() |
+------------------+
| 10 |
+------------------+
1 row in set (0.00 sec)

注意:如果是批量插入,則,返回第一個(gè)插入的ID。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容