DDL:数据定义语言 | 用于用户创建、修改、删除库和表结构,create/alter/drop |
DML:数据操作语言 | 用于对数据表的增删改, insert/update/dalete |
DQL:数据查询语言 | 用于对数据表的查询 select/from/where/group by/having/order by/limit |
TCL:事务控制语言 | commit/rollback |
1.对数据库常用命令
1.连接数据库
#mysql -u用户名 -p密码
mysql -uroot -p333
2.显示已有数据库
show databases;
3.创建数据库
create database test;
4.选择数据库
#use 数据库名
use test;
5.显示数据库中的表
show tables;
6.显示当前数据库的版本信息
select version();
7.显示当前数据库的用户
select user();
8.删除数据库
drop database test;
9.注释
#我是注释
10.退出mysql
exit
11.查看指定表的结构
desc test;
:数据定义语言
用于用户创建、修改、删除库和表结构,create/alter/drop
1.创建表
create table test(
id int primary key auto_increment,
name varchar(20),
email varchar(80),
birth date
)
2.增加列
Alter table test add column balance int;
1.非空约束 not null(字段不允许为空)
2.默认约束 default(设置默认值)
3.唯一约束 unique key(uk)(设置字段的值是唯一的,可为空,但只能有一个空值)
4.主键约束 primary key(pk)(作为表记录的唯一标识)
5.外键约束 foreign key(fk)(用于两个表之间建立关系,需要指定引用主表的哪一字段。在数据库的存储引擎中InnoDB支持外键,MyISAM不支持外键。
作为外键的字段要求是主表中的主键(单字段主键))
:数据操作语言
用于对数据表的增删改, insert/update/delete
3. 插入数据
#插入部分字段
insert into test(name,email,birth) values('jack','1313123@','1999-01-12');
#插入全部字段,可省略数据库后面的字段名
insert into test values(2,'java','1313123@','1999-01-12',2000);
#插入多行数据
insert into test values(3,'java','1313123@','1999-01-12',2000),
(4,'java','1313123@','1999-01-12',900),
(5,'java','1313123@','1999-01-12',2000),
(6,'java','1313123@','1999-01-12',2000),
(7,'java','1313123@','1999-01-12',2000),
(8,'java','1313123@','1999-01-12',2000),
(9,'java','1313123@','1999-01-12',3100);
3. 更新数据
#修改一个字段
update test set name='hello' where id = 2;
#修改多个字段
update test set name='haha',email='9999@',birth='2008-08-08' where id = 2;
3. 删除数据
#根据id来删除数据
delete from test where id = 2;
#根据name来删除数据
delete from test where name = 'jack';
:数据查询语言
用于对数据表的查询 select/from/where/group by/having/order by limit
4.1.基础查询
#查询所有数据
select * from test;
#查询部分字段
select id,name,email from test;
#查询总行数
select count(*) from test;
4.2.条件查询
条件运算符 | > < >= <= = != <> |
逻辑运算符 | and or not |
模糊查询 | like % _ |
条件查询就是where后面跟条件表达式
#查询存款大于2100的数据
SELECT id,balance FROM test where balance >2100;
#查询名字中第二个字符是a的数据
select id,name from test where name like '_a%'
4.3.排序查询
order by asc(默认,可不写,从小到大排序)/desc
select id,balance from test order by balance desc;
4.4.常见函数
1.字符函数 | ||
concat | 拼接 |
select concat('java','script'); |
substr | 截取子串 | select SUBSTR('javacript',2,3); |
upper | 转换成大写 | select UPPER('javascript') |
lower | 转换成小写 | select lower('JAVA') |
trim | 去除前后空格或字符 | select TRIM('a' from 'aabbbbaaa'); |
ltrim | 去除左边空格 | select ltrim(' java '); |
rtrim | 去除右边空格 | select rtrim(' java '); |
replace | 替换 | select REPLACE('java','a','T') |
lpad | 左填充 | select LPAD('java',10,'a') |
rpad | 右填充 | select rpad('java',5,'b') |
instr | 返回子串第一次出现的位置 | select INSTR('javascript','va') |
length | 获取字节个数 | select LENGTH('java') |
2.数学函数 | ||
round | 四舍五入 | select round(4.5) |
rand | 随机数 | select RAND(); |
floor | 向下取整 | select floor(4.3); |
ceil | 向上取整 | select ceil(4.3); |
mod | 取余 | select mod(9,2); |
truncate | 截断 | SELECT TRUNCATE(3.4567, 2); |
3.日期函数 | ||
now | 获取系统当前日期和时间 | select NOW(); |
curdate | 当前系统日期 | select CURDATE(); |
curtime | 当前系统时间 | select CURTIME(); |
str_to_date | 将字符转换成日期 | select str_to_date('1999/02/01','%Y/%m/%d'); |
date_format | 将日期转换成字符 | select date_format(NOW(),'%Y/%m/%d'); |
4.流程控制函数 | ||
if | 条件判断 | |
case | 多分支条件判断 | |
5.其它函数 | ||
version | 查看版本 | select VERSION(); |
database | 当前数据库 | select DATABASE(); |
user | 当前用户 | select user(); |
#拼接字符串,结果是javascript
select concat('java','script'); # javascript
#截取字串,从第2个位置开始,截取3个字符
select SUBSTR('javacript',2,3); # ava
#截取字串,从第2个位置开始截取所有的字符
select substr('javascript',2); # avascript
#转换成大写
select UPPER('javascript'); # JAVASCRIPT
#转换成小写
select lower('JAVA'); # java
#去除前后空格
select trim(' java '); # java
#去除前后字符a
select TRIM('a' from 'aaaaabbbbaaaa'); # bbbb
#替换字符
select REPLACE('javascript','a','T'); # jTvTscript
#在左边填充a,让字符串到10个
select LPAD('java',10,'a'); # aaaaaajava
#在右边填充b到5个
select rpad('java',5,'b'); # javab
#返回子串第一次出现的位置
select INSTR('javascript','va'); # 3
#返回字节个数
select LENGTH('java'); # 4
#四舍五入
select round(4.5); # 5
#四舍五入,并且保留小数点后两位
select round(4.5555,2) # 4.56
#随机数
select RAND(); # 0.5474727335828102
#向下取整
select floor(4.3); # 4
#向上取整
select ceil(4.3); # 5
#取余
select mod(9,2); # 1
#截断,不四舍五入,直接截断小数
SELECT TRUNCATE(123.4567, 3); # 123.456
SELECT TRUNCATE(123.4567, 2); # 123.45
SELECT TRUNCATE(123.4567, 1); # 123.4
SELECT TRUNCATE(123.4567, 0); # 123
SELECT TRUNCATE(123.4567, -1); # 120
SELECT TRUNCATE(123.4567, -2); # 100
SELECT TRUNCATE(123.4567, -3); # 0
SELECT TRUNCATE(-123.4567, 3); # -123.456
SELECT TRUNCATE(-123.4567, 2); # -123.45
SELECT TRUNCATE(-123.4567, 1); # -123.4
SELECT TRUNCATE(-123.4567, 0); # -123
SELECT TRUNCATE(-123.4567, -1); # -120
SELECT TRUNCATE(-123.4567, -2); # -100
SELECT TRUNCATE(-123.4567, -3); # 0
#获取系统当前日期和时间
select NOW(); # 2021-07-03 15:02:07
#获取系统当前日期
select CURDATE(); # 2021-07-03
#获取系统当前时间
select CURTIME(); # 15:02:07
#把字符串转换成mysql的时间格式
select str_to_date('1999/02/01','%Y/%m/%d'); # 1999-02-01
#把mysql的时间格式化
select date_format(NOW(),'%Y/%m/%d'); # 2021/07/03
4.4.1.str_to_date
把字符串转换成mysql默认的时间格式
select str_to_date('1999/02/01 12/2/1','%Y/%m/%d %H/%i/%s');
select str_to_date('1999-02-01 12/2/1','%Y-%m-%d %H-%i-%s');
select str_to_date('1999.02.01 12/2/1','%Y.%m.%d %H.%i.%s');
#转换结果都是 1999-02-01 12:02:01
4.4.2.date_format
把mysql的时间格式化
select date_format(NOW(),'%Y/%m/%d %H:%i:%s');
# 2021/07/03 15:33:54
4.4.3.时间格式符
格式符 | 2021-07-03 15:29:30 |
%Y 四位年 | 2021 |
%y 二位年 | 21 |
%m 二位月,不够补零 | 07 |
%c 月份 | 7 |
%d 二位日期,不够补零 | 03 |
%H 小时,24小时制 | 15 |
%h 小时,12小时制 | 3 |
%i 分钟 | 29 |
%s 秒 | 30 |
4.5.分组函数
总数 | 最大值 | 最小值 | 平均值 | 总和 |
count | max | min | avg | sum |
4.5.1.不考虑null值
select count(*) from test;
#以下四项忽略了null值
select max(balance) from test;
select min(balance) from test;
select avg(balance) from test;
select sum(balance) from test;
4.5.2.考虑null值,把null当成0处理
select max(IFNULL(balance,0)) from test;
select min(IFNULL(balance,0)) from test;
select avg(IFNULL(balance,0)) from test;
select sum(IFNULL(balance,0)) from test;
4.6.分组查询
group by
4.7.连接查询
join
left join
right join
4.8.子查询
4.9.分页查询
4.联合查询
:数据控制语言
用来定义访问权限和安全级别
6.杂项
6.1.存储对象
创建一个存储对象,往表中插入10条数据
#删除存储对象
drop procedure mypro;
#把结束标记改为$
delimiter $
#创建存储对象
create procedure mypro(in insertCount int)
BEGIN
declare i int default 1;
a:while i<insertCount DO
insert into test(name) values(CONCAT('java',i));
if i>20 then leave a;
end if;
set i = i+1;
end while a;
END $
#调用存储对象
call mypro(11);