创建数据库
create database if not exists database_name;
删除数据库
drop database if exists database_name;
使用数据库
use database_name;
查看所有数据库
show databases
数值
tinyint 十分小的数据 只占用一个字节
smallint 较小的数据 只占用2个字节
mediumint 中间的数据 3个字节
int 4个字节,标准的整数
bigint 8个字节 较大的数据
float 浮点数 4个字节
double 8个字节
decimal 字符串形式的浮点数(常用) .
char 0~255 字符串
varchar 可变字符串 0~65535(常用)
tinytext 微型文本 2^8 -1
text 文本串 2^16-1
date 日期YYYY-MM-DD
time 时间HH:mm:ss
datetime 日期时间 YYYY-MM-DD HH:mm:ss(常用)
timestamp 时间戳 从1970-1-1到现在的毫秒数(常用)
year 年份
null值:没有值
unsigned: 无符号整数,不能为负数
zerofill: 0填充,不足的位数用0填充
自增(auto): 自动在上条的基础上+1,通常用来设置唯一主键
非空(notnull): 不能为空
default: 默认值,如果不填写,自己设置的啥就是啥
常用字段:
id: 主键
version: 用来做乐观锁的
is_delete: 用来做伪删除的
gmt_create: 创建时间
gmt_update: 修改时间
create table if not exists table_name( id int(4) not null Autoin_crement comment '主键', //comment 备注 name varchar(20) not null default '匿名' comment '账号', password varchar(20) not null comment '密码', sex varchar(2) not null default '女' comment '性别', birth datatime default null comment '生日', addr varchar(40) default null comment '住址', email varchar(20) default null comment '邮箱', primary key (id) ) engine=innodb default charset=utf-8;
以上代码不可粘贴复制使用,因为mysql有严格的语法格式
ENGINE-INNODB 数据库引擎 行锁定 外键约束
alter table newTable rename as sty; //修改表名 alter table sty add age int(10) not null; //添加字段 alter table sty modify age varchar(20) not null; //修改字段类型和约束 不可以重命名字段 alter table sty change age age1 varchar(20); //不能修改字段类型和约束 可以重命名字段 alter table sty drop age1; //删除字段
drop table if exists sty; //删除表
insert、update、delete、
insert into s (name,bir)values('张三','1990-10-26 00:00:00'); //向表中插入一条数据 insert into s (name,bir)values('张三','1990-10-26 00:00:00'), ('张三','1990-10-26 00:00:00'), ('张三','1990-10-26 00:00:00'); //插入多行数据
update s set name='李四' where name='张三'; //将s表中name为张三的改为李四
操作符 | 含义 |
---|---|
= | 等于 |
<>或者!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
between...and... | 包含,闭合区间 |
and | 并且 |
or | 或者 |
delete from s where name='a'; //删除某条数据 TRUNCATE s //清空s表 自增会归零
TRUNCATE 清空数据库
select * from s //从s表中查询所有数据 select name as '姓名' from student //别名 select concat('姓名',name) from student //组合名 select distinct ssex from student //根据ssex字段来进行去重 select sname,sage+1 as '年纪' from student //查询出来的年纪+1 但不修改元数据
LIKE(%,_只在like里起作用) IN
select sname from student where sname like '张%' //查询姓张的人,%的含义是张后面不管跟多少个字都以张开头 select sname from student where sname like '张_' //查询姓张的人,_后只有一个字符 select sname from student where sname like '%张%' //查询名字中有张字的,开头和结尾都可以以这种方式来查询 select sname,sage from student where sage in (19,20) //查询年纪符合19,20的数据
left join on || right join on || inner join (join on 是连接查询,where是等值查询)
select s.sname from student as s inner join sc as c where c.sno = s.sno //查询sno相同的学生都有哪些 select s.sname as name from student as s left join sc as c on s.sno= c.sno select s.sname as name from student as s right join sc as c on s.sno= c.sno
表格 | 描述 |
---|---|
inner join | 如果表中至少有一个匹配,就返回行 |
left join on | 会从左表中返回所有的值,即使右表中没有匹配 |
right join on | 会从右表中返回所有的值,即使左表中没有匹配 |
核心思想是:把一张表当成俩张一模一样的表来进行查询(具体有啥用还没发现)
order by 排序查询(升序asc,降序desc)
select * from student order by sage asc //按照年纪升序排序 select * from student order by sage desc //按照年纪降序排序
limit 分页查询(当前页,页面大小)公式(n-1)*page_size
select * from student limit 0,3 //查询从0页开始每页3条数据
where(嵌套查询语句:套一个select查询语句)
eg:查询效率不如关联查询,所以尽量不用
group by 根据某个条件进行分组
通常结合聚合函数组合使用
select avg(sage),min(sage),max(sage) from student where ssex = '男' group by dept
having 分组之后再进行过滤的条件
count() | 计数 |
---|---|
sum() | 求和 |
AVG() | 平均值 |
min(),max() | 最大值,最小值 |
ABS() | 绝对值 |
---|---|
ceiling() | 向上取整 |
floor() | 向下取整 |
rand() | 返回一个随机数 |
sign() | 判断数字符号(正负) |
char_length() | 返回字符串长度 |
concat() | 拼接字符串 |
insert() | 在指定位置插入字符串(可以替换) |
lower() | 全部小写 |
upper() | 全部大写 |
instr() | 返回第一次出现的位置 |
replace() | 替换出现的指定字符串 |
substr() | 截取字符串 |
reverse() | 字符串反转 |
current_date(),curdate() , now() | 获取当前日期时间 |
---|---|
localtime() | 获取本地时间 |
sysdate() | 获取系统时间 |
事务的核心就是:一组sql要么都成功,要么都失败
A(Atomicity):原子性,指事务是一个不可分割的单位,事务中的操作要么都发生,要么都不发生
C(Consistency):一致性,事务前后数据的完整性保持一致
I(Isolation):隔离性,多用户并发访问数据库时,数据库为每一个用户开启的事物,不能被其他因素所干扰,多个并发事务要保持隔离性
D(Durability):持久性,事务一旦被提交,对数据库的修改是永久性的,就算发生断开故障也不会改变
幻读/虚读
在一个事务中读取到了别的事务插入的数据,导致前后读取不一致
不可重复读
在一个事务中读取某一行数据,多次读取内容不一致
脏读
一个事务读取到了另外一个没有提交的事务
<!--数据库的隔离级别设置需要补充-->
在创建表时定义一个索引(技术已经过时,以后都是中间件redis,全文索引使用ES)
主键索引 (primary key)
唯一的标识,主键不可重复,只能有一个列作为主键
唯一索引(UNIQUE KEY)
避免重复列出现
常规索引(KEY/INDEX)
默认的
全文索引(FULLTEXT)
特定的数据引擎才有
mysql.user 本质就对这张表来进行增删改查
create user 用户名 identified by '密码' //创建用户 set password = password('新密码') //修改当前用户的密码 set password for 用户名 = password('新密码')//修改指定用户密码 rename user 用户名 to 新名字 //修改用户名 grant All privileges on *.* to 用户名 //给用户授权所有权限(除了给其他用户授权) revoke All privilege on *.* to 用户名 //撤销给用户的所有权限
作用:
保证重要的数据不丢失
数据转移
方式
直接copy物理方式 data文件
在可视化工具手动导出
命令行导出 mysqldump
mysqldump -hlocalhost -uroot -proot 数据库名 表名 > 物理存放位置 //导出 登录mysql,使用数据库, source 物理存放位置 //导入