美文网首页
MySQL数据库

MySQL数据库

作者: 极速魔法 | 来源:发表于2020-07-11 15:18 被阅读0次

    windows 命令行

    net start mysql57 // 关闭
    net stop mysql57 // 停止

    mysql语句

    -- 短划线后面空格+注释内容
    /* mysql注释*/
    # 注释
    use db1 -- 切换数据库
    SELECT DATABASE() -- 查看当前数据库
    CREATE DATABASE DB1 CHARACTER SET utf8 -- 设置字符集
    CREATE TABLE new LIKE old -- 复制表
    DESC test  -- 查看表结构
    SHOW CREATE TABLE test -- 查看创建表语句
    

    mysql数据类型

    • int
    • double
    • varchar 可变长度
    • char 字符串类型,固定长度
    • date yyyy-MM-dd 日期
    • datetime yyyy-MM-dd HH:mm:ss

    修改表

    RENAME TABLE old TO new; -- 修改表名
    
    ALTER TABLE test CHARACTER SET uft8 -- 修改表字符集
    
    ALTER TABLE test ADD name VARCHAR(20); -- 向表添加字段
    
    ALTER TABLE test MODIFY name VARCHAR(50); -- 修改表字段name的类型
    
    ALTER TABLE test CHANGE old new CHAR(30); -- 修改表字段old为 new new CHAR(30)  
    
    ALTER TABLE test DROP name; -- 删除表字段 name
    

    插入数据

    char,varchar,date 类型数据用单引号或双引号包裹

    删除数据

    TRUNCATE TABLE test -- 删除表中所有数据,整个表删除,再创建一个一样的新表
    

    查询操作不会对数据表的数据进行修改

    条件查询 先取出表中每条数据,满足的就返回,不满足的就过滤。

    != ,<> -- 不等于
    BETWEEN a AND b -- [a,b]
    IN(a,b,c) -- 包含元素a,b,c
    
    LIKE '%a%' -- % 表示匹配任意多个字符
         _ -- 匹配一个字符
    ... WHERE name IS NULL -- 查询字段空值
    ... WHERE name IS NOT NUL -- 查询字段不为空值
    

    排序

    -- 组合排序
    ... ORDER BY id DESC,salary DESC 
    

    聚合

    count() 忽略空值

    分组

    分组返回的是第一条数据

    SELECT * FROM emp GROUP BY sex

    分组之后过滤 having

    SELECT XX,AVG(salary) FROM xx WHERE xx HAVING AVG(salary) > 6000

    • where 分组前过滤,不能跟聚合函数
    • having 分组后过滤,可以跟聚合函数

    limit

    limit offset,lenght 格式 offset从 0 开始,数据库 id从1 开始

    Primary key 唯一,非空约束

    ALTER TABLE test ADD PRIMARY KEY(id) -- 添加主键
    ALTER TABLE test DROP PRIMARY KEY -- 删除主键
    
    CREATE TABLE xx (   
        ...
    )AUTO_INCREMENT=100 -- 自定义自增的起始位置
    

    delete删除对自增没有影响,truncate 自增从1开始

    唯一约束对null值不做唯一判断,也就是可以有多条记录为null值

    事务

    mysql 默认开启自动事务提交

    事务特性

    • 原子性,事务是整体不可分割
    • 一致性,执行前后状态一致,例如金额总和
    • 隔离性,事务之间不相互影响
    • 持久性,对数据的修改是保存的

    外键约束

    外键可以是空值,但为空的数据跟与之相关联的表就没有关系了

    -- 新加表 外键约束
    ...
    constraint emp_dept_fk FOREIGN KEY(dept_id) references depart(id);
    
    -- 删除外键约束
    ALTER TABLE emp DROP FOREIGN KEY emp_dept_fk;
    
    -- 添加外键
    ALTER TABLE emp ADD 【constraint emp_dept_fk】 FOREIGN KEY(dept_id) references depart(id);
    

    删除数据,先删除从表中数据,再删主表数据

    级联删除

    ON DELETE CASCADE
    删除主表的同时,关联的从表数据也删除

    多表关系

    一对多 ,多的一方建立外键,一的一方建立主键

    一对一,任意一方设置外键,外键设置为 unique

    多表查询给表起别名简化 书写

    隐式内连接

    , 连接两张表 where 条件

    显示内连接

    INNER join 连接两张表

    查询步骤

    • 查询几张表
    • 查询的连接条件
    • 查询的字段
    • 查询条件

    外连接

    左外接

    以左表为基准
    SELECT 字段名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 条件

    右外接

    以右表为基准
    SELECT 字段名 FROM 左表 RIGHT [OUTER ]JOIN 右表 ON 条件

    子查询

    1.where型,一个字段
    2.from型,多个字段,子查询结果作为一张表要起别名
    3.exist,单列多行,配合in 使用
    select 字段 from 表 where 字段 in (子查询)

    索引

    -- 创建uniqu索引
    create unique index ind on demo1(hobby);
    -- 删除索引
    alter table demo1 drop index ind;
    
    

    视图

    查询结果形成的一张虚拟的表,当做只读表

    删除表,视图不起作用了

    create view 视图名[字段] as select 查询语句;
    
    

    存储过程

    一堆sql语句的合并,加入一些逻辑控制

    delimiter $$ -- 声明语句的结束符合
    create procedure 存储名称() -- 声明存储过程
    create procedure 存储名称(in 参数名称 参数类型) -- 声明存储过程带参数
    begin
      -- sql语句
    end $$
    
    -- 调用存储过程
    call 存储名称;
    
    -- 变量赋值
    set @变量名 = 值
    -- 返回值定义
    out 变量名 类型
    -- 返回数据
    select @out_num;
    
    call(1,2,3,@out_num);
    

    触发器

    执行sql语句,自动触发其他sql语句执行

    delemeter $
    -- 创建触发器
    create triger t1
    -- 触发的时间,监视的事件,表
    after insert on orders
    -- 行触发器
    for each row
    begin
        update goods set num= num -1 xxx;
    end $
    
    

    用户权限

    -- 授权
    grant 权限 on 数据库.表 to ‘用户名’@‘主机名’;
    -- 查看授权
    show grants for ‘用户名’@‘主机名’;
    

    数据库备份

    mysqldump -uroot -p1234 db2 > 文件路径
    命令行导出没有创建数据库语句,手动创建

    进入mysql命令行
    source 文件路径

    相关文章

      网友评论

          本文标题:MySQL数据库

          本文链接:https://www.haomeiwen.com/subject/ycdicktx.html