zoukankan      html  css  js  c++  java
  • MySQL常用操作汇编

    熟悉

    我熟悉xxx,其实很多原来熟悉到能背的,如果长时间不用了几乎也就忘了。此时再说自己熟悉XXX就被认为是在吹牛B了,感觉不是很好。所谓温故而知新,对于天资不聪颖的,就是要在一遍一遍的复习实践中慢慢理解掌握、获取别人可能一天就就明白记住的事情。

    查看建表语句

    show create table table_name;
    

    复制表

    根据已有的表新建一张表,可以使用

    CREATE TABLE new_table_name SELECT * FROM old_table_name;
    

    如一张表为Person如下:

    mysql> select * from Person;
    +----+------------------+
    | Id | Email            |
    +----+------------------+
    |  1 | john@example.com |
    |  2 | bob@example.com  |
    |  3 | john@example.com |
    +----+------------------+
    3 rows in set (0.00 sec)
    

    进行复制操作

    mysql> create table person_bakup select * from Person;
    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Duplicates: 0  Warnings: 0
    

    也可以通过查看建表语句,然后复制修改得到新表,然后使用

    insert into new_table select * from old_table;
    

    删除语句

    删除语句中的条件有些限制比如

    DELETE FROM table_name WHERE id in (select A.id from table_name A, table_name B where  A.vala > B.vala and A.valb == B.valb)
    

    如果把valb理解为部门id,把vala理解为工资,那么上述语句在能执行的情况下得到的效果为保留table_name中每个部门里工资最低的那个人得记录。但是真的去执行的话会报错,因为DELETE中的where好像不能直接写和正在删除那个表有关的条件(其实也可以理解,如果一边删一遍条件就会相应的变掉了),但其实我们只要更加没有删前的条件来执行语句,并不会产生这样的情况或者这样的需求。同过嵌套一层select可以达到这个目的:

    DELETE FROM table_name WHERE id in (select * from (select A.id from table_name A, table_name B where  A.vala > B.vala and A.valb == B.valb) X)
    

    查询

    别名

    列别名

    列别名可以用在order by, group by 和having子句中,但是不能用在where子句中,比如下面这样的sql会报错

    select name as s from students where s = 'tkl'
    

    Unknown column 's' in 'where clause'

    列别名一般只是做一个名称统一工作,来返回给应用后台。因为实际列在不同查询中可能是通过不同途径得到的,也可能在不同的表中以不同的列名存在,而后台应用程序的特定程序语言实现的Model一般都是字段名称已经固定的,统一名称可以方便的做ORM。

    表别名

    表别名使用的比较多,第一它可大大的简化SQL语句,因为处于避免重名和其他的一些命名考虑,表名通常不会太短。第二它可以使得一些原本无法进行的查询得以执行,通常是做表自身连接操作,连接从语义上讲应该是两个表之间进行,如果同一张表进行自连接不采用别名,那么就还是认为只有一个表,从而发生错误。比如有一张成绩表score(id, name, score, class),现在要找出每个class中获得相同分数(只要分数重复了就可以)的那些人。使用别名可以得到如下sql语句

    select A.* from score as A, score as B where A.class = B.class and A.score = B.score
    

    这里没有使用显式的连接,在where中使用多个表,相当于是做了一次笛卡尔积,然后再根据条件筛选。

  • 相关阅读:
    .net Core 配置Centos守护进程Supervisor
    .net Core 安装在linux上
    Mariadb Galera Cluster 搭建集群
    MariaDB 安装配置记录
    MariaDB 安装
    wso2 linux上部署说明
    RestFul 架构详解
    SpirngBoot之整合邮件服务
    SpringBoot之模板引擎
    SpringBoot之持久化框架
  • 原文地址:https://www.cnblogs.com/lailailai/p/4700482.html
Copyright © 2011-2022 走看看