• 数据库2


    存储引擎

    存储引擎:用于根据不同的机制处理不同的数据。

    mysql存储引擎:

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

    ​ -myisam:mysql老版本用的存储引擎

    ​ -blackhole:存任何数据进去都会立即消失

    ​ -memory:内存引擎(数据存放在内存中)

    查看所有引擎: show engines;

    创建表的完成语法

    create table 表名(
    	字段名1 字段类型(宽度) 约束条件,
        字段名2 字段类型(宽度) 约束条件
    );
    
    1.宽度指的时对存储数据的限制
    create table user_info(name char);
    insert into user_info('lll');
    '''
    没有安全模式的数据库版本能够存放数据,但只能存进去一个l,
    最新数据的版本直接报错:Date too long for colum 'name'
    '''
    
    2.约束条件初识:null与not null
    create table t1(id int, name char not null);
    #正常存储
    insert into t1 values(1,'t');
    #报错
    insert into t1 values(2,null);
    
    #注意
    #1.字段名与字段类型都是必须的,宽度和约束条件可选
    create table t1(id);
    
    #2.同一张表中字段名不能重复
    create table t1(id int, id int);  #报错
    
    #3.最后字段后不能加逗号
    create table t1(id int,); #报错
    '''
    总结:类型与约束条件的区别
    		类型:限制字段必须以什么杨的数据类型存储
    		约束条件:约束条件是在类型之外添加一种额外的限制
    	
    '''
    

    数据类型

    建表时,字段都有对应的数据类型

    *整型

    *浮点型

    *字符类型char,varchar

    *日期类型

    *枚举与集合

    #整型:tinyint,smallint,mediumint,int,bigint
    
    #tinyint
    1)默认有正负符号限制:
    默认范围(128,127)
    create table t2(id tinyint);
    #超出限制,不能插入
    insert into t2 values(-129),(256);
    
    2)无符号限制:unsigned  范围变为(0,255)
    create table t3(number tiny unsigned);
    #报错
    insert into t3 values(-10),(256);
    
    
    #int:int默认最大展示位数11位
    create table t4(id int);
    #默认范围是(-2147483648, 2147483647) 超出范围报错
    
    #注意:整型后的宽度 如 int(8)不是限制长度,而是控制展示数据的位数,8位以内以空格不全,超出则正常显示
    
    
    
    
    
    #浮点型:float,double,decimal
    #应用场景:身高,体重,薪资
    #存储限制:
    float(255,30)
    double(255,30)
    decimal(65,30)     #前一位表示所有位数,后一位表示小数个数
    
    #精确度验证:
    create table t4(n float(255, 30));
    create table t5(n double(255, 30));
    create table t6(n decimal(65, 30));
    
    #float精确到小数点后7位
    insert into t4 values(1.1111111111111111111111111111);
    #double精确到小数点后15位
    insert into t5 values(1.1111111111111111111111111111);
    #decimal小数点后30位都精确
    insert into t6 values(1.1111111111111111111111111111);
    
    #字符类型:varchar char
    #应用场景:姓名,地址,描述信息
    1.char:定长
    #超出四个字符报错,不够四个字符空格不全
    create table t7(name char(4));
    
    #char类型特点:无法查看字符真实长度,针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中,但是会在读出结果的时候自动去掉末尾空格
    
    2.varchar:不定长
    #超过四个字符报错,不够四个有几个存几个
    create table t8(name varchar(4));
    
    
    3.char varchar 比较
    '''
    char:
    	-浪费空间
    	-存取速度块
    	
    varchar:
    	-节省空间
    	-存取速度慢
    '''
    
    '''
    日期类型: 用字符串存
    date:年-月-日
    time:时:分:秒
    datetime:年-月-日 时:分:秒        
    year:年
    timestamp时间戳
    '''
    create table teacher(
    	id int,
        name varchar(16),
        born_year year,
        birth date,
        work_time time,
        register_time datetime
    );
    
    insert into teacher values(1, 'lll', now(), now(), now(), now());
    
    
    #枚举与集合
    #枚举enum 多选一
    #集合set 多选一 或多选多
    
    #枚举
    create table user1(
    	id int,
        name char(16),
        gender enum('male', 'female')
    );
    #报错
    insert into user1 values(1,'lll','others');
    #正确
    insert into user1 values(1,'lll','male');
    
    
    #集合
    create table user2(
    	id int,
        name char(16),
        gender enum('male','femael'),
        hobbies set('reading','running','singing')
    );
    #多选一
    insert into user2 values(1,'lll','male','reading');
    #多选多
    insert into user2 values(2.'zzz','male','reading,running');
    #注意:reading running 必须连着写
    
    

    约束条件

    约束条件就是对数据库表插入数据时加以约束

    #约束条件介绍
    -primary key(pk)
    	标识该字段为该表的主键,主键可以是唯一的表示记录
    
    -foreign key(fk)
    	标识该字段为该表的外键
    	
    -not null
    	标识该字段不能为空
    	
    -unique
    	限制字段值是唯一的
    	
    -auto_increment
    	标识该字段的值自动增长(整数类型, 并且为主键)
    
    -default
    	为该字段设置默认值
    
    -unsigned
    	无正负符号
    	
    -zerofill
    	使用0填充空格
    
    #not null + default
    create table student(
    	id int,
        name char(16) not null,
        gender enum('male', 'female') default 'male'
    );
    
    insert into student(id, name) values(1,'lll');
    insert into student(id, name, gender) values(2,'qqq','female');
    
    
    #unique
    create table user3(
    	id int unique,
        name char(16)
    );
    insert into user3 values(1,'lll');
    #若id已存在则报错
    insert into user3 values(1,'zzz');
    
    #联合唯一
    create table user4(
    	id int,
        name char(16),
        unique(id, name)
    );
    #若ID与name联合存在则报错
    insert into user4 values(1,'lll');
    insert into user4 values(2,'lll');
    insert into user4 values(1,'zzz');
    
    #primary key + auto_increment:主键+自增
    # 约束角度: primary key  == not null + unqiue
    create table user7(
    	id int primary key
    );
    
    # 唯一
    insert into user7 values(1);
    insert into user7 values(1);
    
    # 不能为空
    insert into user7 values(null);
    
    # 注意: primary key 除了约束之外,它还是innodb引擎组织数据的一句,提升查询效率
    
    # 强调:
    '''
    		1.一张表必须只有一个主键,如果没有设置主键,会从上到下搜索,直到遇到 "第一个"非空且唯一的字段自动设置为主键。
    '''
    create table user8(
    	id int,
      name varchar(16),
      age int not null unique
    )engine=innodb;
    
    desc user8;
    
    '''
    		2.如果包里没有指定任何可以设置主键的字段,那innodb会采用自己默认的一个隐藏关键字作为主键,隐藏意味着查询你的时候通过这个加速查询。
    		索引: 类似于书的目录, 没有主键就相当于一页一页翻着查询。
    
    		3.一张表中通常都应该有一个id字段,并且通常将id字段作为主键。
    '''
    
    # 联合主键: 多个字段联合起来作为一个主键,本质上还是一个主键
    create table user9(
    	id int,
    	name varchar(16),
    	primary key(id, name)
    );
    desc user9;
    
    # 主键id作为数据的编号,应该设置为自动递增
    create table user10(
    	id int primary key auto_increment,
      name varchar(16)
    );
    desc user10;
    
    insert into user10(name) values('tank');
    insert into user10(name) values('sean'),('jason'),('大饼');
    
    
     # 若想自增从指定值开始,可插入第一条数据时先指定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
                    
                    
    
    # 注意: auto_increment通常加在主键上,并且只能设置给primary key字段。
    
    # 补充:
    delete from user10;
    # delete删除表的记录或者指定记录,但id不会重置为0
    # 删除某一条记录
    delete from user10 where id='4';
    
    # 若想要清空id重置为0,可使用truncate user10;
    
    #设置严格模式
    # 查看数据库配置中变量名包含mode的配置参数:
    show variables like "%mode%";
    
    # 修改安全模式:
    set session;  # 局部有效,只在你当前操作的窗口有效
    set global session;  # 全局有效,永久有效
    
    # 修改完之后退出当前客户端重新登录即可
    set global sql_mode = 'STRICT_TRANS_TABLES';
    
  • 相关阅读:
    Android面试题目整理与解说(一)
    Linux 6.3下安装Oracle Enterprise Cloud Control 12c
    xcode5. 安装cocos2d-x 学习中。。。
    Bootstrap组件之输入框组
    洛谷P2852 [USACO06DEC]牛奶模式Milk Patterns
    洛谷P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold
    洛谷P4051 [JSOI2007]字符加密
    洛谷P3809 【模板】后缀排序
    洛谷P2598 [ZJOI2009]狼和羊的故事
    洛谷P1345 [USACO5.4]奶牛的电信Telecowmunication
  • 原文地址:https://www.cnblogs.com/littleb/p/12051028.html
Copyright © 2020-2023  润新知