待完成…

一、Mysql基础

SQL的分类:

1、DDL—数据定义语言(Data Define Language):create(创建),alter(修改),drop(删除),TRUNCATE(截断),RENAME(重命名);
2、DML—数据操纵语言(Data Manipulation Language):select(查询),delete(删除),update(更新),insert(新增);
3、DCL—数据控制语言(Data Control Language):grant(添加权限),revoke(回收权限);

DDL操作:
注意:使用DDL语言时,必须在动词后跟上数据库对象名词(例如:TABLE、VIEW、INDEX、SCHEMA、TRIGGER等)。
数据库的链接

# mysql -h 127.0.0.1 -u root -p

常用的参数解释:

-A 不预读数据库信息,提高连接和切换数据库速度,使用--disable-auto-rehash代替
--default-character-set  使用的默认字符集
-e 执行命令并退出
-h 主机地址
-p 连接到服务器时使用的密码
-P 连接的端口号

创建数据库:

create database test1 ;

查看数据库:

show databases;

选择数据库:

use mysql;

删除数据库:

drop database test1;

创建表:

CREATE  [TEMPORARY]  TABLE  [IF NOT EXISTS] [database_name.] <table_name>
(<column_name>  <data_type>  [[not] null],…
)

注:TEMPORARY:指明创建临时表
  IF NOT EXISTS:如果要创建的表已经存在,强制不显示错误消息
  database_name:数据库名
  table_name:表名
  column_name:列名
  data_type:数据类型

  
查看定义:

desc emp;

查看创建的表:

show create table emp ;

更新表名:

 alter table emp rename users;

删除表:

drop table emp;

修改表字段:

alter table emp modify ename varchar(30);

增加表字段:

alter table emp add column age int(3);

修改表字段:

alter table emp change age age int(4);

删除表字段:

alter table emp drop column age;

change和modify:

前者可以修改列名称,后者不能.
change需要些两次列名称.

字段增加修改 add/change/modify/ 添加顺序:

1 add 增加在表尾.
2 change/modify 不该表字段位置.
3 修改字段可以带上以下参数进行位置调整(frist/after column_name);alter table emp change age age int(2) after ename;
alter table emp change age age int(3) first;

DML语句:
插入记录:

//指定字段,
//自增,默认值等字段可以不用列出来,没有默认值的为自动设置为NULL
insert into emp (ename,hiredate,sal,deptno) values ('jack','2000-01-01','2000',1);//可以不指定字段,但要一一对应
insert into emp values ('lisa','2010-01-01','8000',2);

批量记录:

insert into emp values ('jack chen','2011-01-01','18000',2),('andy lao','2013-01-01','18000',2);

更新记录:

update emp set sal="7000.00" where ename="jack";update emp e,dept d set e.sal="10000",d.deptname=e.ename where e.deptno=d.deptno and e.ename="lisa";

删除记录:

//请仔细检查where条件,慎重
delete from emp where ename='jack';

查看记录:

//查看所有字段
select * from emp;//查询不重复记录
select distinct(deptno) from emp ;
select distinct(deptno),emp.* from emp ;//条件查询
//比较运算符: > < >= <= <> != ...
//逻辑运算符: and or ...
select * from emp where sal="18000" and deptno=2;

排序

//desc降序,asc 升序(默认)
select * from emp order by deptno ;
select * from emp order by deptno asc;
select * from emp order by deptno desc,sal desc;

限制记录数:

select * from emp limit 1;
select * from emp limit 100,10;
select * from emp order by deptno desc,sal desc limit 1;

聚合:函数:count():记录数 / sum(总和); / max():最大值 / min():最小值

select count(id) from emp ;
select sum(sal) from emp ;
select max(sal) from emp ;
select min(sal) from emp ;

group by分组:

//分组统计
select count(deptno) as count from emp group by deptno;
select count(deptno) as count,deptno from emp group by deptno;
select count(deptno) as count,deptno,emp.* from emp group by deptno;

having 对分组结果二次过滤:

select count(deptno) as count,deptno from emp group by deptno having count > 2;

with rollup 对分组结果二次汇总:

select count(sal),emp.*  from emp group by sal, deptno with rollup ;

表连接:

  • left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录;
  • right join :右连接,返回右表中所有的记录以及左表中连接字段相等的记录;
  • inner join: 内连接,又叫等值连接,只返回两个表中连接字段相等的行;
  • full join:外连接,返回两个表中的行:left join + right join;
  • cross join:结果是笛卡尔积,就是第一个表的行数乘以第二个表的行数。

内连接:只返回两个表中连接字段相等的行

select * from emp as e,dept as d where e.deptno=d.deptno;
select * from emp as e inner join dept as d on e.deptno=d.deptno;

左外连接:包含左表中所有的记录以及右表中连接字段相等的记录

select * from emp as e left join dept as d on e.deptno=d.deptno;

右外连接:包含右表中所有的记录以及左表中连接字段相等的记录

select * from emp as e right join dept as d on e.deptno=d.deptno;

子查询:

//=, !=
select * from emp where deptno = (select deptno from dept where deptname="技术部");
select * from emp where deptno != (select deptno from dept where deptname="技术部");//in, not in
//当需要使用里面的结果集的时候必须用in();
select * from emp where deptno in (select deptno from dept where deptname="技术部");
select * from emp where deptno not in (select deptno from dept where deptname="技术部");//exists , not exists
//当需要判断后面的查询结果是否存在时使用exists();
select * from emp where exists (select deptno from dept where deptno > 5);
select * from emp where not exists (select deptno from dept where deptno > 5);

记录联合:

union:返回去重之后的结果
select ename from emp union select ename from emp;union all:返回所有结果
select ename from emp union all select ename from emp;

DCL语句:
添加权限:

grant select,insert on test.* to 'db_user_1'@'localhost'  identified by '123456';
flush privileges;

回收权限:

revoke insert on test.* from 'db_user_1'@'localhost';

二、Mysql数据类型

整数类型:

指定宽度:
指定显示的宽度为5,不影响实际数据

create table t1 (id int , id2 int(5));

注:INT(4)与INT(5),括号中的字符表示显示宽度,整数列的显示宽度与MySQL需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,INT类型的字段能存储的数据上限还是2147483647(有符号型)和4294967295(无符号型)。其实当我们在选择使用INT的类型的时候,不论是int(4)还是int(5),它在数据库里面存储的都是4个字节的长度。
zerofill:
采用零填充,不足5位采用0填充,配合数据宽度

create table t2 (id int , id2 int(5) zerofill);

unsigned:

create table t3 (id int , id2 int(5) unsigned);

auto_increment:
只用于整数类型
产生唯一标识
值从1开始,逐行增加
一个表中最多只能存在一个自增列
自增列应该定义为not null
自增列应该这只为 primary key 或者 unique

id int not null auto_increment primary key

浮点数类型

定点数类型

float , double , decimal 特点:
1.(m,d)表示方式:m指的是整数位,d指的是小数位(又称作精度和标度)
2.float/double四舍五入丢失精度,decimal会截断数据并输出warning
3.如果不指定精度,float/double采用操作系统默认,decimal则是(10,0)
位类型

1 存放位字段值
2 指定存放多位二进制的长度,默认为1(范围:1~64)
3 读取需要bin()/hex(),普通的select读取结果为null
4 插入的值会转化为二进制码,如果长度运行则正常处理,否则插入失败

create table t6 (id bit(1));
select bin(id) from t6;

日期和时间类型

当前系统日期

timestamp:返回yyyy-mm-dd hh:mm:ss 宽度19timestamp:不适合存放久远日期,超出范围则会采用零值填充//不同格式的显示零值格式
d date, t time,dt datetime
+------------+----------+---------------------+
| d          | t        | dt                  |
+------------+----------+---------------------+
| 2016-11-25 | 14:52:44 | 2016-11-25 14:52:44 |
+------------+----------+---------------------+//默认值的体现
id1 timestamp
+---------------------+
| id1                 |
+---------------------+
| 2016-11-25 14:55:45 |
+---------------------+//timestamp字段只能有一个"CURRENT_TIMESTAMP"
+-------+-----------+------+-----+---------------------+-----------------------------+
| Field | Type      | Null | Key | Default             | Extra                       |
+-------+-----------+------+-----+---------------------+-----------------------------+
| id1   | timestamp | NO   |     | CURRENT_TIMESTAMP   | on update CURRENT_TIMESTAMP |
| id2   | timestamp | NO   |     | 0000-00-00 00:00:00 |                             |
+-------+-----------+------+-----+---------------------+-----------------------------+//timestamp和时区相关:SYSTEM 指的是和主机时区保持一致
show variables like "%_zone";
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CST    |
| time_zone        | SYSTEM |
+------------------+--------+//修改时区
set time_zone="+9:00"/在 [mysqld] 之下加 default-time-zone=timezone

年份

year:默认为4位格式.1901~2155和0000. 2位的已经不推荐,高版本已经不支持了.

timestamp和datetime区别:
1、timestamp支持范围小(1970-01-01 08:00:01到2038年某个点)
2、表中第一个timestamp字段,会默认采用当前系统时间.如果更新其他字段,该字段没有赋值的话,则该字段会自动更新.如果指定字段不满足规格,则采用零值填充
3、timestamp查询和插入都会受到当地时区影响

datetime支持范围宽度大(1000-01-01 00:00:00到9999-12-31 23:23:59)

字符串类型

char和varchar的区别:

  • char定长,效率高,在创建字段的时候就已经指定,一般用于固定长度的表单提交数据存储
  • char在检索的时候回去掉尾部的空格
  • varchar是动态长度
  • varchar在检索的时候回保留尾部的空格
  • varchar将实际内容单独存储在聚簇索引之外,内容开头用1到2个字节表示实际长度(长度>255时需要2个字节)
  • 字符类型若为gbk,每个字符最多占2个字节,字符类型若为utf8,每个字符最多占3个字节

枚举类型:

  • 枚举在集合中取值,只能取一个
  • 如果值不存在则采用第一个值为默认
  • 如果插入NULL不会出错,会将NULL写入表
  • 成员个数在1255占用1个字节,在25565535占用2个字节,节约资源
create table `t8` (`gender` enum('m','f') default null
) engine=innodb default charset=utf8

集合类型

  • 集合类型和枚举很像,但是支持多值选择
  • 最多可以保存64个成员,每8个成员占1个字节
  • 重复值只会插入一次,如果查出集合范围则插入为null
create table t9 (col set ('a','b','c','d'));

三、Mysql运算符

未完待续。。。。

四、Mysql常用的函数

五、MySQL管理工具和应用程序

六、Mysql存储引擎

七、常用数据类型的选择

八、Mysql 字符集

九、Mysql索引设计和使用

十、Mysql中的视图

十一、事务控制和锁定

十二、其它
1、mysql–修改自增主键的初始值

alter table  m_money_process  AUTO_INCREMENT =10;

参考:
在此非常感谢以下技术博文
来源:简书 战神悟空-Mysql 基础

MySQL 基本语法相关推荐

  1. mysql grant 语法格式_MySQL grant 语法的详细解析

    我们今天主要向大家介绍的是MySQL grant 语法的详细解析,同时本文还介绍了其实际应用代码的介绍,希望在你今后的学习中会有所帮助. 以下的文章是MySQL grant 语法的详细解析,如果你对M ...

  2. mysql all语法怎么用_MySQL UNION 与 UNION ALL 语法与用法

    MySQL UNION 语法 MySQL UNION 用于把来自多个 SELECT 语句的结果组合到一个结果集合中.语法为:SELECT column,... FROM table1 UNION [A ...

  3. mysql的存储过程正负数的变化_《转》mysql存储过程语法及范例

    <转>mysql存储过程语法及实例 存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法------- ...

  4. Mysql常用语法总结

    Mysql常用语法总结如下: #连接mysql数据库(Dos下面) mysql -u root -p 123 #创建数据库 create database myschool; #创建表 drop ta ...

  5. mysql数据库语法_MySQL数据库语法(一)

    MySQL数据库语法 数据库管理系统(DBMS)的概述 什么是DBMS:数据的仓库 方便查询 可存储的数据量大 保证数据的完整.一致 安全可靠 DBMS的发展:今天主流数据库为关系型数据库管理系统(R ...

  6. mysql php教程,MySQL PHP语法

    MySQL PHP语法 MySQL 可应用于多种语言,包括 PERL, C, C++, JAVA 和 PHP. 在这些语言中,Mysql在PHP的web开发中是应用最广泛. 在本教程中我们大部分实例都 ...

  7. mysql sqlite 语法_[Sqlite] Sqlite的基本日常SQL操作语句汇总

    序言: 嵌入式数据库Sqlite的基本sql使用汇总,使用测试起来,与关系型数据库mysql在语法上有很多的相似之处,先准备测试数据: CREATE TABLE COMPANY(ID INT NOT ...

  8. 【Mysql高级语法:视图操作】

    Mysql高级语法- view视图操作-yuweixian4230-ChinaUnix博客

  9. MySQL之语法入门与基础命令

    一.MySQL SELECT语句 SELECT语句是控制查看哪些列和行数据,具体如下: SELECT column_1, column_2, ... FROMtable_1 [INNER | LEFT ...

  10. MySQL基础语法大全(尚硅谷)

    文章目录 一.为什么要学数据库 二.数据库的相关概念 DBMS DB SQL 数据库的好处 数据库相关概念 三.数据库存储数据的特点 四.初识MySQL 1.MySQL产品的介绍和安装 2.MySQL ...

最新文章

  1. Android源码编译过程之九鼎开发板
  2. HTTP 错误 404.2 - Not Found
  3. Springboot整合freemarker和相应的语法
  4. 让height: 100%生效
  5. (完全二叉树编号)小球下落
  6. c语言脸型图案,[转载]各种脸型的分析及修饰
  7. 【Java并发.2】线程安全性
  8. HDU 6185 2017广西邀请赛:Covering(矩阵快速幂)
  9. 美团NLP实习生招聘
  10. puppetmaster 自动签名
  11. linux mk文件6,linux_2.6.30.4_Makefile_3--Makefile学习笔记
  12. 台式计算机开机后黑屏,电脑开机显示黑屏有关的问题与解决方法
  13. Linux 之父亮相,这个开源社区要“搞大事”
  14. 科目二边距30cm有什么技巧
  15. 手动实现李群SE(3)到李代数se(3)之间的对指数运算关系
  16. vscode快速生成代码块
  17. 五一出游,“我”的隐私被扒干净了
  18. 2021-11-05 微信小程序实现登录功能
  19. gradle-6.5-all 快速下载
  20. springboot集成redis (Lettuce)

热门文章

  1. 计算机应用教程 卢湘鸿答案,计算机应用教程(Windows 2000环境)习题解答与实验指导...
  2. 计算机系统在线帮助,FoxPro应用系统中在线帮助及出错处理方法
  3. php在apache中式模块,在WIN98下以apache模块方式安装php
  4. psp测试电池软件,电玩巴士首测成功-PSP神奇电池恢复砖头与降级
  5. VBScript入门篇
  6. 学习Opencv笔记(二)————hsv色系
  7. 免费的虚幻3引擎其实不好用啊
  8. 学习plc编程经验分享
  9. PPT小技巧:拆解汉字!
  10. Google搜索技巧终极收集