注:
DDL(Data definition Language)数据库定义(比如说表,数据库)
DML(Data Mainpulation Language)数据库 表的增删改查
DQL(Data Query Language)数据库 数据的查询
DCL(Data control Language)数据库 权限的设置
数字类型
整型类型 占用字节 tinyint 1 smallint 2 mediumint 3 int 4 bigint 8 浮点数类型 占用字节 float 4 double 8 dectmal 自定义
注:
浮点数写成
float(精度,标度)这种
123.45这个数的精度是5,标度是2
dectmal的大小取决于我们自己定义的精度和标度
字符串类型
字符串类型 占用字节 char 自定义 varchar 自定义
注:
字符串的写法是:
char(字节数)
其中char和varchar的区别
char(10)即使你本身数据占用了1个字符其他会用空格补成10个字符的
varchar(10)如果存储1个字符的他就占用一个字符
char的性能会高一些,varchar的性能会低一些因为varchar使用的时候要计算一些大小
二级制数据类型 文本数据类型 tinyblob tingtext mediumblob mediumtext blob text longblob longtext
注:
blob数据类型一般用来存储二进制数据比如说安装包,视频,音乐等
text数据类型一般用来存储长文本内容
日期类型
日期数据类型 占用大小 描述 date 3 年-月-日 time 3 时-分-秒 datetime 8 年-月-日-时-分-秒- year 1 年 timestamp 4 年-月-日-时-分-秒
注:
timestamp最大是2038年-1月-19号
1.对数据库的操作
创建数据库
Create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];
删除数据库
Drop database [if exists] 数据库名;
查询数据库
查询所有数据库
show databases;
查询当前所处的是哪个数据库
select database();
进入数据库
Use 数据库名;
2.对表的操作
查询表内有哪些字段
Desc 表名;
显示数据库内的所有表
Show tables;
查询表的创建语法是什么
Show create table;
创建表
Create table 表名(
字段1 数据类型 [comment 注释内容] [约束条件],
.......
字段n 数据类型 [comment 注释内容] [约束条件]
)[comment 注释内容] [charset 字符集] [engine=引擎名];
删除表
Drop table [if exists] 表名;
对表字段的添加
Alter table 表名 add 字段名 数据类型 [comment 注释] [约束条件];
对表字段的删除
Alter table 表名 drop 字段名;
对表字段的修改
Alter table 表名 change 旧字段 新字段 类型 [comment 注释] [约束条件];
对表的名字修改
Alter table 表名 rename to 新表名;
Insert(插入数据)
insert into 表名(字段列表) values(值列表),(值列表),(值列表).....;
如果要给全部字段添加值那么,字段列表可以不加
insert into 表名 values(值列表);
注:
符串和日期要加引号,字段和值要一一对应
Update(更新数据)
Update 表名 set 字段=值,字段=值.... [where 条件];
注:
如果不加where条件就会对整个字段进行修改
Delete(删除数据)
Delete from 表名 [where 条件];
注:
- 如果不加where条件就会删除全部数据
- delete是对表的整行进行删除
- 要删除一行内的某个字段数据,用update将其设置为none即可
基本查询
select 字段列表 from 表名;
注:
可以代表所有字段,一般不用因为可能触发回表查询(详见索引应用)
条件查询
select 字段列表 from 表名 where 条件;
一些条件:
符号 描述 > 大于 < 小于 = 等于 >= 大于等于
注:
关于is null和is none涉及到mysql特有的三值逻辑
三值逻辑和null(重要!!)
NULL 用于表示 缺失的值或 遗漏的未知数据,不是某种具体类型的值。
数据表中的 NULL 值表示该值所处的字段为空,值为 NULL 的字段没有值,尤其要明白的是: NULL 值与 0 或者空字符串是不同的。
在SQL中虽然只存在一种null但是我们讨论的时候将其分为俩种null
分别是
主流语言(c,c++,php等)只有true和false的俩个 逻辑值,但是在SQL中还存在另外一个 逻辑值unknown
就类似。 对(true),错(false),不知道(unknown)
故unknown分为:
逻辑值unknown,作为null的unknown
逻辑值unknown是一个明确的布尔值
作为null的unknown既不是值也不是变量
例如x=x,当x是逻辑值unknown的时候返回true,如果是作为null的unknown的时候返回的是unknown
假定x和y是unknown
故 not x 也为unknown
其他的记住优先级即可
对于null如果使用=,>,
NULL 既不是值也不是变量。NULL 只是一个表示 没有值的标记,而比较谓词只适用于值。
故使用比较词给null是没有意义的!
聚合函数
名字 描述 count(字段A) 统计数量 max(字段A) 最大值 min(字段A) 最小值 avg(字段A) 平均数 sum(字段A) 求和
用法:select 聚合函数 from 表名;
一般配合分组查询使用
分组查询
select 字段列表 from 表名 where 条件 group by 要分组的字段 having 条件;
注:
- 如果不用group by分组的话就是把全部数据放到同一组的意思
- where是分组前的过滤。Having是分组后的过滤
- 比如说以男,女分组并统计男女的年龄的平均数
- 查询的函数一般为分组的字段和聚合函数,查询其他的无意义
- 执行顺序是 where->聚合函数->having
- 分组查询就好比将一个父表根据字段分成多个子表然后进行查询操作
排序查询
select 字段列表 from 表名 order by 字段名 排序方法,字段名,排序方法....;
名子 描述 Desc 降序 Asc (默认)升序
注:
如果第一个字段值相同就按第二个字段进行排序
分页查询
select 字段列表 from 表名 limit 起始索引 要查询记录条数;
起始索引值=(要查询的页数–1) _查询记录数
例如第二页有10条记录数,起始索引就是(2-1)_10=10
如果查询第一页数据直接 limit 10,不需要写起始索引
执行顺序
select 字段列表 from 表名 where 条件 group by 分组字段名 having 条件 order by 排序字段 排序 limit 起始索引 查询记录数;
管理用户
查询用户
在mysql中所有的用户都存在系统mysql数据库中,故查询用户就查询mysql的user表即可
Use mysql;进入
Select * from user;查询用户
创建用户
Create user '用户名'@'主机名' identified by '访问密码' ;
其中 主机名一般为一段ip地址,也可以写localhost代表本机
%代表任意主机
修改访问密码
Alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
删除用户
Drop user '用户名'@'主机名' ;
设置权限
显示用户有哪些权限
Show grants for '用户名'@'主机名';
给予用户权限
Grant 权限列表 on 数据库.表 to '用户名'@'主机名';
Grant all on 数据库1.* to '用户名'@'主机名'; #将数据库1中所有表的权限给用户
撤销用户权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
多个权限用逗号分割,代表所有权限
常见的权限*
权限 说明 ALL,ALL PRIVILEGES 所有权限 select 查询数据权限 INSERT 插入数据权限 Update 更新数据权限 Delete 删除数据权限 Alter 修改表的权限 Drop 删除,数据库/视图/表的权限 Create 创建数据库/表的权限
Original: https://www.cnblogs.com/wdadwa/p/MYSQL_Learning_02.html
Author: wdadwa
Title: MYSQL–>SQL语法
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611870/
转载文章受原作者版权保护。转载请注明原作者出处!