SQL通用语法
-- 注释内容 或者 # 注释内容(MySQL特有)
/* 注释内容 */
SQL分类
DDL
SHOW DATABASES;
查询当前数据库
SELECT DATABASE();
创建
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
[IF NOT EXISTS] 如果不存在,则执行
[DEFAULT CHARSET 字符集] 给数据库添加字符集
DROP DATABASE [IF EXISTS] 数据库名;
USE 数据库名;
DDL - 表操作 - 查询
show tables;
desc 表名;
show create table 表名;
DDL-表操作-创建
create table 表名{ 字段1 字段1类型 [comment 字段1注释], 字段2 字段2类型 [comment 字段2注释], 字段3 字段3类型 [comment 字段3注释], 字段n 字段n类型 [comment 字段n注释] }[comment 表注释]; 注意:[]为可选参数,最后一个字段后面没有 “逗号”
DDL-表操作-数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型,字符串类型,日期时间类型。
类型:tinyint 大小:1 byte 有符号(signed)范围 :(-128,127) 无符号(unsigned)范围:(0,255) 描述:小整数值 类型:smallint 大小:2 byte 有符号(signed)范围 :(-32768,32767) 无符号(unsigned)范围:(0,65535) 描述:大整数值 类型:mediumint 大小:3 byte 有符号(signed)范围 :(-8388608,8388607) 无符号(unsigned)范围:(0,16777215) 描述:大整数值 类型:int或integer 大小:4 byte 有符号(signed)范围 :(-2147483648,2147483647) 无符号(unsigned)范围:(0,4294967295) 描述:大整数值 类型:bigint 大小:8 byte 有符号(signed)范围 :(-2^63,2^63-1) 无符号(unsigned)范围:(0,2^64-1) 描述:极大整数值 类型:float 大小:4 byte 有符号(signed)范围 :(-3.402823466 E+38,3.402823466351 E+38) 无符号(unsigned)范围:0 和 (1.175494351 E-38,3.402823466 E+38) 描述:单精度浮点数值 类型:double 大小:8 byte 有符号(signed)范围 :(-1.7976931348623157 E+308,1.7976931348623157 E+308) 无符号(unsigned)范围:0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) 描述:双精度浮点数值 类型:decimal 有符号(signed)范围 :依赖于M(精度)和D(标度)的值 无符号(unsigned)范围:依赖于M(精度)和D(标度)的值 描述:小数值(精确定点数)
类型:char 大小:0-255 bytes 描述:定长字符串 类型:varchar 大小:0-65535 bytes 描述:变长字符串 类型:tinyblob 大小:0-255 bytes 描述:不超过255个字符的二进制数据 类型:tinytext 大小:0-255 bytes 描述:短文本字符串 类型:blob 大小:0-65 535 bytes 描述:二进制形式的长文本数据 类型:text 大小:0-65 535 bytes 描述:长文本数据 类型:mediumblob 大小:0-16 777 215 bytes 描述:二进制形式的中等长度文本数据 类型:mediumtext 大小:0-16 777 215 bytes 描述:中等长度文本数据 类型:longblob 大小:0-4 294 967 295 bytes 描述:二进制形式的极大文本数据 类型:longtext 大小:0-4 294 967 295 bytes 描述:极大文本数据
类型:date 大小:3 范围:1000-01-01 至 9999-12-31 格式:YYYY-MM-DD 描述:日期值 类型:time 大小:3 范围:'-838:59:59 至 838:59:59 格式:HH:MM:SS 描述:时间值或持续时间 类型:year 大小:1 范围:1901 至 2155 格式:YYYY 描述:年份值 类型:dateTime 大小:8 范围:1000-01-01 00:00:00 至 9999-12-31 23:59:59 格式:YYYY-MM-DD HH:MM:SS 描述:混合日期和时间值 类型:timestamp 大小:4 范围:1970-01-01 00:00:01 至 2038-01-19 03:14:07 格式:YYYY-MM-DD HH:MM:SS 描述:混合日期和时间值,时间戳
案例:
create table emp( id int comment '编号', // 纯数字 workno varchar(10) comment '员工工号', // 字符串类型,长度不超过10位 name varchar(10) comment '姓名', // 字符串类型,长度不超过10位 gender char(1) comment '性别', // 男/女,存储一个汉字 age tinyint unsigned comment '年龄', // 正常年龄,不可能存储负数 idcard char(18) comment '身份证号', // 18位 entrydate date comment '入职时间' // 取年月日即可 ) comment '员工表';
DDL-表操作-修改
alter table 表名 add 字段名 字段类型(长度) [comment 注释] [约束];
案例:
为emp表增加一个新的字段 “昵称” 为 nickname,类型为 varchar(20)
alter table 表名 modify 字段名 新的字段类型(长度);
alter table 表名 change 旧字段名 新的字段名 字段类型(长度) [comment 注释] [约束];
案例:
将 emp 表中的 nickname 修改为 username ,类型为 varchar(30)
alter table 表名 drop 字段名;
案例:
删除 emp 表中的 username 字段;
DDL-表操作-修改(表)
alter table 表名 rename to 新的表名;
案例:
将 emp 表的表名修改为 employee
drop table [if exists] 表名;
truncate table 表名;
注意:在删除表时,表中的全部数据也会被删除。
DML
insert into 表名 (字段名1,字段名2,...) values (值1,值2,...);
insert into 表名 values (值1,值2,...);
insert into 表名 (字段名1,字段名2,...) values (值1,值2,...),(值1,值2,...); insert into 表名 values (值1,值2,...),(值1,值2,...);
注意:
DML-修改数据
update 表名 set 字段名1=值1,字段名2=值2,....[where 条件];
DML-删除数据
delete from 表名 [where 条件];
注意:
DQL - 数据查询语言,用来查询数据库中表的记录
select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段列表 limit 分页参数
select 字段1,字段2,字段3 from 表名; select * from 表名;
select 字段1 [as 别名1], 字段2 [as 别名2] ... from 表名;
select distinct 字段列表 from 表名;
select 字段列表 from 表名 where 条件列表;
介绍
将一列数据作为整体,进行纵向的计算
常见的聚合函数
语法
select 聚合函数(字段列表)from 表名;
注意:所有的 null 值是不参与聚合函数的运算的。
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
注意:
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
select 字段列表 from 表名 limit 起始索引,查询记录数;
注意:
语句练习:
use mysql; select * from user;
create user ‘用户名’@‘主机名’ identified by '密码';
alter user ‘用户名’@‘主机名’ identified with mysql_native_password by '新密码';
drop user ‘用户名’@‘主机名’;
注意:
MySQL中定义了很多权限,但是常用的就一下集中:
show grants for '用户名'@'主机名';
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
注意:
上一篇:向量数据库:faiss的常用三种数据索引方式(IndexFlatL2,IndexIVFFlat,IndexIVFPQ)的使用和持久化+索引融合的实现及库函数解读
下一篇:Linux之MySQL的数据备份