SQL语句的特点
不区分大小写,以分号为间隔。
SQL语句分成四大部分分别是DDL,DML,DQL,DCL四个小分支
/* 多行注释*/
--单行注释
DDL(Data definition Language)数据库定义
DML(Data Mainpulation Language)数据库的表的增删改查
DQL(Data Query Language)数据库的查询
DCL(Data control Language)数据库权限的设置
SQL中的数据类型
整数类型:
age double(4,1)这个代表浮点数的4代表精度,1代表标度
age tinyint unsigned 这个代表无符号的(全都是正数的)
age tinyint signed 这个代表有符号的(默认)
字符类型:
char 定长字符串
varchar(长度)变长字符串
char(10)即使你本身数据占用了1个字符其他会用空格补成10个字符的
varchar(10)如果存储1个字符的他就占用一个字符
char的性能会高一些,varchar的性能会低一些因为varchar使用的时候要计算一些大小.
blob(二进制数据,比如安装包,视频,音乐等):
tinyblob
mediumblob
blob
longblob
text(文本数据):
tinytext
mediumtext
text
longtext
日期类型:
data:
大小3字节,描述的是 年-月-日
time:
大小3字节,描述的是 时-分-秒
year:
大小1字节,描述 年
datatime:
大小8字节,描述的是 年-月-日 时-分-秒
timestamp:
大小4字节,描述的是 年-月-日 时-分-秒
需要注意的是,最大是2038年-1月-19号
DDL的语法(database definition lanuge)
DDL对数据库的操作
DDL创建数据库
Create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];
DDL删除数据库
Drop database [if exists] 数据库名
DDL查询数据库
Show databases;显示所有数据库
Select database()查询你当前所处的数据库
DDL进入单个数据库
Use 数据库名;
DDL对表的操作
DDL查询表格
Desc 表格名;查询数据库内其中一个表格的内容
Show tables;显示当前数据库的所有表格
Show create table 表名;查询创建表格的命令语句
DDL创建数据库中的表格
Create table 表格名(
字段1 类型 [comment ‘注释],
字段2 类型 [comment ‘注释’]
) [comment ‘注释’];
DDL删除数据库中的表格
Drop table [if exists] 表名;
DDL对表格内容的添加
Alter table 表名 add 字段 类型 [comment ‘注释内容’] [约束条件]
DDL对表格内容的修改
Alter table 表名 change 旧的字段 新的字段 类型 [comment ‘注释内容’] [约束条件]
DDL对表格内容的删除
Alter table 表名 drop 字段
DDL对表格名字的修改
Alter table 表名 rename to 新表名
DML的语法(对数据库的表结构的增删改)
Insert(增加表数据)
语法:
给指字段添加数据
insert into 表名(字段1,字段2,字段3….) values(值1,值2,值3….)
给全部字段添加数据
Insert into 表名 values(值1,值2,值3,…)
批量添加
insert into 表名(字段1,字段2,字段3….) values(值1,值2,值3….) ,(值1,值2,值3….)…..后面加n个括号即可
Insert into 表名 values(值1,值2,值3,…), (值1,值2,值3,…) ,(值1,值2,值3,…)…
注意要点:字符串和日期要加引号,字段和值要一一对应
Update(修改表数据)
语法:
Update 表名 set 字段1=值1,字段2=值2,字段3=值3…….[where 条件];
如果不加添加就对整章表进行修改,
例如
Update 表名 set name=’hello’ where id = 1;
就是修改id=1的名字为hello
Delete(删除表数据)
语法:
Delete from 表名 [where 条件]
如果不加条件就删的是所有
注意:delete语句删除的是一整行,如果要删除某一字段的就用uppdate语句把要删除的字段值设置为none即可
.DQL(数据库查询)
基本查询:
Select 字段1,字段2,字段3……. From 表名 查询多个字段
Select * from 表名 查询所有字段
Select 字段1[as 别名1] 字段2 [as 别名2]….from 表名 给查询的字段设置别名
Select distinct 字段1,字段2,…from 表名 查询,同时去重
条件查询:
语法:
Select 字段列表 from 表名 where 条件列表;
其中 in(…)只要能满足列表中一个值即可
like 是模糊匹配,¬_代表单个字符 %代表任意字符
用法:
Select *from emp where name like ‘’;代表查询名字为俩个字的
Select *from emp where idcard lie ’%x’代表身份证最后一位是x的
如果要用多个条件是
Select * from emp where name like ’’ and gender=’男’;
聚合函数:
聚合函数是指将一列数据作为整体进行纵向计算
常见函数
语法:
Select 聚合函数(字段1,字段2,字段…) from 表名
分组查询:
语法:
Select (字段列表) from 表名 [where 条件] group by 分组字段名 [having 分组后的过滤条件];
Where和having的区别
查询记录数:
起始索引值=(要查询的页数–1)查询记录数
例如第二页有10条记录数,起始索引就是(2-1)10=10
如果查询第一页数据直接 limit 10,不需要写起始索引
编写顺序:
Select 字段列表 from 表名 where 条件列表 group by 分组字段 having 分组后的条件列表 order by 字段 顺序类型 limit 起始索引,查询记录次数;
执行顺序:
From 表名 where 条件列表group by 分组字段 having 分组后的条件列表select指定查询字段order by 字段 顺序类型-limit 分页查询
DCL:
DCL管理用户:
查询用户
在mysql中所有的用户都存在系统mysql数据库中
Use mysql;进入
Select * from user;查询用户
创建用户
Create user ‘用户名’@’主机名’ identified by ‘访问密码’;
主机名写 locathost 就只能在本地主机访问
% 代表可以任意主机访问数据库
修改访问密码
Alter user ‘用户名’@’主机名’ identified with mysql_native_password by
‘访问密码’;
删除用户
Drop user ‘用户名’@’主机名’;
DCL权限控制:
显示有哪些权限
Show grants for ‘用户名’@’主机名’;
给予权限
Grant 权限列表 on 数据库.表 to ‘用户名’@’主机名’;
Grant all on数据库1.* to ‘用户名’@’主机名’;将数据库1中所有表的权限给用户
撤销权限
revoke 权限列表 on 数据库名.表名 from ‘用户名’@’主机名’;
多个权限用逗号分割,*代表所有
.就是所有数据库的所有表的权限
常见的权限: