MySql基础(二)

文章摘要:
1、级联查询、联表查询
2、批处理
3、用户变量在查询中的应用
4、AUTO_INCREMENT及其注意事项


1、级联、联表查询

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      | 高大胖    | 旺财   | m      | cat    |
| Gwen   | Chirpy | f      | Harold    | Fang   | m      | bird   |
+--------+--------+--------+-----------+--------+--------+--------+
2 rows in set (0.00 sec)

3、批处理

3.1、批处理就像如下命令,将一系列的sql语句,封装在字符串“”内。

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

3.2、将批处理sql语句封装在txt文件内,执行批处理文件。-t 格式化输出 -v显示执行的sql语句。

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.评论  from test.宠物 as pet,test.宠物日志 as pet_event  where pet.id = pet_event.事件id AND pet.名字 = pet_event.名字
--------------

+--------+--------------+-----------------------------------+
| 名字   | 事件类型     | 评论                              |
+--------+--------------+-----------------------------------+
| 大虎   | 生崽         | 5个小狗,4公1母                   |
| 老笨   | 治疗         | 打狂犬疫苗                        |
| Fang   | 生日         | 吃了顿大餐:厦门小黑虫            |
| Chirpy | 鸟笼         | 换了新鸟笼                        |
| Buffy  | 生日         | 吃了顿大餐:深圳小黑虫            |
+--------+--------------+-----------------------------------+

3.3、进入到mysql环境中,使用source或者“.”来执行。

mysql> source /Users/ifei/宠物批处理.txt;
批处理文件内容:
select User,Host from mysql.user;
select pet.名字,pet_event.事件类型,pet_event.评论  from test.宠物 as pet,test.宠物日志 as pet_event  where pet.id = pet_event.事件id AND pet.名字 = pet_event.名字;

二、常用查询案例

1、创建查询案例数据库

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、查询最大的类别号。
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、可以通过AUTO_INCREMENT属性为新的行产生唯一的标识:

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,可以通过如下方式添加:

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

4.3、可通过LAST_INSERT_ID()函数来获得最后一次的插入ID。

4.4、修改起始ID,可通过如下方式:

ALTER TABLE tbl AUTO_INCREMENT = 100;

4.5、如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;

4.6、如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。

如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。
如果用UPDATE命令更新自增列,如果列值与已有的值重复,则会出错。如果大于已有值,则下一个编号从该值开始递增。

就是说如果表中原本有AUTO_INCREMENT属性值连续为78、100的值,但100这个数据被删除了,下此再添加数据的时候自增值为101,100被重用了。
即使在你将整个表中的所有数据delete清空后,之前的自增序列最大值还是会被重用。

4.7、全表删除时,MySQL AUTO_INCREMENT会从1重新开始编号。

4.8、AUTO_INCREMENT数据列必须有唯一索引,以避免序号重复(即是主键或者主键的一部分,必须具备NOT NULL属性)。

4.9、AUTO_INCREMENT数据列序号的最大值受该列的数据类型约束.

如TINYINT数据列的最大编号是127,如加上UNSIGNED,则最大为255。一旦达到上限,AUTO_INCREMENT就会失效。

5、LAST_INSERT_ID

自动返回最后一个 INSERT 或 UPDATE 操作为 AUTO_INCREMENT 列设置的第一个发生的值.
``
SELECT LAST_INSERT_ID();

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

注意:如果是批量插入,则,返回第一个插入的ID。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容