MySQL基础知识

mysql操作

  1. 停止mysql服务
    net stop mysql

  2. 开始mysql服务
    net start mysql

  3. 登陆mysql

  4. mysql -u用户名 -p密码

  5. mysql -u用户名 -p
    password:密码
    3.mysql --user=用户名 --password=密码

  6. 登陆已知ip相同端口的同学的mysql

  7. mysql -hip -u用户名 -p密码

  8. mysql --host=ip --user=用户名 --password=密码

  9. 退出mysql

  10. exit

  11. quit

DCL

  1. 管理用户

    (1)查询用户:
    use mysql; ——选择mysql数据库
    select * from user; ——查询user表格

     *通配符:% 可以在任意主机上登录
    

    (2)创建用户:
    create user '用户名'@'主机名' identified by '密码';

    (3)删除用户:
    drop user '用户名'@'主机名';

    (4)修改用户密码:
    update user set password = password('新密码') where user = '用户名';
    set password for '用户名'@'主机名' = password('新密码');

     mysql忘记密码:
         1.cmd ---> net stop mysql 停止mysql服务(需要管理员权限运行)
         2.cmd ---> mysqld --skip-grant-tables 跳过验证服务
         3.cmd ---> mysql 直接进入mysql数据库
         4.cmd ---> use mysql; 选择mysql数据库
         5.cmd ---> update user set password = password('新密码') where user = 'root';
         6.手动在任务管理器中停止该服务.
         7.cmd ---> net start mysql 重启mysql数据库
         8.cmd ---> mysql -u用户名 -p密码 登陆mysql数据库
    
  2. 权限授予
    (1)查询权限:
    show grants for '用户名'@'主机名';

    (2)授予权限:
    grant 权限列表 on 数据库.表名 to '用户名'@'主机名';
    权限列表的通配符为:all;
    数据库和表的通配符为:*;

    (3)撤销权限:
    revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

ps:revoke:撤销; grant:发放;

DDL

操作数据库:

  1. 查询
    (1) show databases; ——查询所有的数据库
    (2)show create database 数据库名; ——根据名称查询已经创建的数据库

  2. 创建
    (1)create database 数据库名; ——创建数据库
    (2)create database if not exists 数据库名; ——判断是否存在该数据库再创建
    (3)create database 数据库名 character set 字符集码; ——创建自定义字符集数据库(默认为utf8)
    (4)create database if not exists 数据库名 charater set 字符集码; ——判断是否存在并创建自定义字符集的数据库

  3. 修改
    (1)alter database 数据库名 character set 字符集码; ——修改指定数据库的字符集码

  4. 删除
    (1)drop database 数据库名; ——删除数据库
    (2)drop database if exists 数据库名; ——判断该数据库是否存在,再进行删除

  5. 使用数据库
    (1)use 数据库名; ——使用指定的数据库
    (1)select database(); ——查看所选择使用的数据库

操作数据库的表:

  1. 查询
    (1)show tables; ——查询该数据库所有的表
    (2)desc 表名; ——查询该数据库指定的表及其结构
    (3)show create table 表名; ——查询该数据库指定的表及字符集

  2. 创建
    (1)create table 表名(); ——创建无列表格
    (2)create table(
    列名 列名的数据类型,
    ); ——创建有列表格

    数据类型:
    int 整型数字
    varchar(char个数) 字串符
    double(总体位数,点后位数) 浮点数字
    date 年月日 yyyy-MM-dd
    datetime 年月日时分秒 yyyy-MM-dd HH:mm:ss
    timestamp 总体类似于年月日时分秒,无赋值默认返回当前时间

    (3)create table 复制后的表名 like 复制的表名; ——复制指定表格

  3. 删除
    (1)drop table 表名; ——删除该数据库的指定表
    (2)drop table if exists 表名; ——判断是否存在再删除表

  4. 修改
    (1)alter table 表名 rename to 新表名; ——修改表名
    (2)alter table 表名 character set 字符集码; ——修改表的字符集
    (3)alter table 表名 add 列名 列的数据类型; ——添加列
    (4)alter table 表名 change 列名 新列名 新列数据类型; ——修改指定的列的列名及列的数据类型
    (5)alter table 表名 modify 列名 新的列数据类型; ——修改列的数据类型
    (6)alter table 表名 drop 列名; ——删除指定的列

DML

  1. 添加
    (1)insert into 表名 (列名....) values (列值....); ——添加表中数据,也就是表格的行数(列与值要一一对应)
    (2)insert into 表名 values (不写列名默认填入全部列值); ——添加表中数据

  2. 删除
    (1)delete from 表名 where 条件语句; ——删除指定条件的行记录(不加条件where则默认全删,全删的效率低)
    (2)truncate table 表名; ——删除表并重新创建同名的空表

  3. 修改
    (1)update 表名 set 列名1 = 值名1, 列名2 = 值名2 where 条件属性; ——修改指定位置的多个属性(不加where则默认全表的该列进行修改)

DQL

  1. 查询query

    (1)select 字段列表 from 表名列表 where 条件列表 order by 排序字段 排序方式, 排序字段2 排序方式2 group by 字段列表 having 分组后的条件列表 limit 分页限定; ——查询指定列名的表格数据

    (2)select distinct 字段列表 from 表名列表; ——查询指定列名的表格数据并去除重复(distinct)

    (3)select distinct 字段列表 as 别名 from 表名列表; ——起别名(as)

    (4)select distinct 字段列表1 别名1, 字段列表2 别2 from 表名列表; ——起别名

    (5)order by 多个字段排序 多个字段排序方式:
    asc: 升序
    desc: 降序
    如果多个排序条件,则当前面条件值一样时才判断第二条件

    (6)limit 索引号,几条信息; (属于mysql特有的方言)

  1. 函数

    ifnull(判断值,满足null后返回结果) ——判断是否为null

  1. 运算符

    = ——等于
    <> != ——不等于
    and && ——与
    or || ——或
    between n and m ——结果在n和m之间
    in(m,n,集合) ——结果是n,m其中一个

    like ——模糊查询 (!important)
    占位符:
    _ ——单个字符
    % ——0到多个字符
    '' ——包含想要查询的字符内容

    not ! ——非
    is null ——判断是否为空
    is ——表示判断

  1. 聚合函数

    count ——计算个数
    max ——计算最大值
    min ——计算最小值
    sum ——求和
    avg ——计算平均值

    ps:聚合函数计算会自动排除null值计算
    1.一般选择非空列(主键)
    2.ifnull(有null的列,0) ——如果为null替换为0

  1. 约束(保证数据的正确性,有效性,完整性)constraint

    (1)primary key ——主键约束(非空且唯一)

     alter table 表名 drop primary key; ——删除主键约束
    
     ps:自动增长不一定是主键,主键居多
    
     create table 表名(
         字段名 字段数据类型 约束类型 (主键可继续添加自动增长auto_increment);
     );  ——添加自动增长auto_increment(创建表前)
    
     alter table 表名 modify 列名 列数据类型; ——删除自动增长
    
     alter table 表名 modify 列名 列数据类型 主键约束 自动增长; ——添加自动增长auto_increment(创建表后)
    
     primary key(主键列);       ——联合主键
    

    (2)not null ——非空约束

     alter table 表名 modify 列名 列数据类型; ——删除非空约束
    

    (3)unique ——唯一约束(唯一索引)

     alter table 表名 drop index 列名; ——删除唯一约束
    

    (4)foreign key ——外键约束(表与表产生联系,从而保证数据的正确性)

     create table 表名(
         ......
         列名 列的数据类型,
         constraint 外键名称 foreign key (外键列名称) references 主表名称(主要列名称)
     ); ——添加外键(创建表前)
    
     alter table 表名 drop foreign key 外键名称;   ——删除外键
    
     alter table 表名 add constraint 外键名称 foreign key 外键列名称 references 主表名称(主表列名称); ——添加外键(创建表后)
    
     ps:constraint 约束;   references 参考,引用;
    
     外键的级联类型(紧慎使用):
    
     on update cascade   ——级联更新
     on delete cascade   ——级联删除
    
     alter table 表名 add constraint 外键名称 foreign key 外键列名称 references 主表名称(主表列名称) 级联类型; ——添加级联
    
     foreign key 外键列名称 references 主表名称(主表列名称) 级联类型; ——级联(两表格有相同列时)
    

    ps:创建约束

    create table 表名(
    字段名 字段数据类型 约束类型 (自动增长auto_increment);
    );
    ——创建表前添加约束

    alter table 表名 modify 列名 列数据类型 约束类型;
    ——创建表后添加约束

  1. 范式(呈递次规范)

    第一范式: 每一列都是不可分割的原子数据项
    (存在问题:
    1.数据冗余
    2.数据更改存在问题,导致数据不合法)

    第二范式:在1nf基础上,非码属性必需完全依赖于码(在1nf基础上消除非主属性对码的部分函数依赖)
    (基本概念:
    1.函数依赖: A-->B : B依赖于A
    属性组: (name, subject) 属性组 ---> 被依赖 score 被依赖对象
    2.完全函数依赖:B依赖于A属性组的所有值
    3.部分函数依赖:B依赖于A属性组的部分值
    4.传递函数依赖:A-->B, B-->C 传递依赖由B依赖于A,到C依赖于A
    5.码:一个属性或属性组被其他属性所完全依赖
    主属性:码属性组中的所有属性
    非主属性:除过码属性组的属性)
    (存在问题:
    1.数据更改存在问题,导致数据不合法)

    第三范式:在2nf基础上,任何非主属性不依赖于其他非主属性(在2nf基础上消除传递)

  1. 数据库的备份和还原

    命令行:
    备份: mysqldump -u用户名 -p密码 数据库名称 > 保存路径
    还原:
    1.创建数据库: create database 数据库名;
    2.使用数据库: use 数据库名;
    3.导入: source 文件备份保存路径;

    图形化工具:

  1. 表间连接

    内连接:
    隐式内连接:
    例如:where temp1.id = temp2.id;
    显式内链接:
    select 选择列表.字段 from 表1 inner join 表2 on 表1.字段 = 表2.字段;

    外连接:
    左外连接:
    select 选择列表.字段 from 表1 left [outer] join 表2 on 表1.字段 = 表2.字段;
    ——查询左表及其交集内容
    右外连接:
    select 选择列表.字段 from 表1 right [outer] join 表2 on 表1.字段 = 表2.字段;
    ——查询右表及其交集内容

    子查询:
    单行单列:
    运算符:
    例如:select * from temp where id < (select AVG(id) from temp);

     多行单列:
         in: ——类似于或OR
             例如:select * from temp where id in (select id from temp2);
    
     单行多列:
         虚拟表参与查询:
             例如:select * from temp t1, (select id from temp2) t2 where t1.id = t2.id ;
    
  2. 事务
    基本:
    1.开启事务: start transaction; ——开始事务
    2.回滚: rollback; ——返回最初的值
    3.提交事务: commit; ——持久性修改

    查询:
    select @@autocommit; -- (1为自动, 0为手动) ——默认自动提交,查询提交方式
    set @@autocommit = 数字; ——设置提交方式

    四大特征:
    1.原子性:不可分割的最小操作单位.
    2.持久性:当事务提交或回滚后,数据库会持久化保存数据.
    3.隔离性:多个事务间相互独立.
    4.一致性:数据操作前后,总量不变.

    隔离级别:
    1.read uncommited; ——读未提交
    问题: 脏读,不可重复读,幻读;
    2.read commited; ——读已提交
    问题: 不可重复读,幻读;
    3.repeatable read; ——可重复读
    问题: 幻读;
    4.serializable; ——串行化
    问题: 0;

     ps:隔离级别越大安全性越高,效率越低.
    
     select @@tx_isolation; ——数据库查询隔离级别
    
     set gubal transaction isolation level 级别字串符; ——数据库设置隔离级别
    

你可能感兴趣的:(MySQL基础知识)