【20230518-23】MySql基础

summary:基础的创建、插入、搜索数据

注意事项:
1、大小写
2、,  有多项的时候最后一项后边没有, 。; 出现了;相当于语句执行完了,增加语句时要删除;
3、单双引号区别不大
4、起库名不能用中文
5、名字不要和关键字表名类名一致,尽量不要用着重号``
6、Null不能做判断和运算
7、不等于: <> 、!=。等于:<=>、=。

-----库:
    查看:show databases
    创建:create database XXX
    进入:use XXX
    删除:drop database XXX
    查询:select database()

----表:
1\\创建:create table XXX(
    stuno int(10) primary key auto_increment,
    stuname varchar(5),
    phone  char(11)  --创建表里的最后一行没有逗号
    )
    ---约束
    -- primary key 约束主键,每个表只有一个(但可以有复合主键). 目的是不让这一列的元素数值重复且不允许有空值.相当于唯一约束+非空约束。
    --unique 唯一约束,每个表可以有多个。
    --not null 非空约束,指定字不能有空值
    --default 缺省约束  如 not null default 0;
    --check 检查约束 如gender CHAR NOT NULL CHECK(gender IN('男','女'))
    --foreign key 外键约束(用的少)
    --- auto_increment 自增.不控制ID可以自己增
    ---增加索引:create index stuid on stu(id);

2\\删除表:drop table XXX

3\\修改表:一般在插入数据之前进行 alter table 表1 [rename(重命名表)/add(给表增加一列,add后写元素)/drop(删除一列)/modify(修改元素的属性如int(10)-int(8))/change(更改列名)]  元素/表2

4\\查看:show tables (看这个库里有哪几张表), desc XXX(查看表的详细内容,每个项目的情况)

5\\插入数据: 1  insert into 表名(字段名...)  values(值...)
            insert into student(id,name, sex, birth...)  values(1001,"Dtt","MALE","2002-3-1"...)
        2  insert into student value (1001,"Dtt","MALE","2002-3-1"...)
        3  insert into student(id,name) value(1001, "dtt")

6\\修改数据: update 表名 set 字段名=字段值,字段名=字段值,......[where] 条件.
        update student set name ="ctt",sex = "female" where id=1001
        update student set name ="ctt"

7\\删除数据: 一般不用,在公司里会有打包好的删除的系统
         delete from student [where] 条件
         delete from student where name="ctt"


8\!!\查询: 1  select *from student ,*查询所有内容
        2  select 字段 from 表.[where]
           select name from student where id = 1001
    ---多表连接查询:查询的结果可以视为一张表,用这张临时的表进行关联查询。
        --最普通的
        --内连接 from 表1 inner join 表2 on 关联条件
        --外连接 outer join,等值连接id必须相同,如果没有id的话对不上就不会出现在表里
            -left outer join 以左表为主表,将左表全部查出,右边对应查出.
            -right outer join 以右表为主表,将右表全部查出,左表对应查出.
            -full join MySQL 不支持,oracle 支持.MySql 可以用 left join union right join代替。
            -union去除重复的只留不重复的;Union on 不去重复全都保存。

        --where 和 on
          -where 条件,小范围查询可以这么些,多表联查的时候不宜维护、效率低。因为他是按条件过滤筛选,之后才出结果
          -inner join .... on ....没有条件,比where快,他是直接根据条件出结果,不需要筛选
        --自连接:相当于把同一张表是为两个表,给与不同的命名罢了。但是需要注意关联条件。如找员工的领导:on e.manager_id = m.employee_id
        --笛卡尔积(用的少)
    ---group by 关键字:不叫过滤,也没有去除重复,它只是把信息相同的内容放在了一个组里,之后就可以在组里进行聚合函数
    ---having :和 group by 配合使用,他是分组之后进行过滤.
               聚合函数,一般情况下和 group by 配合使用,不能作为条件使用.
               聚合函数,不能和一般字段共同查询,可以和分组字段一起用
    ----聚合函数
        ---AVG(【DISTINCT】 expr) 返回expr的平均值
        ---COUNT(【DISTINCT】 expr)返回expr的非NULL值的数目。count只是计数,不管条件如何都把这个记一下.如,每次只加一不能计算工资的总和,可以计算员工人数,
        ---MIN(【DISTINCT】 expr)返回expr的最小值
        ---MAX(【DISTINCT】 expr)返回expr的最大值
        ---SUM(【DISTINCT】 expr)返回expr的总和。是求和,把这一项全部数值加起来。如,sum能计算工资的总和也可以计算员工人数。
       ---聚合函数不能当作条件使用,想用的话可以使用子查询。
       ---聚合函数只能和分组字段在一起
          eg:select first_name , job_id ,sum(salary) from employees;XXXXXX
          eg: department_id , avg(salary )  from employees  group by department _id  √

    ---order by 关键字:asc正序\desc倒序。永远在sql语句的最后。

    ---limit分段查询:limit ?1   ?2   . 从?1 的下一行开始(第一个?  表示 0---n),向后推进?2行
    ---子查询:将查询结果当做另一个查询的条件.
        --多行子查询
            eg:select * from employees where salary > (select max(salary) from employees where first_name = "John");
        --多列子查询
            eg:select * from employees where salary > (select min(salary) from employees where department_id = 60);


9\\去除重复:distinct
            select distinct job_id from employees

10\\别名as :as可以省略 ,给表或者字段重新取一个简单有特点的名字

11\\复制(了解)见word文档

12\\运算符:+  -  *  /  %

13\\逻辑运算符:and   or  not
        包含:1  in
            --查询 部门 是 50 ,60 , 70 的人的信息.
                select * from employees where department_id in (50,60,70);
            --不是
                select * from employees where department_id not in (50,60,70);
            2   between a and b
            --查询薪资不是大于50,小于100,必须是50号部门
            select *from employees where (salary not between 50 and 100) and department_id = 50;

14\\模糊查找like:%--n个任意字符,_--1个任意字符
    --名字有s的人
    select *from student where name like '%s%';
    --第三个字母是s的人
    select *from student where name like '___s';

15\\其他单行函数
    ---数学函数
    ---字符串函数
    ---日期时间函数
    ---流程函数:
     --IF(value,t ,f):如果value是真,返回t,否则返回f
     --IFNULL(value1, value2):如果value1不为空,返回value1,否则返回value2
     --CASE   (相当于Java的if...else if...)
       WHEN 条件1 THEN result1
       WHEN 条件2 THEN result2
       ....
       [ELSE resultn]
       END
         eg:SELECT ename ,CASE
            WHEN salary>=15000 THEN '高薪'
            WHEN salary>=10000 THEN '潜力股'
            WHEN salary>=8000 THEN '屌丝'    --返回的都是单一字段
            ELSE '草根'
            END
            FROM t_employee;

     --CASE  expr   (相当于Java的switch)
       WHEN 常量值1 THEN 值1
       WHEN 常量值1 THEN 值1
       ....
       [ELSE 值n]
       END
         eg:SELECT oid,`status`, CASE `status`
            WHEN 1 THEN '未付款'
            WHEN 2 THEN '已付款'
            WHEN 3 THEN '已发货'
            WHEN 4 THEN '确认收货'
            ELSE '无效订单'
            END
            FROM t_order;

16\!!\事务
 ---事务执行的任务要么都执行成功,要么都失败,失败的话会一层一层回滚到最初的出发点
 ---事务的ACID特性
   --原子性(Atomicity):原子意为最小的粒子,或者说不能再分的事物。数据库事务的不可再分的原则即为原子性。
     组成事务的所有SQL必须:要么全部执行,要么全部取消(就像上面的银行例子)。
     一致性(Consistency):指数据的规则,在事务前/后应保持一致
     隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的.
     持久性(Durability):当事务提交完成后,其影响应该保留下来,不能撤消
 ---用法
      eg:#开启手动处理事务模式
         #set autocommit = false;
         #开始事务(推荐)
         start transaction;
         #查看当前表的数据
         select * from t_stu_detail;
         #删除整张表的数据
         delete from t_stu_detail;
         #查询该表数据,发现显示删除后的结果
         select * from t_stu_detail;
         #回滚,回滚到start transaction 后边一句的状态
         rollback
         #查看当前表的数据,发现又回来了
         select * from t_stu_detail;
         #删除整张表的数据
         delete from t_stu_detail;
         #提交事务.一旦提交事务,就完全无法回滚
         commit;
         #查看当前表的数据,发现真删除了
         select * from t_stu_detail;

17\\数据库的隔离级别(了解、DBA工程师需要知道)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值