MySQL常用语句

触发器

MariaDB [sky]> delimiter //
MariaDB [sky]> create trigger tns after insert on t1 
    -> FOR EACH ROW
    -> BEGIN
    -> insert into t2 values (1);
    -> insert into t3 values (0);
    -> END //
MariaDB [sky]> delimiter ;
MariaDB [sky]> insert into t1 values (100);
MariaDB [sky]> select * from t1,t2,t3;
+------+------+------+
| a    | b    | c    |
+------+------+------+
|  100 |    1 |    0 |
+------+------+------+

存储函数

示例:
1、
MariaDB [sky]> CREATE PROCEDURE cp(IN rangeID INT,OUT Nbr INT)
    -> BEGIN
    -> SELECT COUNT(*) INTO Nbr FROM class WHERE id < rangeID;
-> END //
MariaDB [sky]> call cp(5,@num) //
MariaDB [sky]> select @num  //

2、
MariaDB [sky]> CREATE FUNCTION cf(rangID INT)
    -> RETURNS INT
    -> BEGIN
    -> RETURN (SELECT COUNT(*) FROM class WHERE id < rangID);
    -> END //
Query OK, 0 rows affected (0.00 sec)
MariaDB [sky]> SELECT cf(4) //

视图

/*创建视图view_t*/
MariaDB [sky]> CREATE VIEW view_1 AS SELECT id,name,interest FROM class;  

/*从视图中查询值*/
SELECT * FROM view_1;

/*从view_1创建view_2视图,使用自己的命名*/
CREATE VIEW view_2(b,c) AS SELECT name,interest FROM view_1;

数据备份和恢复

/*一张表*/
mysqldump -uroot -pmonian shopping since_buy > buy.sql
/*多个表*/
mysqldump -uroot -pmonian shopping since_buy t1 > more.sql
/*一个数据库*/
mysqldump -uroot -pmonian shopping > now.sql
/*多个数据库*/
mysqldump -uroot -pmonian --databases shopping demo > muti_dbs.sql
/*全部数据库*/
mysqldump -uroot -pmonian --all-databases > all.sql

实例:
1、备份sky库
[root@db1 ~]# mysqldump -u root -h localhost -p123456y --database sky  > QAZWSXEDC.sql
2、备份sky库里的两张表
[root@db1 ~]# mysqldump -u root -h localhost -p123456y sky class school  > YHNUJMIK.sql
查看备份结果
[root@db1 ~]# ls
QAZWSXEDC.sql  YHNUJMIK.sql

数据恢复

基本语法:
mysql -u user -p password [dbname] < filename.sql

示例:
[root@db1 ~]# mysql -uroot -p123456y < QAZWSXEDC.sql

对于已经登录到mysql服务器的用户,可以用source恢复
MariaDB [(none)]> source /root/QAZWSXEDC.sql

创建用户

1、
MariaDB [sky]> create user 'my1'@'localhost' IDENTIFIED BY 'passwd_my1';
MariaDB [sky]> grant all privileges on *.* to 'my1'@'localhost';

2、
MariaDB [sky]> grant all privileges on *.* to 'my2'@'localhost' IDENTIFIED BY 'passwd_my2';

3、
insert into mysql.user (Host,User,Password) values ('localhost','NIKI',PASSWORD('NIKI'));


查询语句

select  字段1,字段2,字段3...
-> from [表1],[表2]...                //数据来源
-> WHERE 表达式                        //查询的条件
-> GROUP BY (group by definition)   //如何显示查询数据,按照指定字段分组
-> HAVING (expression) [(operator) (expression)] 
-> ORDER BY (order by definition)   //用什么样的顺序显示查询的数据,ASC(升序)、DESC(降序)
-> LIMIT [(offset),] (row count)    //限制显示条数

实例:

简单查询
查询兴趣为basketball和football,成绩在60’以上的人
MariaDB [sky]> SELECT * FROM class WHERE interest in ('basketball','football') AND point > 60;


Alias别名:
MariaDB [sky]> SELECT interest AS I,point AS P FROM class as C WHERE C.point < 60;

Order By:
单一排序:
MariaDB [sky]> SELECT * FROM class ORDER BY point;
多列排序,现根据interest排序,再根据分数point排序
MariaDB [sky]> SELECT * FROM class ORDER BY interest,point;


Group By:
分组查询,同名即为一组,但是这样是不会显示详情的,可以使用GROUP_CONCAT(Field)显示相信信息。
MariaDB [sky]> SELECT name ,interest ,point FROM class GROUP BY interest;
MariaDB [sky]> SELECT GROUP_CONCAT(name) ,interest ,point FROM class GROUP BY interest;
多字段的分组查询,先分interest,相同的interest中再分point,适合查价格高的商品,比如首先分组用水果,之后再用价格分组。
MariaDB [sky]> select *  from class group by interest,point;


Having过滤:
先group分组,分组之后筛选出同一个兴趣有两个人喜欢的
MariaDB [sky]> SELECT GROUP_CONCAT(name),interest FROM class GROUP BY interest HAVING COUNT(name) > 2;


Limit显示结果个数:
仅显示两条
MariaDB [sky]> SELECT * FROM class LIMIT 2;
从第四个开始往后显示两个,附带Offset偏移量
MariaDB [sky]> SELECT * FROM class LIMIT 4,2


连接查询

1、 内连接查询(Inner Query),内连接时,返回查询结果集合中的仅仅是符合查询条件和连接条件的行。
如下,查询class & school表中,id相等的行

MariaDB [sky]> SELECT class.id,school.name,class.name FROM class,school WHERE school.id=class.id;

这个语句同样可以使用 x INNER JOIN y on 的形式写,和用where写结果是一样的:

MariaDB [sky]> SELECT class.id,school.name,class.name FROM class JOIN school ON school.id=class.id;

INNER JOIN等于JOIN , 下面谈谈INNER JOIN和WHERE的区别:

where查询创建了两张表的笛卡尔积,所有可能的组合都会被创建出来。
如果有1000顾客和1000条销售记录,这个查询会先产生1000000(1000*1000)个结果,然后通过正确的 ID过滤出1000条记录。 这是一种低效利用数据库资源,数据库多做1000倍的工作。 在大型数据库中,笛卡尔连接是一个大问题,对两个大表的笛卡尔积会创建数10亿或万亿的记录。

INNER JOIN查询数据库就只产生等于ID的1000条目标结果。增加了查询效率。

外连接查询
外连接时,返回查询结果不仅仅只有查询条件匹配到的行。反向(left,right)是哪个表,就使用哪个表的全部内容。
X LEFT OUTER JOIN Y:左表(X)内容全部打印,并拼接右表
X RIGHT OUTER JOIN Y:右表(Y)内容全部打印,并拼接左表

左连,左为class
MariaDB [sky]> SELECT class.id,school.name,class.name FROM class LEFT  OUTER JOIN school ON school.id=class.id;

子查询

子查询的功能也可以通过连接查询完成,但是子查询更容易阅读和理解。

可以看到,下面这个例子,class里面的id只要大于school中的任意一个ID就符合查询条件。ANY,SOME表示满足其中任一条件,就返回true。
```sql
MariaDB [sky]> select id from class where id > ANY(select id from school);

ALL表示满足所有条件才返回。

MariaDB [sky]> select id from class where id > ALL(select id from school);
+----+
| id |
+----+
|  8 |
|  9 |
+----+

EXISTS,如果EXISTS后面的语句有满足的条件,则返回为true,那么执行前面的select查询语句,前面的语句不能执行insert。

MariaDB [sky]> SELECT id FROM class WHERE id > EXISTS( SELECT id FROM school WHERE id < 4);

in:内层查询语句返回一个数据列,这个数据列里的值将提供给外层查询语句进行比较操作。
查询校级表中是否有人属于计算机学院,如果有,在院级表中查找其详细信息

MariaDB [sky]> SELECT * FROM class WHERE name IN (SELECT name FROM school WHERE location='computer');
+----+------+------------+-------+
| id | name | interest   | point |
+----+------+------------+-------+
|  1 | c1   | basketball |    99 |
+----+------+------------+-------+

联合查询

  1. 当union遇到完全相同的行时,将会被合并,合并是比较耗时的工作,一般不让union合并,使用“union all”可以避免。
  2. union的子句中,不用写order by,合并后的结果集可以进行order by,子句order by没有意义。
  3. 用于替代逻辑比较复杂的where
  4. UNION:删除重复的记录
  5. UNION ALL:不删除重复的记录
MariaDB [sky]> select * from class where id < 4
    -> UNION
-> select * from class where interest like 'girls';

等价于

MariaDB [sky]> SELECT * FROM class WHERE id<4 OR interest LIKE 'girls';
MariaDB [sky]> SELECT * FROM class WHERE id<4 || interest LIKE 'girls';
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351