文档章节

MySQL快速入门

waffle930
 waffle930
发布于 2016/10/04 14:54
字数 2598
阅读 93
收藏 5

继恶补了C++基础之后,又来恶补MySQL了,花了将近一天的时间啃完了<MySQL必知必会>这本书,整理了有点糙的读书笔记。

1.SHOW语句的使用:

SHOW DATABASES; //显示存在的数据库列表
SHOW TABLES; //显示当前数据库里存在的表
SHOW COLUMNS FROM user; //显示表user中的所有列(字段)信息,效果同DESCRIBE user
SHOW GRANTS; //显示授权用户

2.SELECT查询语句:

SELECT name FROM products; //查询单列
SELECT name,id FROM products; //查询多列
SELECT * FROM products; //查询所有列
SELECT DISTINCT id FROM products; //查询一列返回不同的行
SELECT products.name FROM factory.products; //使用完全限定的表明和数据库名

3.LIMIT子句限定显示结果行数:

SELECT name FROM products LIMIT 5; //查询一列返回从开始的5行
SELECT name FROM products LIMIT 5,5; //查询一列返回从第5行开始的5行

4.ORDER BY子句对查询结果进行排序:

SELECT name FROM products ORDER BY name; //通过单一列对查询结果排序,排序子句中的列名不一定是查询结果中的列明。
SELECT id,price,name FROM products ORDER BY price,name;//通过多列对结果排序,即当第一个列值相同时按照第二个再排,否则只按第一个排。
SELECT id,price,name FROM products ORDER BY price DESC,name;//同上,只不过先按price降序排列,再按name升序排列(没写ASC关键字是因为默认升序)
SELECT price FROM products ORDER BY price DESC LIMIT 1; //利用排序子句和LIMIT子句检索价格最大值

5.WHERE子句用于过滤行数据:

SELECT name,price FROM products WHERE price = 2.5; //过滤价格等于2.5的数据
SELECT name,price FROM products WHERE price BETWEEN 5 AND 10; //过滤价格在5到10之间的数据
SELECT id FROM customers WHERE email IS NULL //过滤表中email为空值得数据

WHERE子句可以使用的基本操作符有: =、!= 、< 、> 、<= 、>= 、> 、 BETWEEN。还可以配合如下特殊操作符(AND \ OR \ IN \ NOT):

SELECT id,price,name FROM products WHERE id = 1000 AND price <=10; //AND操作符
SELECT name,price FROM products WHERE id = 1000 OR id = 1002; //OR操作符
SELECT name,price FROM products WHERE id IN(1002,1003) ORDER BY name; //IN操作符
SELECT name,price FROM products WHERE id NOT IN(1002,1003) ORDER BY name;//NOT操作符用于对后面子句取反

6.LIKE子句:

SELECT id,name FROM products WHERE name LIKE 'jet%'; //%通配符表示任何字符出现任意次数,这里表示以jet开头的词,jet后无论出现多少个任意字符。
SELECT id,name FROM products WHERE name LIKE '_ ton'; //_通配符表示单个任意字符。

7.REGEXP子句用于使用正则表达式进行搜索。详参照正则表达式。

8.拼接函数Concat()

SELECT Concat(name, '(' , country , ')') AS title FROM vendors ORDER BY name;
查询结果显示name 和(country)拼接起来的结果,并且显示的列标题通过AS起别名为title

9.SELECT中执行算术计算

SELECT id,quantity,price*item_price AS price FROM order WHERE order_num = 2005; //让结果显示算术运算后的结果并起别名

10.数据处理函数:A.文本处理函数

 B.日期和时间处理函数:

 C.数值处理函数:

11.聚集函数

 12.GROUP BY子句用于分组数据:

SELECT id, COUNT(*) AS num_prods FROM products GROUP BY id; //按照id进行分组,其中SELECT中出现的出聚集函数以外的列名必须出现在GROUP BY子句中,且GROUP BY不能使用别名。

13.HAVING 子句用于过滤分组:

SELECT id,COUNT(*) AS order FROM order WHERE id > 10 GROUP BY id HAVING COUNT(*) >= 2; //查询语句先回执行WHERE过滤行数据,再通过GROUP BY分组,接着是HAVING来过滤分组后的组

14.SELECT相关子句书写顺序:SELECT -> FROM -> [WHERE] -> [GROUP BY] -> [HAVING] -> [ORDER BY] -> [LIMIT],其中括号括起来的是非必需的。

15.子查询,常用yu过滤子句中和SELECT的计算字段:

SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE pro_id = 'TNT2'); //这里在WHERE过滤子句中嵌套了一个子查询,执行顺序是先是子查询查到order_num,然后通过子查询的order_num过滤外层查询数据
SELECT cust_name, cust_state, (SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS orders FROM customers ORDER BY cust_name; //这里显示结果的第三列是来自另外一个表的子查询,并且指定了在子查询中过滤id等于当前表id的数据。

16.外键是某个表中的一列,包含另一个表的主键值,定义了两个表之间的关系。

17.INNER JOIN内部联结(也称等值联结)实现查询多个表的数据,来自多个表的数据通过一定的联结条件联结起来:

SELECT ven_name , prod_name , prod_price FROM vendors , products WHERE vendors.vend_id = products.vend_id ORDER BY vend_name , prod_name; //查询来自两个表vendors和products的数据,并且将数据通过WHERE子句中id相等条件内联起来,这里id一定要写限定全名区分,若不使用内联结会出现笛卡儿积的结果
SELECT vend_name,prod_name,prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id; //查询效果同上,只不过这里通过INNER JOIN内联结,ON后为内联结条件。

18.自联结,即通过当前表和当前表本身进行联结进行查询数据:

SELECT p1.prod_id,p1.prod_name FROM products AS p1, products AS p2 WHERE p1.vend_id = p2.vend_id AND p2.prod_id = 'DTNTR';//将同一张表区别名p1和p2,通过vend_id为条件进行自联结,由于追加了p2.prod_id = 'DTNTR'使得p2只有一条数据,因此在自联结时p1只会过滤为只含有p2那条数据ven_id的数据。

19.OUTER JOIN外联结,与内联结类似,区别就是包括了没有进行关联的行:

SELECT customers.cust_id , order.order_num FROM customer LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id; //在外联结关键字OUTER JOIN前面加LEFT和RIGHT标志指定包括OUTER JOIN左边或者右边的所有行(包括没进行关联的,没进行关联的数据为NULL)。

20.UNION组合查询,将多个查询语句的结果按行进行组合:

SELECT vend_id , prod_id , prod_price FROM products WHERE prod_price <= 5 UNION SELECT vend_id , prod_id , prod_price FROM products WHERE vend_id IN (1001,1002) ORDER BY vend_id , prod_price; //组合的要求是多个查询结果的列数量和类型是相兼容的,并且组合会去重复行,要包括重复行使用UNION ALL,组合的结果只能用一个ORDER BY

21.全文本搜索

//启用全文搜索
CREATE TABLE productnotes(
note_id int NOT NULL AUTO_INCREMENT,
prod_id char(10) NOT NULL,
note_date datetime NOT NULL,
note_text text NULL,
PRIMARY KEY(note_id),
FULLTEXT(note_text) //对note_text字段开启全文本搜索支持
)ENGINE = MyISAM //使用MyISAM引擎,因为此引擎支持全文本搜索
//使用全文本搜索
//Match(note_text)即对note_text字段进行全文本搜索,Against('rabbit')指出搜索的关键字是'rabbit'
SELECT note_text FROM productnotes WHERE Match(note_text) Against('rabbit
');

22.INSERT语句用于插入数据:

INSERT INTO customers VALUES(NULL,'Test','Test1','Test2',99,NULL);//直接插入完整的数据,数据按位入座。但容易写漏,不安全
INSERT INTO customers (cust_address , cust_city , cust_state , cust_zip , cust_country,cust_contact , cust_email) VALUES('Test','TEST','TEST','TEST','TEST','TEST',NULL,NULL); //插入一行数据的指定列的数据,没指定的列为默认为NULL或默认值。
INSERT INTO customers(cust_id , cust_contact , cust_email , cust_name , cust_address, cust_city , cust_state , cust_zip , cust_country)SELECT cust_id , cust_contact , cust_email , cust_name , cust_address, cust_city , cust_state , cust_zip , cust_country FROM custnew;//将查询的数据插入

23.UPDATE语句更新数据:

UPDATE customers SET cust_name = 'The Fudds',cust_email = 'elmer@fudd.com' WHERE cust_id 1005; //修改指定行的数据。若不加WHERE会更新所有行的数据

24.DELETE语句删除数据:

DELETE FROM customers WHERE cust_id = 1005; //删除指定行的数据,若不加WHERE则删除所有行数据。

25.CREATE TABLE语句创建表:

//建表关键字CREATE TABLE,后面接表名,括号内为各列的名称及属性
CREATE TABLE orderitems(
//NOT NULL执行这一列不能为空,设为NULL则可以为空,DEFAULT指出若这一列若没赋值则使用默认值,AUTO_INCREMENT指出这一列的数据若没赋值会根据上一个值自动增加。
order_num int NOT NULL, AUTO_INCREMENT,
order_item int NOT NULL,
prod_id char(10) NOT NULL DEFAULT 1,
quantity int NOT NULL,
item_price decimal(8.2) NOT NULL,
//设置主键
PRIMARY KEY (order_num , order_item)
)ENGINE = InnoDB;//选择使用引擎

26.ALTER TABLE语句更新表:

ALTER TABLE vendors ADD vend_phone CHAR(20) ; //在表中添加一列
ALTER TABLE orders ADD CONSTAINT fk_orders_customers FOREIGN KEY(cust_id) REFERENCES customers(cust_id); //更新表常用来添加外键约束,这里添加约束列fk_orders_customers,指出是外键cust_id,引用于customers的cust_id列
ALTER TABLE Vendors DROP COLUMN vend_phone; //删除表中的一列

27.DROP TABLE 删除表

DROP TABLE customers2;

28.RENAME TABLE重命名表:

RENAME TABLE customers2 TO customers;

29.VIEW视图可以看作虚拟的表本身不包含任何数据,不能使用索引和触发器,本身保存一个SQL查询语句,用于之后的SELECT,简化查询操作,复用SQL代码。

//创建视图
CREATE VIEW productcustomers AS SELECT cust_name , cust_contact , prod_id FROM customers , orders , orderitems WHERE customers.cust_id = order.cust_id AND orderitems.order_num = orders.order_num; //AS后面保存的就是一个SQL查询,此视图就是基于此查询得出来的虚拟表
//从视图查询,直接得出结果而不用在敲上面那么多代码
SELECT * FROM productcustomers
//删除视图
DROP VIEW viewname;

可以对视图中的数据进行插入、更新、删除操作,操作完会修改原本的基类表。

30.存储过程暂时没看之后补上

31.游标暂时没看之后补上

32.TRIGGER触发器即某些语句被执行时自动执行一些操作,可以使用出发语句有INSERT\DELETE\UPDATE,包括其之前和之后触发因此一个表最多含有6个触发器:

CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT 'Product added'; //创建的触发器名是newproduct,出发条件在插入表之后,FOR EACH ROW指出每次插入都触发,触发内容就是显示'Product added'行
CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW SELECT NEW.order_num; //这里的NEW.order_num指的是新插入的记录的order_num字段
CREATE TRIGGER deleteorder BEFORE DELETE ON orders FOR EACH ROW BEGIN INSERT INTO archive_orders(order_num,order_date,cust_id) VALUES(OLD.order_num,OLD.order_date,OLD.cust_id); END; //这里使用BEGIN和END使得可以执行多条语句。
DROP TRIGGER newproduct; //删除触发器

33.事务处理保证SQL操作要么执行,要么完全不执行:

START TRANSACTION;//开启事务
ROLLBACK; //回滚操作到开启事务处,只能在一个事务处理内使用
COMMIT; //提交整个事务操作
SAVEPOINT pos; //使用保留点
ROLLBACK TO pos; //回滚到保留点
SET autocommit = 0; //关闭自动提交行为

 

© 著作权归作者所有

waffle930
粉丝 3
博文 13
码字总数 23031
作品 0
广州
私信 提问
Spring Boot with MySQL

Spring boot with MySQL 实例参考 原创 2016-08-08 景峯 Netkiller 节选择《Netkiller Java 手札》· Spring 框架 9.7. Spring boot with MySQL 9.7.1. Maven pom.xml <project xmlns="http:......

neo-chen
2016/08/08
157
0
Spring Boot企业级开发基础框架 SLife 加入 Activiti 模块

Spring Boot 搭建的企业级开发基础框架 SLife 发布更新了,本次更新加入了 Activiti 模块。 经过几个同学的努力,项目修复了一些bug,比如添加菜单,id重复问题 同时项目经过许同学的努力, ...

jamen
2017/12/13
4.8K
15
机器学习 人工智能 博文链接汇总

115 [入门问题] [TensorFlow] [深度学习] [好玩儿的算法应用实例] [聊天机器人] [神经网络] [机器学习] [机器学习算法应用实例] [自然语言处理] [数据科学] [Python] [Java] [机器学习--初...

aliceyangxi1987
2017/05/13
0
0
创建带 IN 和 OUT 参数的 MySQL 存储过程

在 MySQL 中创建储存过程的语法很难记,除非你经常跟储存过程打交道,原因很简单,语法不是什么小笑话。如果你通过命令行控制 MySQL,你需要记住准确的语法。一个快速示例可以很好的帮助你做...

oschina
2013/03/12
11.6K
7
PHP和MySQL Web开发

第一章 PHP快速入门 1.18 使用declare declare(directive){// block} 第十七章 使用PHP和MySQL实现身份验证 识别访问这 实现访问控制 使用基本身份验证 在PHP中使用基本身份验证 在Apache的....

lilugirl
2014/04/27
69
0

没有更多内容

加载失败,请刷新页面

加载更多

Android -------- kotlin插件神器Json直接生成javaBean

这是一个data class从JSON字符串生成Kotlin 的插件,换句话说,是一个将JSON字符串转换为Kotlin data class(Json到Kotlin)的插件 在使用Kotlin进行开发的时候,我们需要经常对Json数据做解析...

切切歆语
7分钟前
18
0
1、Spring注解开发,第一天

第一天:Spring annotation开发 目录:1、@Configuration与@Bean给容器注册组件 2、@ConponentScan自动扫描注解 一、@Configuration与@Bean给容器注册组件 1、旧版本中创建配置文件和Bean //...

有一个小阿飞
14分钟前
15
0
斯坦福博弈论笔记整理活动的任务已重新划分,望周知

参与方式:https://github.com/apachecn/stanford-game-theory-notes-zh/blob/master/CONTRIBUTING.md 整体进度:https://github.com/apachecn/stanford-game-theory-notes-zh/issues/1 项目......

ApacheCN_飞龙
15分钟前
10
0
使用HTML5 canvas完成的一个网页白板

该代码能够使用canvas对象完成的一个基本功能。仅供大家参考。 <html> <head> <meta http-equiv="Content-Type" contentType="text/html; charset=UTF-8" %> <title>Title</title> <script t......

前端老手
18分钟前
12
0
web漏洞之xss(学习记录)

xss又名跨站脚本攻击,是一种注入攻击,当web应用对用户输入过滤不严格,攻击者写入恶意的脚本代码(HTML、JavaScript)到网页中时,如果用户访问了含有恶意代码的页面,恶意脚本就会被浏览器...

半缘修道半缘君丶
20分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部