关系型数据库
MYsql OrACLE SQL SERVER DB2 SQL LITE
通过表和表之间,行和列之间的关系进行数据的存储
非关系型数据库 nosql not Only
redis MongDB
菲关系型数据库,对象存储,通过对象的自身的属性来决定,
安装mysql
下载5.7压缩包;
解压到路径;
配置path变量 复制bin目录
新建my.ini 添加data 和datadir信息 bin的上一级目录,dir要加data\
管理员模式cmd,输入 mysqld -install
然后启动数据库 设置密码 即可
MYsql命令行
mysql -uroot -p123456 --登录数据库
update mysql.user set authentication_string=password('123456') where user='root'and Host = 'localhost'; --修改用户密码
flush privileges; --刷新权限
--------------------------------------------------------
show databases;--语句结尾必须加 ;
use school;--切换数据库
showtables; --查看数据库中所有的表
describe student; --显示表信息
create database xxx;
--单行注释
/*
多行注释
*/
数据库常用语言
DDL 定义 DML 操作 DQL 查询 DCL控制
操作数据库
创建
create database if not exists xxx
删库
drop database if exists xxx
列类型
字段属性
unsigned:无符号的整数 (非负)
zerofill 填充0, 00005
自增:
自动再上一条记录的基础上+1(默认)
通常用来设计唯一 的主键~ index,必须是整数类型
可以自定义设计逐渐自增的起始值和步长 (高级)
常用命令
CREATE TABLE [IF NOT EXISTS] `表名`(
'字段名' 列类型 [属性] [索引] [注释],
'字段名' 列类型 [属性] [索引] [注释],
'字段名' 列类型 [属性] [索引] [注释],
'字段名' 列类型 [属性] [索引] [注释]
)[表类型][字符集设置][注释]
SHOW CREATE DATABASE Schllo -- 查看创建数据库的语句
SHOW CREATE TABLE STUDENT -- 查看student数据表的定义语句
DESC student -- 显示表的结构
修改表名
ALTER TABLE teacher RENAME AS teacher1
ALTER TABLE 表名 MODIFY 字段名 列属性 []
修改表的字段
ALTER TABLE teacher1 MODIFY age VARCHER(11) -- 修改约束
ALTER TABLE 表名 MODIFY 旧名字 新名字 列属性 []
ALTER TABLE teacher1 CHANGE age age1 INT(1) -- 字段重命名
ALTER TABLE 表名 CHANGE 字段名 新字段名 列属性[]
删除表的字段
ALTER TABLE teacher1 DROP age1
字段名最好使用``包裹
PRIMARY KEY(`id`) -- 主键设置
添加外键
ALTER TABLE 表 ADD CONSTRAINT 约束名 FOREIGN KEY(作为外间的列) REFERENCES 哪个表(哪个字段)
DML
insert into 表名([字段名1,字段2,字段3])values ('值1','值2') -- 插入信息
UPDATE `student`SET`name`= 'xxxxxx' WHERE ID =1, -- 修改信息 ,如果不加where会导致全部数据信息被修改 !
DELETE FORM `student` WHERE id = 1, -- 不影响自增
TRUNCATE `student` -- 删表命令 ,自增归零
DQL 查询
SELECT * FROM student
-- 查询所有学生
SELECT `StudentNo`,`StudentName`FROM student -- 查询指定字段
SELECT `StudentNo` AS 学号,`StudentName`AS 学生姓名 FROM student -- 别名 给结果起名字
SELECT CONCAT ('姓名:',StudentName) AS 新名字 FROM student -- 结果前加姓名:
SELECT DISTINCT `StudentNo` FROM result -- 发现重复数据,去重
SELECT VERSION() - 查询系统版本
SELECT @@AUTO_increment_increment --查询自增的步长(变量)
SELECT `StudentNo`,`StudentResult`+1 AS '提分后' FROM result --查询分数中学号以及成绩结果+1
where条件子句
WHERE not studentNo = 1000 -- 除了学号1000 查询其他
模糊查询
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE StudentName LIKE '刘%' --查询学生名字类似”刘“开头的名字 %是不考虑后边
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE StudentName LIKE '%家%' -- 查询名字中带家的学生名字
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE StudentNo in (1001,1002,1003); -- 查询学号为1001.1002.1003的学生
SELECT `StudentNo`,`StudentName` FROM `student`
WHERE `BornData` is not null -- 查询出生日期为空的学生
联表查询join on
select s.studentNO,studentName,SubjectNo,StudentResult
FROM Student AS s
RIGHT JOIN result r
ON s.studentNO = r.studentNo
-- 为了查询s表中的name 和r表中的排名以及学生成绩 并输出到一个结果表中,取学生编号用作中间值。类似的请苦熬叫做七种join
自连接
SELECT a.`categoryName` AS `父栏目`,b.`caregoryName` AS `子栏目`
FROM `category`AS a,`category`AS b
WHERE a.`categoryid` = b.`pid`
分页与排序
ORDER BY 行段 DESC(降序)
limit (查询起始下标 ,pageSize)
子查询
select s.studentNO,studentName,SubjectNo,StudentResult
FROM Student AS s
RIGHT JOIN result r
ON s.studentNO = r.studentNo
where xxx(
where 这一块就叫子查询
)
常用函数
SELECT ABS(-8) -- 绝对值
SELECT CEILING(9.4) -- 向上取整
SELECT FLOOR(9.4) -- 向下取整
SELECT RAND() -- 返回一个0~1之间的随机数
SELECT SIGN(10) -- 判断一个数的符号 0-0 负数返回-1,正数返回1
SELECT CHAR_LENGTH('xxxxxxxxxxxxxxx') -- 返回字符串长度
SELECT CONCAT('1','2','3') -- 拼接字符串
聚合函数
SELECT COUNT (`NAME`)FROM STUDENT; -- 计数字段“名字”,null不计算在内
SELECT COUNT (*)FROM STUDENT; -- 不会忽略null 本质上是计算行数
SELECT COUNT (1)FROM STUDENT; -- 不会忽略所有null 本质是计算行数
SELECT SUM ('XXX') as 总分 from reusult
AVG 平均分
MAX 最高分
MIN 最低分
分组与过滤
group by SubjectNo -- 分组
HAVING 平均分 >80