mysql Day1

关系型数据库

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