数据库知识速记

DDL(数据定义语言)

对数据库的

创建

create database student_name_list;

删除

drop database student_name_list;

查询

show databases;

使用

use 数据库名;

修改

对表的

类型

整形

  • int(6)只表示可以0填充的最大位数
  • tinyint
  • smallint
  • tinyint

浮点数

  • double
  • float
  • decimal(5,2)
  • numeric

字符

  • char
  • varchar
  • text
  • tinytext
  • mediumtext
  • longtext

时间

  • datetime
  • date
  • timestamp

二进制大对象

  • tinyblob
  • blob
  • mediumblob
  • longblob

约束

类型使用
非空not null
默认default vvv
主键primary key(一个表中,只能有一个主键)相当于not null unique 联合主键
唯一unique (key)
自增auto_increment
外键foreign key
无符号unsigned
0填充zerofill

创建

create table sjt2101_2(
	id int(11) primary key auto_increment,
	name char(20) not null,	
)engine=innodb default charset=utf8;

修改

修改字段:

  • alter table sjt2101_1 modify school varchar(255) not null;
  • alter table sjt2101_1 change column ‘school’ ‘new school’ varchar(255) not null;

增加字段:

  • alter table sjt2101_1 add column age int(11) default 1;

修改引擎:

  • alter table sjt2101_1 engine=innodb;

修改表名:

  • alter table sjt2101_1 rename to students;

增加外键:

  • alter table students add foreign key (class_cno) references classes(cno);

删除

drop table sjt2101_1;

查询

show tables;

DML(数据管理语言)

对表

增加数据

输入全部字段

  • insert into sjt2101_1 value(0,‘张三’,‘家里顿’,‘宅’,‘男’);
  • insert into sjt2101_1 values(0,‘李四’,‘家里顿’,‘啃老’,‘女’),(0,‘王五’,‘家里呆不下’,‘疯’,‘男’);

输入指定字段

  • insert into sjt2101_1(name,gender) values(‘赵六’,‘男’);
  • insert into sjt2101_1(name,gender) values(‘小七’,‘男’),(‘大八’,‘女’);

修改数据

  • update sjt2101_1 set school=‘吓大’,major=‘被吓大’ where id=4;
  • update sjt2101_1 set age=19 where id=2;

删除数据

  • delete from sjt2101_1 where gender=‘男’;

DQL(数据查询语言)

展示表结构

  • desc sjt2101_1;

展示建表语句

  • show create table sjt2101_1;

单表查询

查询所有字段

  • select * from sjt2101_1;

查询指定字段

  • select id,name from sjt2101_1;

去除重复数据

  • select distinct id, name, price from food;

起别名

  • select id 序号,name as 姓名 from sjt2101_1;

条件查询

where子句
  • select * from sjt2101_1 where id <4;
比较和逻辑

比较符号:<,>,=,!=,<=,>=,<>不等于
逻辑符号:and,or,not

  • select * from sjt2101_1 where id <4 && gender=‘男’;
  • select * from sjt2101_1 where id <4 and gender=‘男’;
  • select * from sjt2101_1 where id <4 or gender=‘男’;
  • select *from sjt2101_1 where school is not null;
范围查询
  • select * from sjt2101_1 where id >1 and id <6;
  • select * from sjt2101_1 where id between 2 and 5;
  • select * from sjt2101_1 where id in(1,3,5);
模糊查询

LIKE
占位符:

符号意义
_单个任意字符
%零个或多个任意字符"
  • select* from food where id like ‘%004%’;
  • select* from food where name like ‘__牛%’;
  • select* from food where name like ‘%牛%’;

排序查询(默认正序)

单列排序
  • select * from sjt2101_1 order by age asc;
组合排序
  • select * from sjt2101_1 order by age desc,id desc;

分组查询

聚合函数

count、max、min、avg、sum,group_concat(可能有问题).

单字段分组
  • select gender,count(id) from roommate group by gender;
多字段分组
  • select gender,count(id) from roommate group by gender,id;
分组筛选
  • select gender,count(id) from roommate while id>1 group by gender having count(id)>2;

在while语句中不能有聚合函数

限制(分页)查询

默认从0的下一个开始,连续3个

  • select * from sjt2101_1 limit 3;
  • select * from sjt2101_1 order by id asc limit 3 ;
  • select * from sjt2101_1 order by id desc limit 3;

从 limit a,b :从a的下一个开始,连续b个

  • select * from sjt2101_1 limit 2,3;

多表查询

表关系

  • 关系型数据库(二维表) :MySQl、Oracle、SQL Server
  • 非关系型数据库:Redis、MongoDB、Memcache

表联系

  • 一对一:在前一方加后一方的外键
  • 一对多:在一的一方 加 多的一方的外键(比如一个学生 表的班级字段,这个班级字段是多个里边选一个)
  • 多对一
  • 多对多:建立中间表,拆分成2个一对多

范式

下边的一定符合上边的

  • 第一范式:列不可分
  • 第二范式:一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
  • 第三范式:每一个非主属性都不传递依赖于该范式的候选键,则称为第三范式,即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。
  • BC范式:
    (1)所有非主属性对每一个码都是完全函数依赖;
    (2)所有的主属性对于每一个不包含它的码,也是完全函数依赖;
    (3)没有任何属性完全函数依赖于非码的任意一个组合。

嵌套查询

  • select * from users where uid in (select uid from telphones where tnumber=‘14774174742’);

内连接

  • select t.*,u.name,u.idcard from telphones t inner join users u on t.uid=u.uid;

左外连接

  • left outer outer可忽略

右外连接

  • right outer outer可忽略

交叉连接(笛卡尔积)

  • select t.*,u.name,u.idcard from telphones t cross join users u;
  • select * from telphones,users;

自然连接

  • select t.*,u.name,u.idcard from telphones t natural join users u;

多表查询

  • select t.*,u.name,u.idcard from users u,telphones t where u.uid = t.uid;

联合查询

  • select uid,name from users union all select uid,name from users;
  • select uid,name from users union distinct select uid,name from users;

嵌套插入

  • insert into users(name,idcard,birthday) select name,idcard,birthday from users;

注意

char和varchar区别

  • char必须固定长度,使用时直接给定长度,可能会造成空间浪费,多写会截断数据。
  • varchar只是规定长度上限为255,在使用时会检测长度,不会造成空间浪费。效率低,以时间换空间,多写不会截断数据。

字符集区别

  • utf8包含utf8mb4中常用的大多数字符。utf8mb4是最全的字符集,和java中的utf-8一模一样。
  • GBK 更多比 GB2313
  • CJK 中日韩

innodb和myisam区别

  • myisam不支持事务,不支持外键,表级锁。文件有三:.frm,.MYD,.MYI
  • innodb支持事务,支持外键,行级锁。文件有二:.ibd,.frm
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值