mysql组件化_MySql笔记
1、数据库基础操作语句
链接数据库:mysql -u root -p 123456;
选择数据库:USE database_name;
显示可以数据库:SHOW DATABASES;
显示数据库所有表:SHOW TABLES;
显示表的列:SHOW COLUMNS FROM table_name;
2、检索数据
检索单个列:SELECT prod_name FROM table_name;
检索多个列:SELECT prod_id,prod_name,prod_price FROM table_name;
检索所有列:SELECT * FROM table_name;
检索不同的行:SELECT DISTINCT prod_id FROM table_name;
现在结果:SELECT prod_name FROM table_name LIMIT 5; 至多返回前5行
SELECT prod_name FROM table_name LIMIT 5,5; 返回从5行开始的5行
使用完全限定的表面:SELECT products.prod_nam FROM products;
3、排序检索数据
排序数据:SELECT prod_name FROM products ORDER BY prod_name;
按多个列排序:SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name;
指定排序方向:SELECT prod_name FROM products ORDER BY prod_name DESC; 默认升序排序,DESC降序排序
SELECT prod_id,prod_price,prod_name FROM products ORDER BY prod_price DESC,prod_name;
4、过滤数据
使用WHERE字句:SELECT prod_name FROM products WHERE prod_price = 2.5;
WHERE字句操作符:= <>(不等于) != < > <= >= BETWEEN
范围值检查:SELECT prod_name FROM products WHERE prod_price BETWEEN 5 AND 10;
空值检查:SELECT prod_name FROM products WHERE prod_price IS NULL;
5、数据过滤
AND操作符:SELECT prod_name FROM products WHERE prod_price < 10 AND prod_id = 100;
OR操作符:SELECT prod_name FROM products WHERE prod_price = 10 OR prod_price = 20;
IN操作符:SELECT prod_name FROM products WHERE prod_price IN (10,20,30);
NOT操作符:SELECT prod_name FROM products WHERE prod_price NOT IN (10,20,30);
6、用通配符进行过滤
百分号(%)通配符:SELECT prod_name FROM products WHERE prod_name LIKE '%jet%'; %匹配任何个数字符
下滑先(_)通配符:SELECT prod_name FROM products WHERE prod_name LIKE '_ ton anvil'; _匹配一个字符
7、用正则表达式进行搜索
基本字符匹配:SELECT prod_name FROM products WHERE prod_name REGEXP '1000';
正则特殊字符:.(任意匹配一个字符) |(或) []
8、计算字段
拼接字段:SELECT Concat(ventor_name, '(', ventor_country, ')') FROM ventors ORDER BY ventor_name;
去掉有边的所有空格:SELECT Concat(RTrim(ventor_name), '(', RTirm(ventor_country), ')') FROM ventors ORDER BY ventor_name; (LTrim去掉左边空格,Trim去掉左右边空格)
使用别名:SELECT Concat(ventor_name, '(', ventor_country, ')') AS ventor_title FROM ventors ORDER BY ventor_name;
执行算数运算:SELECT prod_id,quantity,item_price,quantity*item_price AS expanded_price FROM orderitems WHERE order_num = 20005; (支持 + - * /)
9、使用数据处理函数
去除右边列值右边空格:RTirm()
去除左边列值右边空格:LTirm()
去除左右边列值右边空格:Tirm()
将文本转换为大写:Upper()
将稳步转换为小写:Lower()
返回串的长度:Length()
返回串左边的字符:Left()
返回串右边的字符:Right()
将任何文本串转为描述其语言表示的字母数字模式算法:Soundex()
日期和时间处理函数
增加一个日期(天、周等):AddDate()
增加一个时间(时、分等):AddTime()
返回当前日期:CurDate()
返回当前时间:CurTime()
返回日期时间的日期部分:Date()
计算连个日期之差:DateDiff()
高度灵活的日期运算函数:Date_Add()
返回一个格式化的日期或时间串:Date_Format()
返回一个日期的年数部分:Year()
返回一个日期的月数部分:Month()
返回一个日期的天数部分:Day()
对于一个日期,返回对应的星期几:DayOfWeek()
返回一个时间的小时部分:Hour()
返回一个时间的分钟部分:Minute()
返回一个时间的秒钟部分:Second()
返回一个日期时间的时间部分:Time()
返回当前日期和时间:Now()
10、汇总数据-聚集函数
返回某列的平均值:AVG()
SELECT AVG(prod_price) AS avg_price FROM products;
返回某列的行数:COUNT()
SELECT COUNT(*) AS prod_count FROM products;
返回指定列的最大值:MAX()
SELECT MAX(prod_price) AS max_price FROM products;
返回指定列的最小值:MIN()
SELECT MIN(prod_price) AS min_price FROM products;
返回某列之和:SUM()
SELECT SUM(prod_price) AS sum_price FROM products;
聚集不同值:DISTINCT
SELECT AVG(DISTINCT prod_price) AS avg_price FROM products;
11、分组数据
创建分组:GROUP BY
SELECT ventor_id,COUNT(*) AS num_prods FROM products GROUP BY ventor_id;
过滤分组:HAVING
SELECT ventor_id,COUNT(*) AS num_prods FROM products GROUP BY ventor_id HAVING COUNT(*)>2;
SELECT字句顺序
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT
12、使用子查询
利用子查询进行过滤
SELECT cust_name FROM customers WHERE cust_id IN (
SELECT cust_id FROM orders WHERE order_num IN (
SELECT order_num FROM orderitems WHERE order_id = 'TNT2'
)
);
作为计算字段使用子查询
SELECT cust_name,(
SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id
) AS orders FROM customers ORDER BY cust_name;
13、联结表
等值联结
SELECT ventor_name,prod_name,prod_price FROM ventors,products WHERE ventors.ventor_id = products.ventor_id ORDER BY ventor_name,prod_name;
SELECT ventor_name,prod_name,prod_price FROM ventors INNER JOIN products ON ventors.ventor_id= products.ventor_id;
自联结
SELECT prod_id,prod_name FROM products WHERE vend_id = (
SELECT vend_id FROM products WHERE prod_id = 'DTNTR'
);
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';
外部联结
SELECT customers.cust_id,orders.order_num FROM customers RIGHT OUTER JOIN orders IN customers.cust_id=orders.cust_id;
SELECT customers.cust_id,orders.order_num FROM customers LEFT OUTER JOIN orders IN customers.cust_id=orders.cust_id;
14、组合查询
创建组合查询
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);
15、插入数据
插入完整的行
INSERT INTO customers(cust_id,cust_name_cust_age) VALUES(10002,'xxx',28);
插入多行
INSERT INTO customers(cust_id,cust_name_cust_age) VALUES(10002,'xxx',28),(10003,'yyy',18);
插入检索出的数据
INSERT INTO customers(cust_id,cust_name_cust_age) SELECT cust_id,cust_name_cust_age FROM custnew;
16、更新和删除数据
UPDATE customers SET cust_name='ddd',age='40 WHERE cust_id = 100001;
DELETE FROM customers WHERE cust_id = 100001;
17、创建和操纵表
创建
CREATE TABLE customers(
cust_id int NOT NULL AUTO_INCREMENT,
cust_name char(50) NOT NULL,
cust_age int NOT NULL DEFAULT 10,
PRIMARY KEY(cust_id)
)ENGINE=InnoDB;
更新
给表插入一个列:ALTER TABLE vendors ADD vend_phone CHAR(20);
删除一个列:ALTER TABLE vendors DROP vend_phone;
删除表:DROP TABLE vendors;
重命名表:RENAME TABLE vendors TO vendors1;
18、使用视图
利用视图简化复杂的联结
CREATE VIEW productcustomers AS
SELECT cust_name,cust_contact,pro_id FROM customers, orders, orderitems WHERE customers.cust_id=orders.cust_id AND orders.order_num=orderitems.order_num;
SELECT cust_name,cust_contact FROM productcustomers WHERE prod_id='100002';
19、使用存储过程
执行存储过程
CALL productpricing(@pricelow,@prichigh,@priceaverage);
创建存储过程
DELIMITER //
CREATE PROCEDURE productpricing()
BEGIN
SELECT AVG(prod_price) AS priceaverage FROM products;
END //
DELIMITER ;
删除存储过程:DROP PROCEDURE productpricing;
传入返回参数
DELIMITER //
CREATE PROCEDURE productpricing(OUT p1 DECIMAL(8,2),OUT p2 DECIMAL(8,2),OUT p3 DECIMAL(8,2))
BEGIN
SELECT MIN(prod_price)
INTO p1
FROM products;
SELECT MAX(prod_price)
INTO p2
FROM products;
SELECT AVG(prod_price)
INTO p3
FROM products;
END//
DELIMITER ;
CALL productpricing(@max,@min,@avg);
SELECT @max,@min,@avg;
传入使用参数
DELIMITER //
CREATE PROCEDURE ordertotal(IN onmuber INT, OUT ototal DECIMAL(8,2))
BEGIN
SELECT SUM(item_price*quantity) FROM orderitems WHERE order_num = onumber INTO ototal;
END//
DELIMITER ;
CALL ordertotal(2005,@ototal);
检测存储过程:SHO CREATE PROCEDURE ordertotal;
20、使用触发器
只支持DELETE/INSERT/UPDATE语句,BEFORE和AFTER事件
创建触发器:CREATE TRIGGER newproduct AFTER INSERT ON products FOR EACH ROW SELECT 'prodcuct add';
删除触发器:DROP TRIGGER newproduct;
INSERT触发器:可引用一个名为NEW的虚拟表,访问被插入的值,在BEFORE INSERT 触发器中,NEW中的值也可以被更新,对于AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT执行之后包含新的自动生成值
CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW SELECT NEW.order_num;
DELETE触发器:可引用一个名为OLD的虚拟表,访问被删除的行,OLD中的值全都是只读的,不能更新
CREATE TRIGGER deleteorder BEFORE DELETE ON orders FOR EACH ROW
BEGIN
INSERT INTO archive_order(order_num,order_date,cust_id) VALUE (OLD.order_num,OLD.order_date,OLD.cust_id);
END;
由于某种原因,BEGIN END 内执行失败,DELETE本身将被放弃。
UPDATE触发器:可引用一个名为OLD的虚拟表访问以前的值,引用一个名为NEW的虚拟表访问更新的值;在BEFORE UPDATE触发器中,NEW中的值允许被修改;OLD中的值全都是只读
CREATE TRIGGER updatevendor BEFORE UPDATE ON vendors FOR EACH ROW SET NEW.vend_state = UPPER(NEW.vend_state);
21、管理事务处理
关键词:
事务(transaction)指一组SQL语句
回退(rollback)指撤销指定SQL语句的过程
提交(commit)指将未存储的SQL语句结果写入数据库
保留点(savepoint)指事务处理中设置的临时占位符,你可以对它发布回退(与回退整个事务处理不同)
事务的开始:START TRANSACTION
事务的回退:ROLLBACK
START TRANSACTION;
DELETE FROM orders;
ROLLBACK;
事务的提交:COMMIT
START TRANSACTION;
DELETE FROM orders;
COMMIT;
设置保留点:SAVEPOINT delete1;
ROLLBACK TO delete1;
22、安全管理
MySQL用户账号和信息存储在名为mysql的数据库中
USE mysql;
SELECT user FROM user;
创建用户账号
CREATE USER benIDENTIFIED BY 'xxxxx';
重命名用户名
RENAME USER ben TO bforta;
删除用户账号
DROP USER bforta;
设置访问权限
查看用户权限:SHOW GRANTS FOR bforta;
设置权限:GRANT SELECT ON crashcourse.* TO bforta;
撤销权限:REVOKE SELECT ON crashcourse.* FROM bforta;
GRANT和REVOKE可在几个层次上控制访问权限:
整个服务器,使用GRANT ALL和REVOKE ALL
整个数据库:使用ON database.*
特定的表:使用ON database.table
权限:
ALL:除GRANT OPTION外所有权限
ALTER:使用ALTER TABLE
ALTER ROUTINE:使用ALTER PROCEDURE和DROP PROCEDURE
CREATE:使用CREATE TABLE
CREATE ROUTINE:使用CREATE PROCEDURE
CREATE TEMPORARY:使用CREATE TEMPORARY TABLE
CREATE USER:使用CREATE USER/DROP USER/RENAME USER/REVOKE ALL PRIVILEGES
CREATE VIEW:使用CREATE VIEW
DELETE:使用DELETE
DROP:使用DROP TABLE
EXECUTE:使用CALL和存储过程
FILE:使用SELECT INTO OUTFILE和LOAD DATA INFILE
GRANT OPITION:使用GRANT和REVOKE
INDEX:使用CREATE INDEX和DROP INDEX
INSERT:使用INSERT
LOCK TABLES:使用LOCK TABLES
PROCESS:使用SHOW FULL PROCESSLIST
RELOAD:使用FLUSH
REPLICATION CLIENT:服务器位置的访问
REPLICATION SLAVE:由复制从属使用
SELECT:使用SELECT
SHOW DATABASES:使用SHOW DATABASES
SHOW VIEW:使用SHOW CREATE VIEW
SHUTDOWN:使用mysqladmin shutdown(用来关闭MySQL)
SUPER:使用CHANGE MASTER/KILL/LOGS/PURGE/MASTER/SET GLOBAL,
UPDATE:使用UPDATE
USAGE:无访问权限
mysql组件化_MySql笔记相关推荐
- 腾讯技术团队人手一份的Android组件化实战笔记(含得到、微信、美团、爱奇艺APP架构项目及源码)
前言 以前的Android开发大多用的中心化管理思想,将相同的资源集中进行管理.随着项目的发展,弊端渐显:集中管理的资源越来越多,多人开发也越来越麻烦,时常牵一发而动全身. 尤其是在大公司或者是大项目 ...
- mysql组件化_组件化开发和模块化开发概念辨析
网上有许多讲组件化开发.模块化开发的文章,但大家一般都是将这两个概念混为一谈的,并没有加以区分.而且实际上许多人对于组件.模块的区别也不甚明了,甚至于许多博客文章专门解说这几个概念都有些谬误. 想分清 ...
- mysql组件下载_MySQL数据库组件(MyDAC)
MyDAC是一款功能强大,专业实用的MySQL数据库组件,软件不但可以直接进入到MySQL的数据服务器,而且软件还可以用于检测连接损耗和隐式重新某些操作局部故障转移.有需要的小伙伴欢迎来西西下载体验. ...
- mysql sysdate() 慢_mysql笔记
mysql基础部分 中间补充 mysql获取系统时间 1.获取单个年月日 2.获取当前时间,格式为YYYY-MM-DD HH:mm:ss 3.获取当前年月日 4.获取时分秒 5.获取当前时间的秒数 格 ...
- mysql丢失召回_mysql笔记
1.1启动与关闭mysql 单实例: 方法一: /etc/init.d/mysqld start/stop netstat -lnt|grep 3306 提示:/etc/init.d/mysqld由m ...
- mysql业务 日志_mysql笔记之日志篇
mysql中日志主要分为以下几种:错误日志.慢查询日志.二进制日志和事务日志. 1. 错误日志 记录mysql启动时发生的错误信息,没什么好说的,因为工作中不常用. 2. 慢查询日志 这是mysql维 ...
- mysql ibd 附加_MySQL笔记-ibd文件格式初步分析(仅数据块笔记)
在MySQL建立表后,会在对应的库文件夹下创建2个文件. 一个是frm,一个是ibd,目前这个博文为简单分析下这个文件格式. 这里首先要知道一些预备知识: 查看InnoDB块的大小,一般是16k sh ...
- mysql with 查询_mysql笔记(6)-多表查询之with
本文将简单介绍with子句的格式和用法 1.目的 通过创建一张(或多张)临时表,实现数据的抽离,从而方便进行数据的比较 2.格式 //创建2张临时表,并在这2张临时表的基础上进行查询 with tem ...
- 组件化 Todo List 编写笔记
前言 在学习 Vue.js 组件化开发 Todo List 的时候,自己虽然也能编码实现,但如果不做笔记,只是写代码,学习的效果还不够好.只有把自己的实现思路记录下来,遇到的问题和解决方法也记录下来, ...
最新文章
- hbase集群间数据迁移
- stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE
- 版本控制:SVN和GIT的一些使用感受
- 利用Quartus设计4位同步二进制加法计数器
- 张首晟:量子计算、人工智能与区块链
- 如何给SAP C4C的产品主数据division配置出新的下拉选项
- cuda矩阵相乘_cuda初学(1):稀疏矩阵向量乘法(单精度)
- html文件怎么导出stl文件,3D建模软件导出STL文件的小技巧(一)
- MyBatis的resultType和resultMap的区别
- linux下dns视图配置
- 为什么单线程的Redis能够达到百万级的QPS?
- 百度搜索跳过验证码_百度搜索是死是活?网友吵翻了天,你觉得呢
- USYD悉尼大学DATA 2002 【Module 1】: Categorical data 学习笔记(week1-week3)
- 云脉人脸识别门禁 拒绝“伪装”蒙混过关
- 【论文笔记】LSNet: Extremely Light-Weight Siamese Network For Change Detection in Remote Sensing Image
- iPhone销售不佳,苹果进退失据
- photoshop第五章:图像的调整
- 一步一步教你自定义博客园(cnblog)界面
- Shell函数的定义及用法
- 学会python如何利用业余时间赚外快?分享几个接私单途径,分分钟月入3K+
热门文章
- python3 ftp.mlsd,python3中的ftp目录
- cnn 一维时序数据_蚂蚁集团智能监控的时序异常检测:基于 CNN 神经网络的异常检测...
- Linux查看时间段文件,Linux查看特定时间段内修改过的文件
- linux 添加本地源,linux 添加本地yum源
- c语言如何随机获取1kb,基于VS2010+C语言实现播放器的顺序播放、随机播放
- yaml报错TypeError: load() missing 1 required positional argument: ‘Loader‘
- csp-s模拟测试41「夜莺与玫瑰·玫瑰花精·影子」
- MTK 移植泰文输入法
- Go-Mutex互斥量
- 微服务之数据同步Porter 1