2,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

猜你喜欢

转载自www.cnblogs.com/shendeng23/p/12405441.html