SELECT c.id , c.name , COUNT(o.num) AS num
FROM customers AS c
LEFT OUTER JOIN orders AS o
ON c.id = o.id GROUP BY c.id;
CREATE TABLE productbotes
(
note_id int NOT NULL AUTO_INCREMENT, //自增
prod_id char(20) NOT NULL,
note_date datetime NOT NULL,
note_text text NULL,
PRIMARY KEY(note_id), //主键
FULLTEXT (note_text) //索引
)ENGINE = MyISAM;
SELECT note_text
FROM productbotes
WHERE Match(note_text) Against("rabbit");
解析:此检索语句只查询 note_text 列Match(note_text) 针对指定的列搜索,
Against("rabbit") 作为搜索文本 返回两行包括 rabbit 的内容。
SELECT note_text
Match(note_text) Against("rabbit") AS rank
FROM productnotes;
上面例子rank 列 会显示等级值 (根据包含 rabbit 个数 和 它所在的行数)
根据等级制排序 越高越靠前显示
SELECT note_text
FROM productnotes
WHERE Mctch(note_text) Against("anvils" WITH QUERY EXPANSION);//使用关键词扩展查询
//匹配包含 heavy 词 但不包含任意以 rope 开始的词的行
SELECT note_text
FROM productnotes
WHERE Mctch(note_text) Against("heavy -rope*" IN BOOLEAN MODE);
// - 代表排除 * 代表截断
INSERT INTO Students
VALUES(NULL, //此处id会自动增量
"LiHua", //没有值的列应该使用NULL(前提该列允许NULL)
28,
"AnHui");
INSERT INTO students(id,
name,
age,
address)
VALUES(NULL,
"LiHua",
28,
"AnHui");
//降低 INSERT 语句的优先级 目的:为了高性能的 SELECT
INSERT LOW_PRIORITY INTO...
INSERT INTO students(id,
name,
age,
address)
VALUES(NULL,
"LiHua",
24,
"ShangHai"
),( //每组值用括号括起来 逗号分开
NULL, //使用单条语句插入要比多条语句插入性能要快
"zhangsan",
26,
"ANHUI"
);
/*例子:把 custnew 表中的数据导入到 customers
应该首先创建和填充custnew 表 不应该使用在 customers 中使用过的cust_id 值
防止后续插入错误*/
INSERT INTO customers(cust_id,
cust_contact,
cust_name)
SELECT cust_id,
cust_contact,
cust_name
FROM custnew;
/* SELECT 中列出的每个列对应 customers 后所跟列 (也可以不用两张表列名
相同只需对应各自位置即可,其中select 语句可跟WHERE 筛选)
例子中导入了 cust_id 前提是确保 cust_id 不重复 也可以不导入此列*/
UPDATE personSET name = "刘德华"WHERE id = 111;/*更新多个列 中间用逗号隔开*/UPDATE personSET name = "刘德华", age = 27 WHERE id = 111;
UPDATE IGNORE person.....
UPDATE person SET name = null /* 可以设置其为 NULL */WHERE id = 111;
DELETE FROM personWHERE id = 111; /*删除 id 为 111 的一行数据*/
CREATE TABLE person /*如果想在表不存在创建表则只需要在表名后添加 IF NOT EXISTS */( per_id int NOT NULL AUTO_INCREMENT, /*自增*/ per_name var(20) NOT NULL, per_age int NOT NULL, PRIMARY KEY (per_id) /*定义主键*/) ENGINE = InnoDB;
SELECT last_insert_id() /*返回最后一个 AUTO_INCREMENT 值*/
CREATE TABLE person( id int NOT NULL AUTO_INCREMENT, age int NOT NULL DEFAULT 25,/*默认25岁 */ name var(20) NOT NULL, PRIMARY KEY(id))ENGINE = InnoDB;
ALTER TABLE personADD height int NOT NULL;
DROP TABLE person;
RENAME TABLE person TO persons;
SELECT cust_name,cust_contact /*三表联查*/
FROM customers, orders,orderitems
WHERE customers.cust_id = orders.cust_id
AND orderitems.order_num = orders.order_num
AND prod_id = "TNT2";
/*创建视图*/
CREATE VIEW productcustomers AS /*使用 CREATE VIEW 创建视图*/
SELECT cust_name,cust_contact
FROM customers, orders,orderitems
WHERE customers.cust_id = orders.cust_id
AND orderitems.order_num = orders.order_num
/*进行查询*/
SELECT cust_name,cust_contact
FROM productcustomers /*作为视图,不包含表中数据,包含的是SQL查询*/
WHERE prod_id = "TNT2"; /*如果原表更改 则视图返回更改之后的数据*/
CREATE VIEW good AS
SELECT Contact(RTrim(vend_name),"(," RTrim(vend_country),")")
AS vendors
ORDER BY vend_name;
CREATE VIEW well AS
SELECT id,name /*如果有两个WHERE语句 则会组合(一组在视图中 一组在查询中)*/
WHERE age>18;
CREATE VIEW gg AS
SELECT name ,
age*height
FROM person;
CREATE PROCEDURE productpricing() /* 存储过程名为 productpricing 如果接受参数则需在括号定义*/
BEGIN
SELECT Avg( prod_price ) AS priceaverage
FROM products;
END; /* BEGIN 和 END 定义存储体 */
/* 由于MySQL语句分隔符和 命令行实用程序都为' ; ' 这可能出现错误 */
DELIMITER // /*告诉命令行实用程序使用 // 作为新的语句分隔符*/
CREATE PROCEDURE productpricing()
BEGIN
SELECT Avg( prod_price ) AS priceaverage
FROM products;
END//
DELIMITER ; /* 恢复原来的语句分隔符 */
CALL productpricing(); /*调用无参*/
DROP PROCEDURE IF EXISTS productpricing; /*仅当存在时删除,后面没有括号*/
CREATE PROCEDURE productpricing ( OUT pl DECIMAL(8,2), /* OUT 从存储过程传出给调用者 MySQL 还支持 IN 传递给存储过程*/ OUT ph DECIMAL(8,2), /* INOUT 对存储过程传入和传出类型的参数 */ OUT pa DECIMAL(8,2))BEGIN /* 存储过程的代码位于 BEGIN 和 END */ SELECT Min(prod_price) INTO pl /*存储最低价格 通过 INTO 保存在指定的变量*/ FROM products; SELECT Max(prod_price) INTO ph /*存储最高价格*/ FROM products; SELECT Avg(prod_price) INTO pa /*存储平均价格*/ FROM products;END;/* 调用它 */CALL productpricing(@pricelow @pricehigh @priceaverage); /*调用有参 他们是保存结果的三个变量 所有MySQL变量都以@开头*//* 调用后 不显示任何结果 */SELECT @pricelow ;/* 或者 */SELECT @pricelow, @pricehigh, @priceaverage;
CREATE PROCEDURE ordertotal( IN onumber INT, /* IN 代表 onumber 被传入存储过程 */ OUT ototal DECIMAL(8,2) /* OUT 代表 ototal 被传出存储过程 */)BEGIN SELECT Sum(item_price*quantity) FROM orderitems WHERE order_num = number INTO ototal; /* INTO 使用ototal存储计算出来的合计 */END;/*调用*/CALL ordertotal(2005,@total); /*第一个参数为订单号,第二个参数为包含计算出来的合计的变量名*/SELECT @total;
CREATE PROCEDURE ordertotal( IN onumber INT, IN taxable BOOLEAN, /*添加一个boolean参数*/ OUT ototal DECIMAL(8,2))COMMENT "Obtain order total,optionally adding tax " /*comment 不是必须的 加上将可以在*/BEGIN /*SHOW PROCEDURE STATUS 的结果中显示*/ /*定义两个局部变量*/ DECLARE total DECIMAL(8,2); DECLARE taxrate INT DEFAULT 6; /*默认6%*/ SELECT Sum(item_price*quantity) FROM orderitems WHERE order_num = onumber INTO total; /*暂时保存局部变量*/ IF taxable THEN SELECT total+(total/100*taxrate) INTO total; END IF; SELECT total INTO ototal;END; /*调用*/CALL ordertotal(2021,0,@ototal); /* 0 表示假 1表示真*/SELECT @ototal;
SHOW CREATE PROCEDURE ordertotal; /*为了获取何时由谁创建等信息*/
CREATE PROCEDURE processorders()BEGIN DECLARE o INT; /*定义变量*/ DECLARE ordernumbers CURSOR /*定义和命名游标*/ FOR SELECT order_num FROM orders; OPEN ordernumbers; /*打开游标 会执行查询 */ FETCH ordernumbers INTO o;/*使用 FETCH 将检索的数据 自动从第一行开始到O这个局部变量*/ CLOSE ordernumbers; /*关闭游标*/END;
DELETEINSERTUPDATE/*其他语句不支持触发器*/
/*CREATE TRIGGER 创建在Insert products 后每一行只要插入 就会出现 "Product added" */
CREATE TRIGGER newproduct AFTER INSERT ON products
FOR EACH ROW SELECT "Product added";
DROP TRIGGER newproduct; /*触发器不能更新,只能先删除后创建*/
CREATE TRIGGER neworder AFTER INSERT ON orders /*创建neworder 触发器在AFTER INSERT 之后执行*/
/*创建一个NEW 表,每次插入就会在order_num 插入值,触发器从NEW.order_num取得值并返回它*/
FOR EACH ROW SELECT NEW.order_num;
通常 BEFORE 用于验证数据正确性,保证插入值正确
### DELETE 触发器
-
## 事务
### 事务处理
- InnoDB 引擎支持事务处理
- 维护数据的完整性,保证成批的MySQL 要么完全执行,要么完全不执行
### 概念
- 事务处理:是一种机制,用来管理必须成批执行的MySQL操作,以保证数据库
不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,它
们或者作为整体执行,或者不完全执行,如果发生错误则进行回退,恢复数据库
到某个已知且安全的状态,如果不发生错误整组语句提交到数据库
### 名词
- 事务:指一组SQL语句 transaction
- 回退:指撤销指定SQL语句的过程 rollback
- 提交:指将未存储的SQL语句写入数据库 commit
- 保留点:指事务处理中设置的临时占位符 savepoint
### 控制事务处理
~~~mysql
SELECT * FROM ordertotals;
START TRANSACTION; /*标志事务的开始*/
DELETE FROM ordertotals;
SELECT * FROM ordertotals;
ROLLBACK; /*回退 START 之后的所有语句(用来撤销MySQL语句) 只能回退 增 删 改*/
SELECT * FROM ordertotals;
START TRANSACTION;
DELETE FROM orderitems WHERE order_num = 2021; /*因设计两表的语句 使用事务*/
DELETE FROM orders WHERE order_num = 2021;
COMMIT; /*仅在两条语句不出错的情况下提交*/
SAVEPOINT delete1; /*设置保留点 保证名称唯一*/
ROLLBACK TO delete1; /*回退到保留点*/
SET autocommit = 0; /*0表示关闭自动提交*/
USE mysql; /*MySQL 用户账户和信息存储在名为mysql 的数据库中*/
SELECT user FROM user; /*user 表存储所有用户账号,user列存储用户登录名*/
CREATE USER ben IDENTIFIED BY 'P@$$WOrd';
RENAME USER ben TO bforta;
DROP USER bforta;
SHOW GRANTS FOR bforta;
GRANT SELECT ON crashcourse.* TO bforta; /*允许bforta 在crashcourse数据库上所有表使用查询*/
REVOKE SELECT ON crashcourse.* FROM bforta;
SET PASSWORD FOR bforta = Password('root'); /*新口令必须到Password()函数加密*/
/*设置当前登录用户的口令*/
SET PASSWORD = Password('root');
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手
我看到其他人也遇到过类似的问题,但没有一个解决方案对我有用。0.3.14gem与其他gem文件一起存在。我已经完全按照此处指示完成了所有操作:https://github.com/brianmario/mysql2.我仍然得到以下信息。我不知道为什么安装程序指示它找不到include目录,因为我已经检查过它存在。thread.h文件存在,但不在ruby目录中。相反,它在这里:C:\RailsInstaller\DevKit\lib\perl5\5.8\msys\CORE\我正在运行Windows7并尝试在Aptana3中构建我的Rails项目。我的Ruby是1.9.3。$gemin
我已经开始使用mysql2gem。我试图弄清楚一些基本的事情——其中之一是如何明确地执行事务(对于批处理操作,比如多个INSERT/UPDATE查询)。在旧的ruby-mysql中,这是我的方法:client=Mysql.real_connect(...)inserts=["INSERTINTO...","UPDATE..WHEREid=..",#etc]client.autocommit(false)inserts.eachdo|ins|beginclient.query(ins)rescue#handleerrorsorabortentirelyendendclient.commi
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?
文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景 最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。 在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记
我正在尝试绕过rails配置这个极其复杂的迷宫。到目前为止,我设法在ubuntu上设置了rvm(出于某种原因,ruby在ubuntu存储库中已经过时了)。我设法建立了一个Rails项目。我希望我的测试项目使用mysql而不是mysqlite。当我尝试“rakedb:migrate”时,出现错误:“!!!缺少mysql2gem。将其添加到您的Gemfile:gem'mysql2'”当我尝试“geminstallmysql”时,出现错误,告诉我需要为安装命令提供参数。但是,参数列表很大,我不知道该选择哪些。如何通过在ubuntu上运行的rvm和mysql获取rails3?谢谢。
目录1、yum安装mysql修改密码(1)在mysql里面修改(2)第二种方式,利用mysqladmin修改密码2、没有密码,登录mysql修改密码3、mysql的安全设置1、yum安装mysql在CentOS中默认安装有MariaDB(MySQL的一个分支),安装完成之后可以直接覆盖MariaDB。rpm-qa|grepmariadb查询是否安装了mariadbrpm-e--nodepsmariadb-libs-5.5.60-1.el7_5.x86_64卸载mariadwgethttp://dev.mysql.com/get/mysql57-community-release-el7-11.
我是Ruby的新手。我安装了DataMapper并且正在尝试安装dm-mysql-adapter-1.0.2gem。但是当我尝试安装时,出现以下错误。我正在使用ubuntu操作系统。vinoth@vinoth-laptop:~/Downloads$geminstalldm-mysql-adapter-1.0.2----with-mysql-lib=/usr/lib/mysql----with-mysql-conf=/usr/bin/mysqlWARNING:Installingto~/.gemsince/home/vinoth/gemsand/home/vinoth/gems/bina
我目前正在构建一个需要mysql2gem的RoR项目。我成功安装了gem。因为它出现在我的gem列表中。[root@vc2cmmka035538nsimple_cms]#gemlist***LOCALGEMS***actionmailer(3.2.3)actionpack(3.2.3)activemodel(3.2.3)activerecord(3.2.3)activeresource(3.2.3)activesupport(3.2.14,3.2.3)arel(3.0.2)bigdecimal(1.1.0)builder(3.2.2,3.0.0)bundler(1.1.5)c2c_li