学习日记27--MySQL学习1

  1. 数据库排名网站:db-engines.com/en/ranking
    学习日记27--MySQL学习1_第1张图片

  2. Oracle收费,MySQL免费,MongoDB和Redis是nosql型数据库,SQLite是移动端常用数据库。

  3. 当前物理的数据库都是按E-R模型设计的,其中E代表实体(entry),R代表关系(relationship)。
  4. 数据库设计三范式,后一个范式都是在前一个范式的基础上建立的。
    1Nf:列不可拆分,2Nf:唯一标识,3Nf:引用主键
  5. 在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,包括数据字段的类型、约束。
  6. 数据类型
    1. 数字: int(5):5位数; decimal(5,3):一共五位数,小数点后3位
    2. 字符串:char(n):有限长度字符串; varchar(n):有限长度字符串; text():不定长度

    Char为定长,varchar,text为变长、
    (https://blog.csdn.net/leoly612200/article/details/74929161)
    1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
    2、VARCHAR。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的
    值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。
    从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
    3、TEXT。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
    注意一点的,Char,Varchar不像数值类型,有系统默认长度,所以必须在括号里定义长度,可以有默认值
    text不可以写默认值,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入(严格模式下没有测试)
    总结:char会造成空间浪费,但是有速度优势;而varchar节省了空间,但是速度就不如char。
    (1)经常变化的字段用varchar
    (2)知道固定长度的用char
    (3)尽量用varchar
    (4)超过255字节的只能用varchar或者text
    (5)能用varchar的地方不用text

    3. 日期:datetime,date
    4. 布尔:bit,用来做有限数量的选择,如性别
  7. 约束
    1. 主键:primary key 找数据快。一个表只能有一个主键。物理存储是按主键存储的。
    2. 非空: not null 检查非空否则报错
    3. 唯一: unique 属性值是不能重复的,主键也满足。
    4. 默认: default 不填就是默认值
    5. 外键约束:foreign key 第三范式的外键引用
    6. 逻辑删除:isDelete 保护数据
  8. 命令行数据库操作:
    1. 创建数据库:mysql>create database xxx charset=utf8;
    2. 查看所有数据库:show databases;
    3. 切换数据库:use xxx;
    4. 查看当前数据库: select database();
    5. 删除数据库: drop database xxx;
  9. Ubuntu上登录sql

    1. 连接MySQL:sudo mysql -uroot -p
    2. 查看帮助:mysql –help
    3. 进入mysql后,查看版本:select version(); 分号结尾。 显示当前时间:select now();
    4. 远程连接:mysql -h(ip地址) -u(root) -p
      1.-h后写要连接的ip地址
      2.-u后写连接的用户名
      3.-p回车后写密码
    5. mysql默认端口号3306
    6. 创建数据库: create database DBname charset=utf8;
    7. 删除数据库:drop database DBname;
    8. 切换数据库:use DBname;
    9. 查看当前数据库:select database();
    10. 查看所有存在的数据库:show databases;
  10. 表操作:

    1. 查看当前所有表:show tables;
    2. 创建表:mysql> create table yyy(id int auto_increment primary key not null,name varchar(10) not null, gender bit default 1,birthday datatime);
    3. 查看表的结构:desc yyy;
    4. 修改表: alter table yyy add|change|drop … …;
    5. 物理性删除表:drop table yyy;
    6. 更改表名称:rename table yyy to ttt;
    7. 查看表的创建语句:show create table ‘表名’
  11. 数据操作

    1. 查询: select * from 表名
    2. 增加: 全列插入:insert into 表名 values(…)
      缺省插入:insert into 表名(列1,…) values(值1,…)
      同时插入多条数据:insert into 表名 values(…),(…)…;
      insert into 表名(列1,…) values(值1,…),(值1,…)…;
    3. values的常见格式有 int 整型;decimal(x,y) 浮点型表示共x位,小数点后y位 ;varchar(n),字符串长度为n, bit default 1 默认为1.
    4. 主键列是自动增长,但是在全列插入时需要占位,通常使用0,插入成功后以实际数据为准
    5. 修改数据:update 表名 set 列1=值1,… where 条件
    6. 物理删除: delete from 表名 where 条件 ; 逻辑删除:update students isdelete=1 where … ;
  12. 备份与恢复

    1. 备份:进入超级管理员 sudo -s
      进入mysql库目录
      cd /var/lib/mysql
      运行mysqldump命令
      mysqldump –uroot –p 数据库名 > ~/Desktop/备份文件.sql;
    2. 恢复:连接mysql,创建数据库
      退出连接exit,执行如下命令
      mysql -uroot –p 数据库名 < ~/Desktop/备份文件.sql
      根据提示输入mysql密码

你可能感兴趣的:(日记)