zoukankan      html  css  js  c++  java
  • 数据库建表

    1. 数据的存储方式

      • 数据存储在内存中,也就是说数据断电消失 1个文件:memory
      • 数据存储在硬盘上,也就是说数据持久化存储:innodb,myisam
        • 数据和索引一张表,表结构一张表:innodb(5.6以后mysql的默认存储引擎)
        • 数据和索引不存在一起(索引1个文件,数据1个文件,表结构1个文件):myisam(5.5以前MySQL的默认存储引擎)
    2. 存储引擎介绍:存储数据的方式

      • Innodb存储引擎(2个文件);**MySQL5.6版本后的默认引擎

        • 支持事物:为了保证事物的完整性,把多个操作变成原子性操作。
        • 支持行级锁:修改的行少的时候使用,在修改数据频繁的时候是具有效率优势的
        • 表级锁:批量修改多行的时候使用,对于大量数据同时修改是有好处的
        • 支持外键:约束两张表中的关联字段不能随意的添加或删除,能够极大降低数据增删改的出错率。
      • myisam存储引擎(3个文件),5.5之前默认的,支持表级锁.

      • memory 存储引擎,只存表结构,断电消失

      • 面试题:

        • 你了解MySQL的存储引擎么?你的项目用了什么存储引擎,为什么?
          • 了解一些
          • innodb
          • 多个用户操作的过程中对同一张表的数据同时修改
          • innodb支持行级锁,所有我们使用了这个存储引擎
          • 为了适应程序未来的扩展性,扩展新功能的时候可能会用到。。。。涉及到要维护数据的完整性
          • 项目中有一两张***表,之间的外键关系是什么,一张表的修改或者删除比较频繁,怕出错所有选择了innodb
      • show engines;简单地显示存储引擎

      • 查看引擎:show variables like '%engin%';

      • 查看当前数据库:Select database()

      • 显示表的创建信息:Show create table 表名

    3. 表介绍:

    4. 创建表:

      create table 表名(
      id int primary key auto_increment,
      name char(18),
      ....... 
      )
      
    5. 插入数据的方式

      • insert into student values (2,'wusir'),(3,'hqq'); 插入多条数据
      • insert into student values(值1,值2,值3) 插入单条数据
      • 指定字段名写入:
        • insert into student(字段1,字段2,字段3) values (值1,值2,值3) 指定要插入的字段 插入;
    6. 查看表中数据

      • select * from 表
    7. 查看表结构:

      • desc 表名;(describe)
        • 能够看到有多少个字段,类型,长度,看不到编码,引擎,具体约束信息
      • show create table 表名G
        • 啥都能看
    8. 表的完整性约束

      • 约束某一个字段

        • 无符号:unsigned

        • 不能为空:not null

        • 默认值是什么:default

        • 唯一约束:unique,值不能重复,但是null可以写入多个。

        • 联合唯一:unique (字段1,字段2)

        • 自增id:auto_increment

          • 至少是unique的约束之后才能自增约束
          • id int primary key auto_increment
        • 主键:primary key

          • 一张表只有一个
          • 如果不指定,默认是第一个非空并且唯一
          • 联合主键 primary key(字段1,字段2)
        • 外键:

          • 学生表

            create table student(
            id int primary key auto_increment,
            name char(12) not null,
            gender enum('male','female') default 'male',
            class_id int,
            foreign key (class_id) references 班级 (cid) on update cascade on delete cascade
            )
            
          
          
        • 班级表

            ~~~
            create table 班级(
            cid int primary key auto_increment,
            cname char(12) not null,
            start_time date
            )
          
          
          
      • 非空+唯一约束:

        • 第一个被定义为非空+唯一的那一列会成为这张表的primary key。
      • 设置主键:primary key id

      • 联合主键;

          - primary key(ip,port)  # 自动会给ip,port设置一个默认default ' '
        
    9. 修改表结构

    10. 删除表:

    • drop 表名
    1. 多表结构的关系分析:

      • 多对一

        • 学生,班级

          • 多个学生是一个班级

          • 学生表有一个外键 关联班级表

        • 书籍 作者

          • 多本书可以是一个作者写的
          • 书籍有一个外键 关联作者表
        • 商品 订单

          • 多个商品可以在一个订单中
          • 商品表有一个外键 关联订单表
        • 书籍 出版社

          • 多本书可以同一个出版社出版的
          • 书籍表有一个外键 关联出版社表
      • 多对多:

        • 学生 班级 多对一
          • 多个学生是一个班级的
        • 班级 学生 多对一
          • 多个班级对应一个学生
        • 出现第三张表
      • 一对一

        • 客户 -- 学生
        • unique foreign key
    2. MySQL中的数据类型:

      • 数字

        • Tinyint 1个字节(256种情况) (-128,127) (0,255) 小正数 ,如果年龄(要unsigned约束)

        • smallint 2个字节

        • mediumint 3字节

        • Int 4个字节 最多表示十位数

        • bigint 8字节

        • float 4 字节

          • float(总位数,小数部分位数)
        • double

          • double(总位数,小数部分位数)
          create table t1(
          	id int,# 默认有符号的,如果需要定义无符号,用unsigned
            age tinyint unsigned
          )
          
          desc t1
          inser into t1 values(1,100)
          
          
        • decimal :精确到小数后20位,总共30位,默认10,0。

      • 字符串

        • char 0-255 定长字符串
          • char(字符个数) 最多只能表示255个字符
          • 定长存储 'hqq' —》'hqq ',节省时间,浪费空间。
        • varchar 0-65535个字符
          • varchar(字符个数)
          • 变长存储 'hqq' —》'hqq4',节省空间,效率低,存取速度慢
        • 什么时候用char 或者varchar?
          • char :
            • 省份证号,手机号,QQ号,username(12-18),password(10-16或32),银行卡号
          • varchar:
            • 评论,朋友圈,微博
      • 时间: 常用的 date time datetime

        • datetime:8字节
          • 20190620121900
        • year:1900-2155 1个字节
        • Date:1000-01-01/9999-12-31 3个字节
          • 20190620
        • time:'-838:59:59'/'838:59:59' 3个字节
          • 121900
        • timestamp 4个字节
          • 1970-01-01 00:00pass
      • enum/set:

        • Enum :单选行为
        • set : 多选行为
    3. 修改表的操作进阶:

      • 修改表名:alter table 表名 rename 新表名
      • 增加字段:alter table 表名 add 字段名 数据类型 [约束条件]
        • alter table 表名 add 字段名 数据类型 after 字段名
        • pass
      • 修改字段:
        • alter table 表名 modify name 要改的类型;
    4. 例子

       create table publish(id int auto_increment primary key,title char(32),addr char(32));
      
       create table test(title char(32),addr char(32));
      
      
  • 相关阅读:
    Function to use in Queries, Filters
    Dynamics AX 2012
    Job to Import Vendor/Customer Postal Address in Dynamics Ax2012
    To Find or Update customer primary Address in Ax 2012
    Importing Customers, Vendors and Products in AX 2012
    CobaltStrike安装教程
    kali安装dnsdict6
    查看windows端口被占用
    使用reGeorg打穿HTTP隧道代理
    windows建立隐藏用户
  • 原文地址:https://www.cnblogs.com/he-qing-qing/p/13592314.html
Copyright © 2011-2022 走看看