zoukankan      html  css  js  c++  java
  • MySQL数据库 存储引擎,创建表完整的语法,字段类型,约束条件

    1.存储引擎
    - 存储引擎是用于根据不同的机制处理不同的数据。
    - 查看mysql中所有引擎:
      - show engines;

    - myisam: 5.5以前老的版本使用的存储引擎
    - blackhole: 类似于队列中的数据,存进去消失

    - innodb: 默认使用存储引擎
      - 支持事务
      - 行锁
      - 外键

    - memory: 内存引擎(通电数据存在,断电丢失)

    创建4中不同的存储引擎表
      create table t1(id int)engine=innodb;
      create table t2(id int)engine=myisam;
      create table t3(id int)engine=blackhole;
      create table t4(id int)engine=memory;

      - 提前学习 redis: 面试问的比较多;

      - 插入数据验证引擎的作用:
        insert into t1 values(1);
        insert into t2 values(2);
        insert into t3 values(3);
        insert into t4 values(4);  (关闭mysql服务端,memory数据就会消失)

    2.创建表完整的语法
    # 约束条件: 可有可无
    # 宽度: 限制某些数据类型的存储大小
    create table 表名(
      字段名1 字段类型(宽度) 约束条件,
      字段名2 字段类型(宽度) 约束条件
    );

    # 初始约束条件: not null
    create table teacher(
      id int not null, # 约束插入记录时id不能为空
      name varchar(16),
      age int
    );

    insert into teacher values(null, 'tank', 17);
    insert into teacher values(1, 'tank', 17);

    注意:
    1.创建表的字段名不能重复;
    create table test(
      id int,
      id int
    );

    2.最后一个字段不能在末尾加 , 号
    create table test(
      id int,
      age int,
    );

    3.字段名必须要有字段类型与宽度
    create table test(
      id int,
      name char  (默认为1字符)
    );
    insert into test values(1, 'tank');

    alter table test modify name char(4);
    insert into test values(2, 'sean');

    3.字段类型

    1) 确定表结构
    2) 字段与字段类型

    - 整型:
    - tinyint: 默认范围 -128, 127
    create table t5(
      id tinyint,
      name varchar(16)
    );

    insert into t5 values(-128, 'tank'), (127, 'jason');
    insert into t5 values(-129, 'tank');
    insert into t5 values(128, 'jason');
    insert into t5 values(12, 'sean');

    - int: 默认范围是(-2147483648, 2147483647)

    应用场景: id号、年龄...

    create table t6(
      id int
    );

    # int 默认宽度11---> 默认展示宽度
    insert into t6 values(-2147483649);
    insert into t6 values(2147483648);
    insert into t6 values(100);

    create table t7(
      id int(3)
    );

    # 若插入超过设定宽度,则正常显示
    insert into t7 values(123456);

    # 若插入不足够4位,则以空格补全
    insert into t7 values(1);

    - bigint

    - 浮点型:

    应用场景: 工资、身高、体重...

    - float
    - double
    - decimal

    # 范围255是最大长度(包括.小数), 30代表是小数的位数
    create table t8(x float(255, 30));
    create table t9(x double(255, 30));
    create table t10(x decimal(65, 30));

    # 插入数据
    # 三种浮点型: 区别在于精确度不一样
    insert into t8 values(1.111111111111111111111111111111);
    insert into t9 values(1.1111111111111111111111111111);
    insert into t10 values(1.1111111111111111111111111111);

    - 字符类型
    - char(16): 定长字符

    char: 手机号、身份证号、银行卡号等...

    - 插入16个字符:

    create table t11(
      id int,
      name char(4) # 4
    );

    insert into t11 values(1, 'tank');

    # utf8 中文3个bytes gbk 中文2个bytes
    insert into t11 values(2, '大鸡哥大鸡哥');

    优点:
      存取速度快
    缺点:
      浪费空间。
    insert into t11 values(1, 't'); # t+三个空格

    egon + sean + tank

    - varchar(16): 不定长字符
    - 存几个字符,就是几个字符的大小,每个字符前都要+1bytes
    - 插入16个字符 ---> 1bytes+

    优点:
      节省空间。

    create table t12(id int, name varchar(4));
    insert into t12 values(1, 'egon'); # 1bytes + egon
    insert into t12 values(2, 'tank'); # 1bytes + tank
    insert into t12 values(3, 'sean'); # 1bytes + sean

    insert into t12 values(4, 't'); # 1bytes + t
    1bytes + egon 、 1bytes + tank、 1bytes + sean


    - 日期类型
    - date: 2019-12-11
    - datetime: 2019-12-11 11:11:11
    - time: 11:11:11
    - year: 2019
    - timestamp: 时间戳

    create table student(
      id int,
      name varchar(4),
      birth date,
      register datetime,
      work_time year,
      t_time time,
      update_time timestamp
    );

    insert into student values(1, '张全蛋', '2019-11-11', '2019-11-11 11:11:11','2019', '11:11:11', null);
    (timestamp时间戳:会记录创建的时间)
    insert into student values(2, 'HCY', '1000-11-11', '1980-11-11 11:11:11','2019', '11:11:11', null);

    update student set name='HCY2号' where id=2;

    (timestamp时间戳:会变为修改的时间)
    python 插入时间数据时,转成str类型。

    - 枚举与集合
    - enum: 可以 多选一
    create table t13(
      id int,
      name varchar(4),
      gender enum('male', 'female', 'others')
    );
    # insert into 表名(字段名) values(字段名对应的值);
    insert into t13(id, name, gender) values(1, 'tank', 'male');

    # 严格模式下,选择枚举以外的值会报错
    insert into t13(id, name, gender) values(2, 'gd', '人Y');

    - set: 可 多选一 或 多选多
    create table t14(
      id int,
      name varchar(4),
      gender enum('male', 'female', 'others'),
      hobbies set('read', 'sing', '生蚝', 'HSNM', '架子鼓')
    );

    # 多选一
    insert into t14 values(1, '大鸡J', 'others', 'HSNM');
    # 多选多
    insert into t14 values(2, 'tank', 'male', 'read,架子鼓,sing,生蚝');
    注意:集合,中间用',',不可加空格!

    # 多选多的顺序可不一
    insert into t14 values(2, 'tank', 'male', 'read,架子鼓,sing,生蚝');


    4.约束条件

    - not null + unique
    create table user1(
    id int not null,
    name varchar(4)
    );

    insert into user1(id, name) values(null, 'tank');
    insert into user1(id, name) values(1, 'tank');

    - unique 将某个字段设置为唯一的值(单单unique,多个字段null不算重)

    # not null + unique
    create table user2(
    id int not null unique,
    name varchar(4)
    );

    insert into user2(id, name) values(1, 'tank'), (2, 'sean');

    - primary key + auto_increment: 主键+自增

    - primary key -----》 not null + unique
    - pk就是表中的索引: 可以通过索引快速查找某些数据。
    - 提高查询效率

    # 将id设置为主键,非空切唯一
    create table user3(
    id int primary key,
    name varchar(4)
    );

    insert into user3(id, name) values(1, 'tank');
    insert into user3(id, name) values(2, 'tank');

    - auto_increment:(必须和unique或primary key一起用。会自动排序)
    # 将id设置为自增
    create table user4(
    id int primary key auto_increment,
    name varchar(4)
    );

    # 自增默认从1开始
    insert into user4(name) values('tank');
    insert into user4(name) values('sean');
    insert into user4(name) values('egon');
    insert into user4(name) values('大鸡哥');

    # 若想自增从指定值开始,可插入第一条数据时先指定id的值;
    insert into user4(id, name) values(10, 'tank');
    insert into user4(name) values('sean'); # 11
    insert into user4(name) values('egon'); # 12
    insert into user4(name) values('大鸡哥'); # 13

    +----+-----------+
    | id | name |
    +----+-----------+
    | 1 | tank |
    | 2 | sean |
    | 3 | egon |
    | 4 | 大鸡哥 |
    | 10 | tank |
    | 11 | sean |
    | 12 | egon |
    | 13 | 大鸡哥 |
    +----+-----------+

    -default: 约束插入数据的默认值

    create table student(id int,name char(5),password char(6) not null default "000000",age int,gender enum('w','m'));

    - unsigned
    - 无符号
    create table user5(
    id int unsigned
    );
    # 报错
    insert into user5 values(-100);
    insert into user5 values(0);
    insert into user5 values(100);

    - 有符号
    create table user6(
    id int
    );

    insert into user6 values(-100);

    - zerofill
    使用0填充空格
    create table user7(
    id int zerofill
    );

    insert into user7 values(100);


    - 删除记录
    create table user8(
    id int primary key auto_increment,
    name varchar(4)
    );

    insert into user8(name) values('tank');
    insert into user8(name) values('大大大'), ('egon');

    - delete:
    # 清空user8表中的所有记录
    delete from user8; (如果再添加项,如下还继续id序号,因为能回滚)

    - truncate:
    # 清空user8表中的所以记录,并且id重置为0
    truncate table user8;(如果再添加项,id序号重新开始)

    5.设置严格模式

    # 查看数据库配置中变量名包含mode的配置参数:
    show variables like "%mode%";
    
    # 修改安全模式:
    set session;  # 局部有效,只在你当前操作的窗口有效
    set global session;  # 全局有效,永久有效
    
    # 修改完之后退出当前客户端重新登录即可
    set global sql_mode = 'STRICT_TRANS_TABLES';
  • 相关阅读:
    删除购物车列表页面商品
    购物车页面修改数量功能实现
    cookie来实现购物车功能
    wxWidgets学习计划
    正则校验表达式
    Vue组件间的参数传递与Vue的路由实现
    Vue实现数据双向绑定的原理
    Vue的生命周期
    对于mvvm的理解
    vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
  • 原文地址:https://www.cnblogs.com/ludingchao/p/12024514.html
Copyright © 2011-2022 走看看