MySql

关系型数据库: 二维表,都是表结构易于查询,数据存在磁盘中安全,使用通用的SQL语言方便

注释 -- 这里有一个空格  或者#

DDL:操作数据库,表     

 

  数据库操作:show databases查询    create database创建数据库  drop database删除数据库  use使用数据库   后面都加上数据库名字

  表操作:show tables查询表名称  desc表名称 查询表结构     create table 表名(字段名 数据类型)  drop database表名

    修改表:前面都是alter table 表名  修改表名+rename to 新表名     添加一列+add 列名 数据类型   修改数据类型 +modify 列名 新数据类型

        修改列名和数据类型 +change 新列名 新数据类型       删除列+drop 列名

DML:对表中的数据进行增删改的操作

  给指定的列添加数据  INSERT INTO student (id,name) VALUES(1,'张三');,全表 添加就 都写上,表名后面的括号也可以省略 (不建议)添加多行可以在value后面直接写

  修改表中的数据 update student SET `name`='李四'  WHERE  id=1;     如果不加 where条件就会把记录 全部都改了,一般必须写

  删除表中的数据 :DELETE FROM  student WHERE NAME="李四";    如果不加 where条件就会把记录 全部都删除  ,一般必须写

DQL:对数据进行查询

  select 字段列表 from  表名列表  where  条件列表  group   by    分组字段  having  分组后条件    order by    排序字段     limit  分页限定(开始索引,查询条目数)

  基础查询:SELECT NAME,AGE  FROM stu;    去除重复记录:SELECT DISTINCT address from stu; 

         设置列名别名:SELECT NAME,math AS 数学成绩,english AS 英语成绩 FROM stu;      as也可以省略

  条件查询:SELECT * FROM stu WHERE age>20;           SELECT * FROM stu WHERE age BETWEEN 20 and 30;        SELECT * FROM stu WHERE age>20 AND math>80;

         或者用or 连接(还有in)SELECT * FROM stu WHERE age=18 or age=20;       SELECT * FROM stu WHERE age in (18,20,30);

       如果是空值就使用   is null  或者 is not  null

         like模糊查询:通配符    _代表单个任意字符;%代表任意个数字符

  排序查询: order by       ASC升序   DESC降序如果有多个排序条件,前面的一样时,才会按照后面的排序

  聚合函数(null不参与计算) count(统计数量列名不能为空)  max(最大值) min(最小值) sum(求和) avg(平均值)  后面跟列名

       例如:select min(math) from student

  分组查询:group by(分组之后,查询的字段为聚合函数和分组字段,其他字段无意义)

  分页查询:limit 起始索引 查询条目数   select from student limit 0 ,3;  计算方式(当前页码-1)*每页显示的条数   oracle用rownumber    SQLserver用top

where和having的区别:

  where是分组之前进行限定,having是分组之后过滤的,

  where不能对聚合函数进行判断having可以

执行顺序,where>聚合函数>having

DCL:对数据库进行权限控制

约束:

 

非空 NOT NULL     唯一UNIQUE     主键PRIMARY KEY(非空且唯一)       检查CHECK(MYSQL不支持)       默认DEFAULT       外键FOREIGE KEY 

  auto_increment自增长1

外键约束:添加外键     

   CONSTRAINT  外键名称(随便)_主表名_从表名  FOREIGN KEY(从表的外键属性)  REFERENCES dept(主表的关联属性)

  有表之后添加外键 :alter table 从表 add CONSTRAINT   外键名称(随便)_主表名_从表名   FOREIGN KEY(从表的外键属性)  REFERENCES dept(主表的关联属性)

数据库设计:

函数:

 

多表查询:

  连接查询:

只能有一个字段

    内连接:两个表中的交集

      隐式内连接:SELECT * FROM emp,dept WHERE  emp.dep_id = dept.did;     给表起别名:SELECT  t1. NAME,t1.gender,t2.dname FROM emp t1,dept t2 WHERE t1.dep_id = t2.did;

        显示内连接: inner可以不写  select * from emp inner join dept on emp.dep_id = dept.did;        select * from emp join dept on emp.dep_id = dept.did;

    外连接:

      左外连接:A表中的数据和交集的数据      select * from emp left join dept on emp.dep_id = dept.did;

      右外连接:   B表中的数据和交集的数据     select * from emp right join dept on emp.dep_id = dept.did;

  子查询:嵌套查询

    

    单行单列:select * from emp where salary > (select salary from emp where name = '猪八戒');

    多行单列:select * from emp where dep_id in (select did from dept where dname = '财务部' or dname = '市场部');

    多行多列:select * from (select * from emp where join_date > '2011-11-11' ) t1, dept where t1.dep_id = dept.did;

事务:

  开启事务:begin 或者 start transaction

  提交事务:commit            默认是自动提交    1是自动提交  0是手动提交     set@@autocommit = 0  变成手动提交

  回滚事务:rollback

  四大特征:

    A:原子性  事务是不可分割的最小操作单位,要么都成功, 要么都失败

    C:一致性,事务完成时所有数据保持一致状态

    I:隔离性,多个事务之间操作的可见性

    D持久性,事务一旦提交或者回滚,他对数据库中的数据改变是持久的

 

索引

 

 sql性能分析查看执行频率

前面加上explain,查看执行计划

使用索引

不能计算否则索引失效,字符串类型不加单引号,索引失效,模糊查询如果是尾部模糊匹配索引不失效。头部使用索引失效

or连接的查询有一个没有索引,就全不生效

告诉数据库用哪个索引:建议、忽略、强制

索引设计原则

 

SQL优化

 插入优化:批量插入,不要超过1000条,建议使用手动提交事务,建议主键顺序插入

 

 

 

posted @   皇天不负有心人  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示