比CRUD多少于

GoogleEarth截图

这是MySQL体系笔记的首先局部,本体系笔记希望能遵照笔者自己学习MySQL技术的阅历来记录,避免纯粹遵照内容一块一块总计,也就是不同于一般按内容分配章节的书本的布局,有一个坦荡的阅读曲线。内容相比较丰裕的技能点会依照专题在三个上学笔记中日渐深刻。

这部分的题目叫比CRUD多一丁点儿,比起最基础的w3c的SQL教程之外,只多一点的扩充,知足应付从纯粹阅读入门资料到可以上手形成一个简练的工作的要求。

其次篇的根本内容是基础SQL语句,会遵照自身工作中的经验,每个语句多介绍一些实际上开发中相比较广泛的用法。

SQL是一种编程语言

SQL是Structure Query Language的简写。SQL并不只是用来跟数据库,而是一种完备编程语言,在各类编程语言名次榜上也都是首屈一指。SQL语言的历史和C语言一样长,从1970年Codd大学生将数据库领域渐渐发扬光大至今近半个世纪,已经足以算是编程语言中的老人了。笔者认为伴随着关周全据库(RDBMS)爆发的SQL语言随着软件底层技术的逐渐成熟,软件应用日益渗透到生活方方面面,软件开发教育也更是普及(比如前段时间有陕西省业已将Python语言列入高考),将来或者控制SQL语言的工程师会远远多于领会C语言的工程师。

同其他语言类似,SQL有标准社团出具的专业,但不同的数据库也有温馨的不等的贯彻。可类比为各种语言有谈得来的正规化,也有两样的编译器(或解释器等)的实现,相信做C++开发的都会被微软的VC编译器和GNU协会的GCC编译器的细微不同而懊恼的经验。那么些题目在SQL语言领域应有是更大一些,不同的数据库SQL实现有不小的区分,但中央的看SQL语言可以分为三类:

  • DML(Data Manipulation
    Language):数据操纵语句,用户增删查改数据库记录,包括insert, select,
    update, delete,也就是大家小说标题里面常说CRUD(create read update
    delete)时候指代的那六个语句。可能入门学习时候一般说的SQL就是指这系列型的。本篇基础SQL语句实际上也只会介绍此类。

  • DDL(Data Definition
    Language):数据定义语言,定义数据库、数据表、列、索引等。包括create,
    drop, alter等。

  • DCL(Data Control
    Language):数据控制语句,用于控制不同数量的访问权限,配置密码等。暴扣grant,
    revoke。

本文下来分别介绍DML中的INSERT,SELECT,UPDATE,DELETE

INSERT语句

最简易的款型如下:

insert into table_name(id, cardno, `name`, `desc`) values('1', 100001, "good", "good boy");  

第一个括号里是列名,第二个括号里是对应顺序的值。

一遍插入多条数据:

insert into table_name(id, cardno, `name`, `desc`) values('1', 100001, "good", "good boy"),('2', 100002, "bad", "bad girl"); 

多少个常见Tip

顺手说多少个周边的小题目,在地点的写法里出现的:

  • 表名和列名可以利用“`做转移符,用途是当列名和表名为desc,select那种SQL的重要字和保留字时候必须运用,否则是会报语法错误的。
  • 有关保留字和紧要字不同,比如select是着重字,desc是保留字切切实实可看手册。实际上人脑也不会记得那一个根本字,所以在行使时候就全都使用转义就好了。学海无涯,每种技术的缩写、特例等等司空眼惯,笔者的习惯是记念一种相比通用和广元的用法,始终去行使即可。因为许多技术点的有余艺术也是一项技术提高的野史由来造成的,并不是说都记着冒尖方法会有实际的情景。如若表自己成立时候,推荐的做法就仍然要过五次上述链接中的保留字,间接不要使用这一个词为好,毕竟这多少个选名字的时刻在建表做设计阶段总的时间比起来并不会占用多少比例。笔者遭遇的有的ORM库之类对这多少个重要字或者并不是处理的十全十美,所以不如果顶级。
  • 持续字符型,其实有着插入内容其实都能够用'引起来。用'不用"还有一个好用的地点是当输入字符串里面有双引号"时候,可以免于写一流转义。
  • 表经常会有自增ID,其实被设置为自增的id也是可以在insert和update时候指定的,只是当不指定值时候才会自增。

INSERT INTO … SELECT 用法:

这是很常用的技术,当举行多少导入时候会遇到插入的数据需要从另一个表中获取,可以动用insert into ... select的写法。

比如说有供应商和消费者两张表,有一些列内容是重合的,就如下写法

INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country FROM Suppliers;

但注意,在statement-based的共同中,这种话语是并不安全的。类似的用法还有
INSERT … ON DUPLICATE KEY UPDATE , INSERT
IGNORE。可以看手册中的详细介绍

SELECT语句

最基础的不再赘述,SELECT用法的内容最充裕,后续会特意开一个题。这里说多少个大规模的Tips。

关于NULL

首先是留意NULL,建表应该避免用NULL值,所有列都能够授予一个默认值。因为NULL在SELECT、索引、总括函数等诸多场地都会有一对令人Surprise的面貌,后续可能会单独写一篇有关NULL的博客。

查找NULL时候用IS NULL,
IS NOT NULL,假使NULL值需要更换,需要用好关于NULL的多少个函数IFNULL(),
ISNULL(), COALESCE()

  • IFNULL(exp,value)可以用在说话中代替exp的职务,表示当exp不为NULL时候利用value中的值替代。
  • ISNULL(exp) 做逻辑判断
  • COALESCE(....)函数是个多值函数,意思是回到这四个参数中按顺序第一个非NULL的值。

ANY和ALL

在各种操作符号如>,<,=后采纳ANY和ALL可以象征任意一个和持有的意思。

例如查询比任意Alert表中id大的Account表值:

select id from Account where id > ANY (select id from Alert);

譬如查询比自己的id还大的(\_结果自然是不曾)

select id from Account where id > ALL (select id from Account);

GROUP BY

GROUP
BY的核心用法相比宽泛,但总括函数除了count,sum等还有几个常用的聚合函数(Aggregate
Function)。

连年函数 group_concat会将分组内的值组装为一个逗号分隔的数组

select ag.id, ag.name, group_concat(a.id) as resource_ids from AccountGroup ag left join AccountGroup_Account aga on ag.id=aga.account_group_id left join Account a on aga.account_id=a.id group by ag.id;

回到会是相仿

+----+------------------------------------+--------------+
| id | name                               | resource_ids |
+----+------------------------------------+--------------+
|  1 | admin                              | 1,2,3        |
+----+------------------------------------+--------------+

count函数可以加distinct表示去重

SELECT COUNT(DISTINCT results) FROM student;

更多可以看手册

发表评论

电子邮件地址不会被公开。 必填项已用*标注