通用:分号结尾。一般方法用大写。
注释:-- 或者 #;/*…*/。
DDL数据库定义语言
- 查询所有数据库:show databases;
- 创建数据库:create database (if not exists) 数据库名 (default charset 字符集)
if not exists:可选,意是判断是否存在,选择覆盖或者不创建。 - 查询当前数据库:select database();
- 删除数据库:drop database(if exists) 数据库名;
- 使用数据库:use 数据库名;
表操作
查询当前数据库的所有表格:
show tables;
查询表结构:
desc 表名;
查询指定表的建表语句:
show create table 表名;
创建表
create table 表明{
字段1 字段1类型 [comment 字段1 注释],
id int comment ‘编号’
}
注:[ ]表示可选内容,不要求一定有。
数据类型
数值型:
数值 | 类型 |
---|---|
int | 整型 |
float | 浮点型 |
char() | 定长字符串 |
varchar() | 边长字符串 |
date | 日期型(YYYY-MM-DD) |
time | 时间值或持续时间(HH:MM:SS) |
year | 年份值(YYYY) |
datetime | 混合日期和时间值( YYYY-MM-DD HH:MM:SS) |
无符号型:+unsignen
修改
添加字段:
alter table 表名 add 字段名 类型(长度)【comment 注释】;
删除字段:
alter table 表名 drop 字段名;
修改表名:
alter table 表名 rename to 新表名;
删除表:
drop table 【if exists】 表名;
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,…);
修改数据:
update 表名 set 字段名1 = 值1,字段名2 = 值2,…[where 条件];
删除数据:
delete from [where 条件];
DQL 数据查询语句
基本查询
查询多个字段:
select 字段1,字段2,… from 表名;
设置别名:
select 字段1 [as 别名], … from 表名;
去重复记录:
select distinct 字段列表 from 表名;
条件查询:
select 字段列表 from 表名 where 条件列表;
聚合函数:
count、max、min、avg、sum。
例: select max(age) from 表名(where …)
注:空值不算
分组查询
select 字段列表 from [where 条件] group by 分组地段名 [having 分组后过滤条件];
- where 在前,不参与分组;having是对结果做条件。
- 一般在查询时用聚合函数一起。
select gender,count(*) from emp…;
排序查询
select 字段名 from 表名 order by 字段1 排序方式1,字段2 排序方式2,…; 注:多字段排序,先1后2。
asc 升序(默认)
desc 降序
分页查询
select * from 表名 limit 起始索引,查询记录数;
DCL 管理用户:
查询用户
use mysql;
select * from user;
函数
字符串函数
函数 | 解释 |
---|---|
concat(S1,S2,S3,…Sn) | 字符串拼接 |
lower(str) | 全变小写 |
upper(str) | 全变大写 |
lpad(str,n,pad) | 左填充;如lpad(’1‘,5,’0‘) = 00001 # 长度为5 |
rpad(str,n,pad) | 右填充;对str右填充pad,直到n个字符串长度 |
trim(str) | 去str左右两边空格,str内部空格不去除 |
substring(str,start,len) | 截str字符串,冲start位置开始len个长度 |
数值函数
函数 | 解释 |
---|---|
ceil(x) | 向上取整 |
floor(x) | 向下取整 |
mod(x,y) | 返回x/y的值(余数) |
rand(x) | 返回0~1内的随机数 |
round(x,y) | 求x的四舍五入,保y位小数 |
日期函数
函数 | 解释 |
---|---|
curdate () | 返回当前日期 |
curtime() | 返回当前时间 |
now() | 返回当前日期和时间 |
year(date) | 获年 |
month(date) | 获月 |
day(date) | 获日 |
date_add(date, interval expr type) | 返回一个日期/时间值加上一个时间间隔expr后的时间值。 |
datediff(date1,date2) | 返回两时间之间的天数 |
流程函数
if(value,t,f) 例:ifnull(1,2) 如果为null返回1,否则返回2。
case when [val1] then [res1]…else [default] end
如果val1为true返回res1…否则返回default。
case [expr] when [val1] then [res1] … else [default] end。
如果expr的值等于val1,返回res1,…否则返回default。
约束条件
函数 | 解释 |
---|---|
not null(非空) | 非空约束 |
unigue | 唯一约束 |
primary key | 主键 |
default(默认值) | 默认约束 |
check(条件) | 检查约束 |
foreign key | 外键 |
在建表中田间,constraint foreign key(外键字段) references 表(主表字段)
语言添加:alter table 添加外键的表 add constraint foreign key(外键字段) references 表(主表字段)
查询
隐式内连接
正常多表:
select * from 表名,表名 where 条件(连接条件);
或:select * from 表名 join 表名 on 条件(连接条件);
左外连接,与显示连接相似。
select * from 表名 left join 表2 on 条件;
联合查询:两查询中加
1、union all # 查全
2、union # 去重
select … union (all) select …;
子查询:
1、<, >, =, …
2、in, not in, ang, all(都是大写才满足)
导入Excel数据方法:
第一步:
打开命令行,连接数据库,即命令行中输入
mysql -u root -p
回车后根据提示输入密码后,再次回车即可进入
第二步:
转到需要导入的表,注意这里的数据要和段的要求一样。
use sql_tp;
进入数据库
第三步:
将文件选择保存类型,注意,这点很重要,选择保存为“文本文件(制表符分割)”,然后点击保存。
打开txt文件,将前面的标题栏删除掉,因为我们只需要数据,也只能只有数据
注:一定要utf-8的格式,保存时注意。
第四步:
导入刚刚保存的数据(.txt)
接下来继续在命令行中进行操作,在命令行中输入如下命令:
LOAD DATA LOCAL INFILE ‘E:/中层评价-发王纪元/1.txt’ INTO TABLE tp_ghao20221230;
‘E:/中层评价-发王纪元/1.txt’ 为所在文件的地址。
tp_ghao20221230为数据库中要,你要导入的目标表名。
说明:文件名字为1.txt
因为用制表符分割的数据,所以可以用到命令“fields terminated by “\t” ”
而且windows下文件通常以换行并回车作为文件行的结尾,还可以加上了“ lines terminated by “\r\n” ”
补充:一般来说,如果第四步无法成功,并报出ERROR,可能是还没有打开功能。可以通过以下方式打开功能。
show global variables like ‘local_infile’;
set global local_infile = ‘ON’;