数据库的分类
1.关系型数据库
orcale
oracle数据库系统是一个复杂的软件系统,如果不了解内部的结构原理及关系,就不可能设计和编写出高质量的应用软件系统,也不可能管理好一个复杂的应用系统。
MySQL:是一个关系型数据库系统,官方网址点击这里
sql server:
是Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的膝上型电脑到运行Microsoft Windows 2012 的大型多处理器的服务器等多种平台使用
- 非关系型数据库
redis
Mongodb
数据库的组成
- 数据库系统
- 数据库
- 数据表
- 数据表字段
- 数据
SQL的分类
DDL:数据定义语言(create,drop,alter等)
DML:数据操作语言(insert,delete,update等)
DQL:数据查询语言(select)
DCL:数据控制语言
DTL:事务处理
DDL的操作命令
查看数据库系统里面所有的数据库: show databases;
创建数据库: create database(数据库名);
使用数据库: use database(数据库名);
查看数据库里面的所有数据库表:show tables;
创建数据库表:create table 表名(字段1 字段类型1,字段2 字段类型2…);
删除数据库:drop database 数据库名;
删除数据表:drop table 表名;
删除数据表中的数据,但主键不会重置:delete;
删除数据表中的数据,主键会重置:truncate(从第一个开始);
查看创建数据库语句:show create database 数据库名;
查看创建数据表语句:show create table 数据表名;
查看数据表结构:desc 表名;
修改表字段的类型:alter table 表名 modify 字段名 字段类型;
修改表字段名:alter table 表名 change 原字段名 修改后的字段名 字段类型;
添加字段:alter table 表名 add 字段名 类型 after/first;
修改表名:alter table 表名 rename 新的表名;
DML操作命令
查看表里面所有的数据: select * from 表名;
指定字段查询:select 字段1,字段2… from 表名;
while相关条件的查询:select * from 表名 where 查询的条件,从哪里查询;
关系型相关查询: < > <= >= != <> =
逻辑型相关查询 :or and
区间:in() , between and
模糊:like ‘%要写入的字段或者字段的一部分%’;
数据类型
整型 字节
tinyint 1
smallint 2
int 4
bigint 8
浮点型 字节
float 4
double 8
decimal() 精确的
字符
varchar(10) 可变长度
char 定长
text
日期
date 年-月-日
datetime
time
year
timestamp 时间戳 不能单独赋值 默认找current_timestamp
blob 二进制
约束
主键约束 primary key 主键 auto_increment 自动增长 值不能重复,并且不能为null
唯一约束 unique key 保证数据不重复,null可以多个 not null
非空约束: not null
默认约束: default ‘值’
enum枚举: 值相互之前是互斥传值可以写整数 1,2,3,4… 通常使用性别
set集合: 值可以多选也可以写整数 1,2,4,8,16 3代表1+2
外键约束: foreign key(外键名) references 副表名(副表id)
添加约束:alter table 表名 add constraint unique key 约束表(属性)
排序
select * from 表名 order by 字段名 desc(降序)/asc(升序)
偏移
select * from 表名 limit 偏移量,偏移的个数;
关键字
zerofill 使用0去填充
unsigned 无符号
comment 解释说明
存储引擎
MyISAM 不支持事务 表锁 查看数据效率比较快
InnoDB 支持事务 行锁 对于数据的增删改效率很高
show engines; 查看数据库系统支持的存储引擎
show variables like ‘storage_engine%’; 查看当前系统默认的存储引擎
自己配置my.ini
相关函数
获取数据库表中的个数
SELECT COUNT(*) AS COUNT FROM student;
SELECT COUNT(0) FROM student;
SELECT COUNT(sNo) FROM student;
获取最大值
SELECT MAX(gradeId) AS MAX FROM student;
获取最小值
SELECT MIN(gradeId) AS MIN FROM student;
获取平均值
SELECT AVG(sNo) AS AVG FROM student;
获取和
SELECT SUM(sNo) AS SUM FROM student;
字符串连接
SELECT CONCAT(‘m’,’y’,’s’,’q’,’l’);
字符串的替换
SELECT INSERT(‘这是sql server系统’,3,10,’mysql’);
字符串的截取
SELECT SUBSTRING(‘这是mysql数据库’,3,);
字符串转换小写
SELECT LOWER(‘STYLE’);
字符串转换大写
SELECT UPPER(‘handsome’);
获取当前的日期
SELECT CURDATE();
获取当前的时间
SELECT CURTIME();
获取当前的时间和日期
SELECT NOW();
获取当前年的第几周
SELECT WEEK(NOW());
返回哪一年
SELECT YEAR(NOW());
返回当天的第几个小时
SELECT HOUR(NOW());
返回当天的第几分钟
SELECT MINUTE(NOW());
返回两个小时之间相差多少天
SELECT DATEDIFF(NOW(),’1994-11-29’);
向上取整
SELECT CEIL(3.3);
向下取整
SELECT FLOOR(3.9);
随机0-1 不包含1
SELECT RAND();
多表联合查询
内连接
显式链接:通过join on链接 [inner/cross]
SELECT studentName,gradeName FROM student AS s INNER JOIN grade AS g ON s.gradeId=g.gradeId;
隐式链接:通过where条件
SELECT studentName,gradeName FROM student AS s,grade AS g WHERE s.gradeId=g.gradeId;
三表查询:
SELECT studentName,studentResult,subjectName FROM student AS s INNER JOIN result AS r ON s.studentNo=r.studentNo INNER JOIN SUBJECT AS sub ON sub.subjectNo=r.subjectNo;
外连接
左连接:以左表为主表,主表里面的数据都显示,右表为副表 关键字:left join on
SELECT * FROM USER LEFT JOIN goods ON user.gid=goods.gid;
右链接: 以右表为主表,主表里面的数据都显示,左表为副表 关键字:right join onSELECT * FROM USER RIGHT JOIN goods ON user.gid=goods.gid;
联合查询
将左连接和有链接通过关键字 union链接起来
SELECT * FROM USER LEFT JOIN goods ON user.gid=goods.gid
union
SELECT * FROM USER RIGHT JOIN goods ON user.gid=goods.gid;
DCL
创建用户:create user ‘用户名’@’主机名’ identified by ‘密码’;
授权:grant all on 数据名.表名 to ‘用户名’@’主机名’;
取消权限:revoke all on . from ‘用户名’@’主机名’;
删除用户:drop user ‘用户名’@’主机名’;
查看用户的权限
如果for后面的内容不写,默认查看当前用户,写的话查看指定用户的权限
show grants [for ‘用户名’@’主机名’];
说明:
all:所有的权限
*:代表所有的库或表
%:模糊查询
数据库在dos命令中的导入和导出
导出:mysqldump -uroot -p 数据库名 > 文件名.sql
导入:mysql -uroot -p 数据库名 < 文件名.sql
说明:
1.需要在本地磁盘下或者根目录下操作
2.导入之前先创建一个空的数据库