数据库
- 数据定义语言DDL (create、drop)
- 数据操作语言DML(insert、delete、update)
- 数据查询语言DQL(select、where、group by、order by 、limit)
- 数据控制语言DCL(grant、revoke)
- 事务处理语言TPL(commit、rollback)
-
安装mysql
sudo apt install mysql-server mysql-client
-
开启mysql服务
sudo service mysql start
-
关闭mysql服务
sudo service mysql stop
-
重启mysql服务
sudo service mysql restart
-
查看数据库
show databases;
-
使用某个数据库
use xxx;
-
查看当前数据库里面的所有表
show tables;
-
创建用户(当时新建的用户并没有权限)
create user ‘username’@‘host’
-
给某个用户授权
grant all privileges on * [数据库名]. [表名]* to ‘用户名’@‘用户ip或localhost’ identified by ‘用户名’
-
刷新数据库
flush privileges;
-
删除数据库
drop database 数据库名字;
数据库中的数据类型
类型 | 符号 |
---|---|
整型 | int、smallint、tinyint |
浮点型 | float、double decimal(5,1) |
字符 | char(n)、varchar(n) |
枚举 | enum(‘男’,‘女’) |
数据库里面的内置方法
- 字符串函数
函数 | 功能 |
---|---|
char_length(str) | 获取字符串的字符个数 |
length(str) | 获取字符串的字节数 |
concat(s1, s2, … , sn) | 连接s1, s2, …, sn 为一个字符串 |
lower(str) | 将字符串str中所有的字符转换为小写 |
upper(str) | 将字符串str中所有的字符转换为大写 |
left(str, x) | 返回字符串str最左边的x个字符 |
right(str, y) | 返回字符串str最右边的y个字符 |
lpad(str, n, pad) | 用字符串pad对str最左边进行填充, 直到长度为n个字符长度 |
rpad(str, n, pad) | 用字符串pad对str最右边进行填充, 直到长度为n个字符长度 |
ltrim(str) | 去掉str中最左边的空格 |
rtrim(str) | 去掉str中最右边的空格 |
trim(str) | 去掉字符串str两边的空格 |
repeat(str, x) | 返回str中重复出现x次的结果 |
replace(str, a, b) | 将字符串str中的a更换为b |
insert(str, x, y, instr) | 将字符串str从第x位置开始, y个字符长度的子字符串替换为字符串instr |
strcmp(s1, s2) | 比较字符串s1, s2 |
substring(str, x, y) | 返回字符串str x位置开始y个字符长度的字符串 |
-
日期函数
函数名 功能 curdate() 得到当前日期 curtime() 得到当前时间 now() 得到当前日期和时间 year(date) 得到date的年份 month(date) 得到date的月份 day(date) 得到date的天 hour(time) 得到time的小时 minute(time) 得到time 的分钟 second(time) 得到time的秒 week(date) 得到date是一年中的第几周 date_format(date,fmt) 按格式化串fmt返回date的日期字符串 DATE_ADD(date, INTERVAL number unit)
date_sub()
datediff(date1,date2)
select DATE_FORMAT(now(),’%Y- %m-%d %H:%i:%s’); -
数学函数
函数名 功能 abs(x) 求x的绝对值 ceil(x) 向上取整 floor(x) 向下取整 round(x,d) 四舍五入,d为保留小数的位数 pow(x,y) x的y次幂 rand() 0~1之间的随机小数 mod(x,y) 等同于x % y,求x对y的模
增删改查
增 insert
- 插入全部数据
insert 表名 values (数据1,数据2,…) - 插入某几列数据
insert 表名(列名1,列名2,…) values (数据1,数据2,…) - 插入多行数据
insert 表名 values (数据1,数据2,…),(数据1,数据2,…),(数据1,数据2,…)
删 delect
DELETE FROM runoob_tbl WHERE runoob_id=3
改 update
update 表名 set 列名=数据 where 列名=条件
查 select
- 查询所有数据
select * from 表名 - 查询某列数据
select 列名 from 表名 - 查询前几行数据
select 列名 from 表名 limit 行数 偏移量 - 按条件查询
select * from 表名 where 条件
-
逻辑
- and 与
- or 或
- not 非
- in 在某个范围里面
- not in 不在某个范围里面
- is null 是否为空
- 分组查询 group
-- 查询薪资大于5000的各个部门人数
select depno,count(*) from EMP where sal>=5000 group by depno;
-- 部门号20,各个职位平均薪资
select job,avg(sal) from EMP where depno=20 group by job;
-- 姓秦 员工 各个职位的最低薪资
select job,min(sal) from EMP where ename like '秦%' group by job;
-- 查询管理者在各个部门的人数
select depno,count(*) from EMP where job='manager' group by depno;
- 分组后再条件查询 having
(1)显示各个班级的学生成绩
select * from 成绩表 group by 班级
(2)显示各个班级前三名的成绩
这时候需要先把各个班级的成绩分出来,然后再按照成绩排序,选取前三名
select * from 成绩表 group by 班级 order by 成绩 having limit 3
having 会和group by 共同使用
约束
主键约束: 主键 = 唯一 + not null
primary key
自增: auto_increment
create table food(id int primary key auto_increment,name varchar(20),price float)
非空约束:
not null
create table qq(id int primary key auto_increment,nick_name varchar(16) not null,password varchar(64) not null,qq_no varchar(10) not null);
默认值约束:
default
create table book(id int primary key auto_increment,bname varchar(30) not null, publisher varchar(50) default ‘默认值’);
insert into book(bname,publisher) values (‘daomubijia’,null)
select * from book;
insert into book(bname,publisher) values(‘daomubiji’,default);
唯一约束:
unique 保证数据的唯一性
但是允许null
create table user(id int primary key auto_increment,username varchar(16) unique,password varchar(64) not null,phone char(11) unique not null);
检查约束:mysql ----》 不支持 check
create table user(id int primary key auto_increment,username varchar(16) unique,password varchar(64) not null,phone char(11) unique,gender enum(‘男’,‘女’));
外键约束:foreign key
一张表可以有多个外键,只能有一个主键(id,username+phone)
username phone
admin 18900001111
admin 18900001112
DDL 数据定义语言
alter 修改表结构:
-
添加字段:
alter table 表名 add [column] 字段名 数据类型 [约束]; -
删除字段:
alter table 表名 drop [column] 字段名; -
修改字段的名称和类型
alter table 表名 change 旧字段名 新字段名 数据类型 [约束]; -
修改字段的类型
alter table 表名 modify 字段名 新的数据类型 [约束];