• MySQL基本语法


    SQL中四种常用的语法类型
    ··· DDL 数据库定义语言
        常用语句:create,drop,alter,show。
        · create(增)
        · 创建数据库:create database name  character  set utf8;
        · 创建表:create table name (col1_name  type1, col2_name type2); 创建的表必须有字段
        · drop(删)
        · 删除数据库:drop database name;
        · 删除表:drop table name;
        · alter(改)
        · 修改数据库编码:alter database name character set utf8;
        · 修改表字段:alter table name change col_old  col_new  varchar(50);
        · 修改表字段类型:alter table name modify col varchar(50);
        · 增加一个表字段:alter table name add col_name varchar(50);
        · 删除一个表字段:alter table name drop col_name;   # 一次只能删一个字段。
        · 添加一个主键:alter table name add primary key(id);
        · 修改表名(rename):rename table old_name  to  new_name;
        · show(查)
        · 显示所有数据库:show databases;
        · 显示所有表:show tables;
        · 显示数据库的定义信息:show create database name;
        · 显示表的创建细节:show create table name;
        · 显示表的字段信息(desc):desc table_name;
    ··· DML 数据操作语言
        常用语句:insert,update,delete
    ··· DQL 数据查询语言
        常用语句:select  from,where,group by,having,order by,limit
    ··· DCL 数据控制语言
        常用语句:grant
     
    1,insert
    例子:insert  into  table_name(col1, col2) values (val1, val2), (val3, val4);
    ··· 注意:
        · insert插入的数据库是之前use的数据库。
     
    2,update
    例子:update  `table_name`  set col=new_col where col='筛选条件';
    ··· 注意:
        · update中字符串的连接不要使用+号,而要使用concat(a, b);方法。
        · update子查询中的表不能是update更新的表,可以通过再套一层from子查询解决。
     
    3,delete
    例子:delete from `table_name` where col='筛选条件';
    ··· 三种删除方法的比较:
        · 一行一行删除数据,有日志,可恢复。DML
            delete from table_name;   
        · 一次删除数据,不会激活触发器,不可恢复。表和索引空间恢复初始大小。速度快。DLL
            truncate table table_name;  
        · 删除表结构和数据,释放表和索引空间。DLL
            drop table table_name; 
     
    4,select
    ···支持的方法:
        聚合方法:count(), sum(), avg(), max(), min();   # 注意:count(*)或count(1)的性能高。
    ··· 其他操作:
        去重:distinct col_name;
        别名:col_name  '别名' 或者 col_name as '别名';  # 注意:别名在后面执行语句可以直接使用;
        保留小数:cast(val as decimal(15, 2));
     
    5,from
    ··· 支持的连接操作:
        内连接(交集):table1 A inner join table2 B on A.price = B.price;
        左连接:left join;交集+左表剩下的部分。
        右连接:right join;交集+右表剩下的部分。
        笛卡尔积: cross join;
        自然连接:nature join;连接字段名和值相同的行。
    ··· 关键字:
        on:根据什么字段连接两个表。
        using:类似于on,但是using会自动根据字段名连接。# 注意:两个表的字段名必须相同。
        union:合并两个结果集并去重;union all不去重。 # 注意:两个结果集字段必须一样。
    ··· 注意:
        · 对于中间表,如果要考虑没有记录的实体时,使用笛卡尔积。
        · MySQL不支持outer join外连接(并集),可以使用left+union+right来实现。
        · join与inner join等价;left join与left outer join等价。
        · 当给表取了别名后,只能使用别名,不能使用表名。
     
    6,where
    支持的操作:
    数值操作:>, =, <, >=, <=,判空:is null; is not null。
    日期操作:包括数值操作,计算年龄:datediff(year, 年龄列, getdate())。
    嵌套查询:where table1.price in (select table2.price
                                                              from table2
                                                              where table2.a > 80)
    模糊查询:where name like '%斌%';%: 匹配一个或多个;_ 匹配一个;[a-z][^a-z]正则。
     
    7,group by
    例子:group by col_name  根据某个列分组。
    ··· 注意:
        · 分组后的数据是一个个列表,因此在select中不能选择单个列,mysql8会返回每组的第一个
        · group by后面可以跟多个列,多个列会同时作为分组依据
     
    8,having
    例子:group by col_name  having  count(*) > 2;
    ··· 注意:
        · having是用来弥补在where中不能使用聚合函数的不足。
        · where是对分组前的单条数据过滤,having是对分组后的组聚合数据过滤。
     
    9,order by
    例子:order by col_name  根据某个列排序。
    ··· 注意:
        · 默认是升序,可以通过order by col_name desc降序排列。
        · order by后面可以跟多个列,当第一个列相等时,再比较第二个列。
     
    10,limit
    例子:select * from name limit  2, 10;  在筛选后的结果中,返回从第2条开始,共10条数据
    ··· 注意:
         · 项目中尽量多使用limit来分页。
         · limit是一条SQL语句中最后过滤数据的地方,只能放在最后。
         · SQL语句的编写顺序是select->from->where->group by->having->order by-->limit;
     
    11,建表注意事项
    ··· MySQL常用数据类型:
        · 类型(10):int, double, char, varchar, text, blob, date, time, datetime, timestamp;
        · int(10)中的10表示显示宽度,与长度和范围没有关系,int都是占用4个字节。
        · double(5, 2)表示长度为5,保留2位小数;最大为999.99。
        · char(5)表示固定长度为5的字符串,不足部分空格填充;'aa   '。
        · varchar(50)是可变长最大长度为50的字符串,经常用。
        · blob是字节类型,用来存储媒体文件,比如图片。
        · timestamp是时间戳,会自动赋值。
    ··· 常用约束:
        · 主键约束:id int primary key;联合主键 primary key(col1, col2);或使用alter添加。
        · 唯一约束:unique;唯一约束的字段可以为空。
        · 自动增长:auto_increment;不推荐。设置步长set @@auto_increment_increment=3
        · 外键约束:foreign key (id) references student(sid)。如果从表的外键字段是主键则与主表是一对一;如果是其他字段则默认是一对多。
     
     
    12,备份与恢复(导入导出)
    ··· 备份:mysqldump -u root -p  database_name > d:/back.sql  # 在命令行执行
    ··· 恢复:use database_name;  source  d:/back.sql;  # 导入到某个数据库(推荐)
    ··· 注意:
        · 不要使用其他工具导入。因为当数据量很大时,导入需要很久(可能几个小时)。
        · 不推荐使用mysql -u root -p database_name < back.sql来导入数据。
     
    其他注意事项
    · SQL中任何数加上null结果为null,可以使用ifnull(price, 0)来避免,如果为null就返回0。
    · MySQL中默认的单个文件大小是4M,通过更改my.ini的max_allowed_packed改变大小。
    · SQL语句的执行顺序是from->where->group by->having->select->order by->limit
  • 相关阅读:
    mysql如何解决幻读 孙龙
    ssh服务 孙龙
    apipost动态获取登录token,其他接口同步调用
    Linux下快速删除大文件
    运行jmeter的serverAgent源码报错:java.lang.UnsatisfiedLinkError: org.hyperic.sigar.Cpu.gather
    获取某个进程占用内存比例
    获取某个进程占用CPU比例,并将执行结果存到文件中
    svn将代码提交至本地仓库
    WebDriverWait(WebDriver driver, long timeoutInSeconds) 已弃用,如何替代
    查看linux系统内存和磁盘总大小
  • 原文地址:https://www.cnblogs.com/shendeng23/p/12405441.html
Copyright © 2020-2023  润新知