MySQL (基础语法)
2023-04-22 11:30:48 0 举报
AI智能生成
MySQL (基础语法) 思维导图
作者其他创作
大纲/内容
数据类型
整形
tinyint
大小:1 byte
范围
有符号:-128 ---- 127
无符号:0 ---- 255
smallint
大小:2 byte
范围
有符号:-32768 ---- 32767
无符号:0 ---- 65535
mediumint
大小:3 byte
范围
有符号: -8388608 ---- 8388607
无符号:0 ---- 16777215
int(integer)
大小: 4 byte
范围
有符号: -2147483648 ---- 2147483647
无符号: 0 ---- 4294967295
bigint
大小:8 byte
范围
有符号: -9223372036854775808 ---- 9223372036854775807
无符号: 0 ---- 18446744073709551615)
float
大小:4 byte
用途: 单精度浮点数
double
大小: 8 byte
用途: 双精度浮点数
decimal(小数值)
字符
char
大小: 0 ---- 255 byte
用途:定长字符串
varchar
大小: 0 ---- 65535 byte
用途:变长字符串
tinyblob
大小: 0 ---- 255 byte
用途:二进制字符串(不超过255)
tinytext
大小: 0 ---- 255 byte
用途:短文本字符串
blob
大小: 0 ---- 65535 byte
用途: 二进制形式的长文本数据
text
大小: 0 ---- 65535 byte
用途: 长文本数据
........................
日期
data
大小: 3 byte
范围:1000 - 01 - 01 ---- 9999 - 12 - 31
格式:YYYY - MM - DD
用途:日期值
time
大小:3 byte
范围:-838:59:59 ---- 838:59:59
格式:HH:MM:SS
用途:时间值(持续时间)
year
大小:1 byte
范围:1901 ---- 2155
格式: YYYY
用途:年份值
datatime
大小:8 byte
范围:1000 - 01 - 01 00:00:00 ---- 9999 - 12 - 31 23:59:59
格式:YYYY - MM - DD HH:MM:SS
用途: 混合时间
DDL (数据定义语言)
DDL 数据库操作
查询所有数据库
代码: show databases;
例子: show databases;(显示所有已有的数据库)
查询当前数据库
代码: select database();
例子: select database();(查询当前所在的数据库的内容)
创建数据库
代码: create database 数据库名称;
例子: create database if not exists TEXT default charset utf8mb4 ; 用utf8mb4编码形式创建一个名为text的数据库(不分大小写)
删除数据库
代码: drop database if exists 数据库名称 ;
例子: drop database if exists TEXT ;(删除数据库text)
使用数据库
代码: use 数据库名称;
例子: use text1 ; 将当前使用的数据库转为目标数据库(text1),可用“查询当前数据库(select database() ;)”进行查询
DDL 表操作
查询当前数据库的所有表
代码: show tables;
例子: show tables; (显示当前数据库的所有表名)
查询表结构
代码: desc 表名;
例子: desc text; (查询text表中的所有属性的类型等系列)
查询指定表的建表语句
代码: show create table 表名;
例子: show create text; (查询建立text表的语句)
创建表
代码: create table 表名(字段1 字段1类型 comment '注释') comment '表注释';
例子: create table text(id int comment '学号', name varchar comment '姓名') comment '学生表'; (建立一个有id(学号)和name(姓名)双属性的二维表)
添加字段(属性)
代码: alter table 表名 add 字段名 类型(长度) comment '注释';
例子: alter table text add tem bigint comment '电话'; (将字段(属性)'电话'添加到表text中)
修改数据类型
代码: alter table 表名 modify 字段名 新数据类型(长度);
例子: alter table text modify name char; (将text表中的name字段(属性)的类型改为char)
修改字段名和字段类型
代码: alter table 表名 change 旧字段名 新字段名 类型(长度) comment '注释';
例子: alter table text change tem num bigint comment '电话号码'; (将text表中的tem字段名改为num,同时将字段类型改为bigint)
删除字段
代码: alter table 表名 drop 字段名;
例子: alter table text drop num; (将text表中的num字段删除)
修改表名
代码: alter table 表名 rename to 新表名;
例子: alter table text rename to text1; (将text表名改为text1)
删除指定表
代码: drop table if exists 表名;
例子: drop table if exists text; (删除表text)
基础语法功能
create: 用于创建数据库或其对象(如表,索引,函数,视图,存储过程和触发器)
drop: 用于从数据库中删除对象
truncate: 用于删除表中的所有记录,包括分配给记录的所有空间都将被删除
comment: 用于向数据字典添加注释
rename: is用于重命名存在于数据库中的对象
DML (数据操作语言)
添加数据
选择性添加
代码: insert into 表名(字段名1, 字段名2, ....) values (值1, 值2, .....) ;
例子: insert into text000 (id, name) values (1,'a') ; (给text000表中添加id和name两个字段对应的值1和a)
例子: insert into text000 (id) values (1) ; (给指定的字段id添加值1)
全部添加
代码: insert into 表名 values (值1, 值2) ;
例子: insert into text000 values (2, 'b') ; (给表中已存在的所有字段添加值)
批量添加
代码: insert into 表名(字段1, 字段2) values (值1, 值2), (值1, 值2) ;
例子: insert into text000 (id, name) values (3, 'c'), (4, 'd') ; (一次性给text000表中添加两组数据)
修改数据
代码: update 表名 set 字段1 = 值1, 字段2 = 值2 where 条件 ;
例子: update text000 set id = 5, name = 'e' where id = 4 ; (将原表中的id = 5时的两个字段的数据改为id = 5, name = 'e')
用途: 也可用于添加新字段后,向新字段内添加数据(注意判断语句where的合理使用,否则新添加的内容将会填充整个字段)
删除数据
代码: delete from 表名 where 条件 ;
例子: delete from text000 where (id = 1) && (name is null) ; (删除text000表中的id为1,名字字段为空的元组)
基础语法功能
insert: 用于将数据插入表中
updata: 用于更新表中的现有数据
delete: 用于从数据库表中删除记录
DQL (数据查询语言)
基本查询
查询多个字段
方法一
代码: select 字段1, 字段2, ... from 表名 ;
例子: select id from text_0.text1 ; (从数据库text_0中的表text1之内查询学号字段内的所有值)
方法二
代码: select * from 表名 ;
例子: select * from text_0.text1 ; (查询text_0数据库中text1表的各字段的所有值)
设置别名
代码: select 字段1 as 别名1 from 表名 ;
例子: select id as '学号' from text1 ; (查询text1表中的字段id内的值,同时给id字段附上别名'学号')
去除重复记录查询
代码: select distinct 字段列表 from 表名 ;
例子: select distinct id from text1 ; (查询表text1中的所有的id字段,并且不输出重复的值)
条件查询
=: 等于
代码: select 字段列表 from 表名 where 字段 = 值 ;
例子: select * from text1 where id = 2021032656; (在text1表中查询id为2021032656的学生信息)
<>: 不等于 (!=)
代码:select 字段列表 from 表名 where 字段 <> 值; (注:用!=效果相同)
例子: select * from text1 where id <> 2021032656; (在表text1中查询学号不为2021032656的学生信息)
between ... and ... : 在某个范围之内(含最小, 最大值)
代码: select 字段列表 from 表名 where 字段 between 值1 and 值2 ;
例子: select * from text1 where id between 2021032655 and 2021032660 ; (在表text1中查询学号在2021032655到2021032660之间的学生信息)
in(...):在in之后的列表中的值,多选一
代码: select 字段列表 from 表名 where 字段 in(值1, 值2, ...) ; (注:in相当于或(即 && 或者 or ), 但是in只能用来判断等于)
例子: select * from text1 where id in(2021032656, 2021032657) ; (在表text1中查询字段id等于2021032656和2021032657的学生信息)
like 占位符:模糊匹配(_匹配单个字符, %匹配任意个字符)
代码1: select 字段列表 from 表名 where 字段 like '__' ; (注:_个数依需求而定)
例子1: select * from text1 where name like '__' ; (查询text1表中的姓名为两个字的学生信息)
代码2:select 字段列表 from 表名 where 字段 like '%值' ; (注:%的位置决定查询的字段的位置, 即%2为查询末尾为2的字段值, 2%为查询开头为2的字段值, %2%为查询中间部分含有2这个值的字段值,)
例子2: select * from text1 where name like '%李%' ; (在表text1中查询姓名中部(或首位)含有'李'的学生信息)
is null: 是null
代码: select 字段列表 from 表名 where 字段 is null ;
例子: select * from text1 where id is null ; (在表text1中查询字段id为空的学生信息)
and 或 &&: 并且
代码: select 字段列表 from 表名 where 条件 && 条件 ; (注:用and效果相同)
例子: select * from text1 where id < 2021032661 && id >= 2021032655 ; (在表text1中查询字段在id大于等于2021032655,小于2021032661范围 内 的学生信息)
or 或 ||: 或者
代码: select 字段列表 from 表名 where 条件 || 条件 ; (注:用or效果相同)
例子: select * from text1 where id < 2021032661 || id >= 2021032655 ; (在表text1中查询字段在id大于等于2021032655,小于2021032661范围 外 的学生信息)
not 或 !: 非
代码: select 字段列表 from 表名 where not 条件 ; (注:用!效果相同)
例子: select * from text1 where not (id < 2021032661 and id >= 2021032655) ; (在表text1中查询字段学号 不 在id < 2021032661 和 id >= 2021032655 范围内的学生信息)
聚合函数
count: 统计数量
代码: select count(字段列表) from 表名 ;
例子: select count(*) from text1 ; (在表text1中查询元组的(行)总数)
max: 最大值
代码: select max(字段) from 表名 ;
例子: select max(id) from text1 ; (查询表text1中的id字段的最大的值)
min: 最小值
代码: select min(字段) from 表名 ;
例子: select min(id) from text1 ; (查询表text1中的id字段的最小的值)
avg: 平均值
代码: select avg(字段) from 表名 ;
例子: select avg(id) from text1 ; (查询表text1中的字段id的平均值)
sum: 求和
代码: select sum(字段) from 表名 ;
例子: select sum(id) from text1 ; (查询表text1中的字段id的总和)
分组查询
代码: select 字段, count(字段列表) from 表名 where 条件 group by 字段 having 条件;
例子: select ad, count(*) from text000 where age < 30 group by ad having count(*) >= 2; (查询年龄小于30的人,并根据地址进行分组,获取人数数量大于等于2的地址及对应人数)
where和having的区别
执行时机不同: where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
判断条件不同: where不能戳聚合函数进行判断,而having可以
注意
执行顺序: where > 聚合函数 > having 。
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段毫无意义
排序查询
代码: select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2 ;
例子: select * from text000 order by id desc, age asc ; (在表text000中,对id和age字段进行排序,先对id进行降序排序,若有相同的id,则对具有的相同的元组(行)进行对age(年龄)的升序排序)
分页查询
语法
代码: select 字段列表 from 表名 limit 起始索引, 查询记录数 ;
例子: select * from text000 order by id asc limit 4, 2 ; (在text000表内,对第二页进行查询并且返回两个记录(数据),同时对数据进行升序排序)
注意事项
注: 起始索引 = ( 页码 - 1 ) * 每页显示记录数
分页查询是数据库方言,不同数据库实现方式不同
(页码:相当于对表内数据进行分组,每一组就是一页,页码从1开始,但是下标从0开始(数组); 记录: 显示的数据数,也就是分组的长度、大小,或者说数组的长度)
基础语法功能
select: 用于从数据库检索数据
distinct: 避免输出重复值
as: 取别名
语法顺序
编写顺序: select > from > where > group by > having > order by > limit
执行顺序: from > where > group by > having > select > order by > limit
验证方法: 根据编写顺序写出含有以上全部语法的语句后,在from后面对表取别名,之后再逐步对执行顺序后的相关内容进行别名修改,执行,以验证执行顺序是否正确
DCL (数据控制语言)
管理用户
查询用户
代码: use mysql; select * from user;
例子: use mysql; select * from user; (转换到mysql数据库,查询user表,查看用户信息)
创建用户
代码: create user '用户名'@'主机名' identified by '密码';
例子1: create user 'like'@'localhost' identified by '123456'; (创建一个名为like的用户,设置其只能在本地主机上访问数据库,同时设置其密码为123456)
例子2: create user 'like'@'%' identified by '123456'; (创建一个名为like的用户,设置其可以在任意主机上访问数据库,同时设置其密码为123456)
修改用户密码
代码: alter user '用户名'@'主机名' identify with mysql_native_password by '新密码';
例子: alter user 'like'@'%' identify with mysql_native_password by '123'; (将用户like的密码修改为123)
删除用户
代码: drop user '用户名'@'主机名';
例子: drop user 'like'@'localhost'; (删除权限在本地主机上登录的like用户)
注: 仅创建用户的情况下,用户对其他数据库并无访问权限
权限控制
查询权限
代码: show grants for '用户名'@'主机名';
例子: show grants for 'like'@'%'; (查询权限在任意主机上都可访问数据库的用户like的访问权限)
授予权限
代码: grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
例子: grant all on Text_01.* to 'like'@'%'; (授予用户like对数据库Text_01中的任意表进行任意操作的权限)
撤销权限
代码: revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名'
例子:revoke all on Text_01.* from 'like'@'%'; (撤销用户like对数据库Text_01的权限)
权限
all, all privileges: 所有权限
select: 查询数据
insert: 插入数据
update: 修改数据
delete: 删除数据
alter: 修改表
drop: 删除数据库,表,视图
create: 创建数据库,表
基础语法功能
grant: gives用户的访问权限的数据库
revoke: 撤消使用GRANT命令给定的用户访问权限
0 条评论
下一页