mysql查改
1
MySQL UNION 操作符语法格式:
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n
FROM tables
[WHERE conditions];
- expression1, expression2, ... expression_n: 要检索的列。
- tables: 要检索的数据表。
- WHERE conditions: 可选, 检索条件。
- DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
- ALL: 可选,返回所有结果集,包含重复数据


2
GROUP BY 语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
GROUP BY 语法
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
DROP TABLE IF EXISTS `yy`;
CREATE TABLE `yy` (
`id` int(11) NOT NULL,
`name` char(10) NOT NULL DEFAULT '',
`date` datetime NOT NULL,
`singin` tinyint(4) NOT NULL DEFAULT '0' COMMENT '登录次数',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Records of `yyl`
INSERT INTO `yy` VALUES ('1', '22', '2016-04-22 15:25:33', '1'),
('2', '33', '2016-04-20 15:25:47', '3'),
('3', '11', '2016-04-19 15:26:02', '2'),
('4', '33', '2016-04-07 15:26:14', '4'),
('5', '22', '2016-04-11 15:26:40', '4'),
('6', '22', '2016-04-04 15:26:54', '2');
SET FOREIGN_KEY_CHECKS = 1;

使用 GROUP BY 语句 将数据表按名字进行分组,并统计每个人有多少条记录:
mysql> SELECT name, COUNT(*) FROM yy GROUP BY name;

WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。
将以上的数据表按名字进行分组,再统计每个人登录的次数:
mysql> SELECT name, SUM(singin) as singin_count FROM yy GROUP BY name WITH ROLLUP;

其中记录 NULL 表示所有人的登录次数。
使用 coalesce 来设置一个可以取代 NUll 的名称,coalesce 语法:
select coalesce(a,b,c);
参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。
如果名字为空我们使用总数代替:
mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM yy GROUP BY name WITH ROLLUP;

3
JOIN 按照功能大致分为如下三类:
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
右连接
SELECT student.student_no, student.class_no, classes.class_name FROM student student RIGHT JOIN classes classes ON classes.class_no = student.class_no;

左连接
SELECT student.student_no, student.class_no, classes.class_name FROM student student LEFT JOIN classes classes ON classes.class_no = student.class_no;

内连接:
SELECT a.student_name, a.student_no, b.class_no FROM student a INNER JOIN classes b ON a.class_no = b.class_no;

等价于:
SELECT a.student_name, a.student_no, b.class_no FROM student a, classes b where a.class_no = b.class_no;

4
MySQL使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。
为了处理这种情况,MySQL提供了三大运算符:
- IS NULL: 当列的值是NULL,此运算符返回true。
- IS NOT NULL: 当列的值不为NULL, 运算符返回true。
- <=>: 比较操作符(不同于=运算符),当比较的的两个值为NULL时返回true。
关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
在MySQL中,NULL值与任何其它值的比较(即使是NULL)永远返回false,即 NULL = NULL 返回false 。
MySQL中处理NULL使用IS NULL和IS NOT NULL运算符。
E.G.
create table nulldemo
-> (
-> name varchar(40) not null,
-> count int
-> );
insert into nulldemo(name,count) values('mark','22');
insert into nulldemo(name,count) values('martin',null);
insert into nulldemo(name,count) values('jan',null);
insert into nulldemo(name,count) values('jane','23');
SELECT * from nulldemo;
查找数据表中 count 列是否为 NULL,必须使用IS NULL和IS NOT NULL



用nulldemo表为例:
查找name字段中以'st'为开头的所有数据:
SELECT name FROM nulldemo WHERE name REGEXP '^mar';

查找name字段中以'ok'为结尾的所有数据:
SELECT name FROM nulldemo WHERE name REGEXP 'in$';

查找name字段中包含'mar'字符串的所有数据:
SELECT name FROM nulldemo WHERE name REGEXP 'mar';

先插入一个以元音字母开头的名字:
insert into nulldemo values('online','34');
查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:
SELECT name FROM nulldemo WHERE name REGEXP '^[aeiou]|in$';


5
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
- 在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务
- 事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行
- 事务用来管理insert,update,delete语句
一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
- 1、事务的原子性:一组事务,要么成功;要么撤回。
- 2、稳定性 : 有非法数据(外键约束之类),事务撤回。
- 3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
- 4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。
- start transaction 开始一个事务
savepoin 保存点名称
操作
- 可以回滚,可以提交,没有问题,就提交,有问题就回滚。
6
需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令。
create table alterdemo
-> (
-> i int,
-> c char(1)
-> );
SHOW COLUMNS FROM alterdemo;
ALTER TABLE alterdemo DROP i;

如果数据表中只剩余一个字段则无法使用DROP来删除字段。
alter table alterdemo drop i;
MySQL 中使用 ADD 子句来想数据表中添加列,如下实例在表alterdemo中添加 i 字段,并定义数据类型:
alter table alterdemo add i int;执行以上命令后,i 字段会自动添加到数据表字段的末尾。
SHOW COLUMNS FROM alterdemo;
如果你需要指定新增字段的位置,可以使用MySQL提供的关键字 FIRST (设定位第一列), AFTER 字段名(设定位于某个字段之后)。
尝试以下 ALTER TABLE 语句, 在执行成功后,使用 SHOW COLUMNS 查看表结构的变化:
ALTER TABLE alterdemo DROP i;
ALTER TABLE alterdemo ADD i INT FIRST;
ALTER TABLE alterdemo DROP i;
ALTER TABLE alterdemo ADD i INT AFTER c;


FIRST 和 AFTER 关键字只占用于 ADD 子句,所以如果你想重置数据表字段的位置就需要先使用 DROP 删除字段然后使用 ADD 来添加字段并设置位置。
修改字段类型及名称
如果需要修改字段类型及名称, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。
ALTER TABLE alterdemo MODIFY c CHAR(10);

使用 CHANGE 子句, 语法有很大的不同。 在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段名及类型。
ALTER TABLE alterdemo CHANGE i j BIGINT;

修改字段时,可以指定是否包含只或者是否设置默认值。指定字段 j 为 NOT NULL 且默认值为100 。
ALTER TABLE alterdemo CHANGE j j INT;

使用 ALTER 来修改字段的默认值
ALTER TABLE alterdemo modify j BIGINT not null default 100;

使用 ALTER 命令及 DROP子句来删除字段的默认值
alter table alterdemo alter j drop default;

使用 ALTER 命令及 TYPE 子句来完成。尝试以下实例,我们将表 alterdemo的类型修改为 MYISAM :
查看数据表类型可以使用 SHOW TABLE STATUS 语句。
alter table alterdemo engine=myisam;
show table status like 'alterdemo'\G

如果需要修改数据表的名称,可以在 ALTER TABLE 语句中使用 RENAME 子句来实现。
alter table alterdemo rename to alterdem;
自己做得任务发出来的,很久了。
mysql查改的更多相关文章
- nodejs连接mysql并进行简单的增删查改
最近在入门nodejs,正好学习到了如何使用nodejs进行数据库的连接,觉得比较重要,便写一下随笔,简单地记录一下 使用在安装好node之后,我们可以使用npm命令,在项目的根目录,安装nodejs ...
- php mysql增删查改
php mysql增删查改代码段 $conn=mysql_connect('localhost','root','root'); //连接数据库代码 mysql_query("set na ...
- node.js+mysql增删查改
数据库和表: -- -- 数据库: `test` -- -- -------------------------------------------------------- -- -- 表的结构 ` ...
- PHP与MYSQL结合操作——文章发布系统小项目(实现基本增删查改操作)
php和mysql在一起几十年了,也是一对老夫老妻了,最近正在对他们的爱情故事进行探讨,并做了一个很简单的小东西——文章发布系统,目的是为了实现mysql对文章的基本增删查改操作 前台展示系统有:文章 ...
- mysql 增删查改
非关系型数据库关系型数据库Oracle mysql sqlserver db2 Postgresql Sqlite access sqlserver 微软db2 ibm================ ...
- mybatis、spring、mysql、maven实现简单增删查改
之前写过的mybatis博客作为学习mybatis.spring还是不太合适. 现在找到一个不错的例子,首先将这个完整的mybatis增删查改例子在本地上实现出来,然后再进行学习. 项目结构与运行结果 ...
- Java连接MySQL数据库及简单的增删查改操作
主要摘自 https://www.cnblogs.com/town123/p/8336244.html https://www.runoob.com/java/java-mysql-connect.h ...
- Python对MySQL进行增删查改
python连接MySQL数据库:pymysql # 测试操作 import pymysql # 打开数据库 db = pymysql.connect("localhost", & ...
- 后端Spring Boot+前端Android交互+MySQL增删查改(Java+Kotlin实现)
1 前言&概述 这篇文章是基于这篇文章的更新,主要是更新了一些技术栈以及开发工具的版本,还有修复了一些Bug. 本文是SpringBoot+Android+MySQL的增删查改的简单实现,用到 ...
随机推荐
- 【探路者】Postmortem会议(“事后诸葛亮”会议)
[探路者]Postmortem会议(“事后诸葛亮”会议) 整理:米赫 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的贪吃蛇游戏主要将完成一个 ...
- java程序设计课程实验报告3
北京电子科技学院(BESTI) 实 验 报 告 课程:java程序设计 班级:1353 姓名:陈都 学号:20135328 成绩: 指导教师:娄 ...
- 第二阶段每日站立会议Forth Day
昨天对于程序中的字体显示进行细化修改,使界面更美观 今天准备继续调试手机界面 遇到的问题:上几次Tomcat运行正常,今天突然出现问题,Tomcat服务可以打开,但是无法连接到数据库
- Task 6.4 冲刺Two之站立会议4
今天对主界面部分的代码进行了完善,因为主界面有对于用户账号的设置.包括头像修改.增删好友.进入聊天界面等功能,包含的内容很多.我主要是负责跟聊天界面的连接以及账号设置的部分:遇到的问题有,因为这部分依 ...
- Javascript面向对象二
Javascript面向对象二 可以通过指定原型属性来对所有的对象指定属性, Object.prototype.name="zhangsan"; Object.prototype. ...
- Linux内核0.11 setup文件说明
一.总体功能介绍 这是关于Linux-kernel-0.11中boot文件夹下setup.s源文件的实现功能的总结说明. setup.s是一个操作系统加载程序,它的主要功能是利用BIOS中断读取机器系 ...
- [转帖]Beyond Compare如何进行二进制比较
Beyond Compare如何进行二进制比较 http://www.beyondcompare.cc/jiqiao/erjinzhi-bijiao.html 在使用Beyond Compare软件比 ...
- PHP开发网站,你是如何提高其网站的安全性的?
一.网站程序问题 很多网站的安全问题大多是由于网站程序存在漏洞,所以想要提高网站安全性,必须要选择安全的后台cms系统,若有能力可以自己去开发网站后台,这样安全性能得到极大的提高,若是从网上选择一些免 ...
- mysql中enum类型
ENUM类型 ENUM 是一个字符串对象,其值通常选自一个允许值列表中,该列表在表创建时的列规格说明中被明确地列举. 在下列某些情况下,值也可以是空串("") 或 NULL: 如果 ...
- 【Java并发编程】之八:多线程环境中安全使用集合API
在集合API中,最初设计的Vector和Hashtable是多线程安全的.例如:对于Vector来说,用来添加和删除元素的方法是同步的.如果只有一个线程与Vector的实例交互,那么,要求获取和释放对 ...