• 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 NULLIS 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 NULLIS 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;

    自己做得任务发出来的,很久了。

  • 相关阅读:
    Android性能优化--ANR
    Android性能优化--冷启动优化(Application)
    Android性能优化--UI卡顿
    Android性能优化--内存泄漏
    java反射
    数据结构之约瑟夫问题(循环链表)(C++版)
    数据结构之杨辉三角(队列实现)(C++版)
    vue组件间通信六种方式
    类型转换
    千分位
  • 原文地址:https://www.cnblogs.com/babyfei/p/6991465.html
Copyright © 2020-2023  润新知