MySQL基本sql语句,存储引擎,创建表的语法,严格模式

基本sql语句

'''
    ps:大部分程序的业务逻辑其实都是增删改查
    针对库的增删改查(文件夹)
        增:
            create database db1;
            create database db2 charset='gbk';
        查:
            show databases; # 查所有库
            show create database db1; # 查单个库(可以看到库的编码)
        改:
            alter database db2 charset='utf8'; #修改db2库的编码格式
        删:
            drop database db2;
    针对表的增删改查(文件)
        注意:在操作表(文件)的时候,需要指定所在的库(文件夹)
            # 查看当前所在的库的名字(NULL表示不在任何一个库下)
                select database();
            # 切换库
                use db1;
        增:
            create table t1(id int,name char(10)); # 也可以用绝对路径的形式操作不同的库 create table db1.t2(id int,name char(10));
        查:
            show tables; # 查看当前库下面所有的表名
            show create table t1; # 查单个表(可以看到表中每个字段的类型)
            describe t1;  # 支持简写(查单个表的信息比上面的展示信息可直观) desc t1;
        改:
            alter table t1 modify name char(16);
        删:
            drop table t1;
    针对数据的增删改查(一行行数据)
        一定要先有库,有表,最后才能操作数据
        增:
            insert into t1 values(1,'jason'); # 单条数据
            insert into t1 values(1,'jason'),(2,'mike'),(3,'jack'); # 多条数据
        查:
            select * from t1; # 该命令当数据量特别大的时候不建议使用
            select name from t1;
        改:
            update t1 set name='DSB' where id>1;
        删:
            delete from t1 where id>1;
        将表所有的数据清空:
            delete from t1;
'''

存储引擎

'''
    日常生活中文件格式有很多种,并且针对不同的文件格式会有对应不同存储方式和处理机制(txt,pdf,word,mp4...)
    针对不同的数据应该有对应的不同的处理机制来存储
    存储引擎就是不同的处理机制
    MySQL主要存储引擎
        innodb
            是mysql5.5版本及之后默认的存储引擎
            支持事务 行锁 外键 存储数据更加的安全
            创建表会生成两个文件
                表结构文件
                表数据文件
        myisam
            是mysql5.5版本之前默认的存储引擎
            速度要比innodb更快,但是我们更加注重的是数据的安全
            创建表会生成三个文件
                表结构文件
                表数据文件
                表索引文件
        memory
            内存引擎(数据全部存放在内存中),断电数据丢失
            创建表会生成一个文件
                表结构文件
        blackhole
            无论存什么,都立刻消失(黑洞)
            创建表会生成一个文件
                表结构文件
    # 查看所有的存储引擎
        show engines;
    # 不同的存储引擎在存储表的时候有什么异同点
        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;
      # 存数据
          insert into t1 values(1);
          insert into t2 values(1);
          insert into t3 values(1);
          insert into t4 values(1); # 存储与mysql服务端内存里,重新启动mysql服务,数据就没有了
'''

创建表的语法

'''
    # 语法
        create table 表名(
            字段名1 类型(宽度) 约束条件,
            字段名2 类型(宽度) 约束条件,
            字段名3 类型(宽度) 约束条件
        );
    # 注意:
        1 在同一张表中字段名不能重复
        2 宽度和约束条件是可选的(可写可不写),而字段名和字段类型是必须的
            约束条件写的话,支持写多个
            字段名1 类型(宽度) 约束条件1 约束条件2...,
            create table t5(id); 报错,缺少类型
        3 最后一行不能有逗号
            create table t6(
                in int,
                name char,
            ); 报错
    补充:
        # 宽度
            一般情况下指的是对存储数据的限制
            create table t7(name char); 默认宽度是1
            insert into t7 values('mike');
            insert into t7 values(null); 关键字null
                针对不同的版本会出现不同的效果
                    5.6版本默认没有开启严格模式,规定只能存一个字符,你给了多个字符,那么会自动帮你截取
                    5.7版本及以上或者开启了严格模式,那么规定只能存几个就不能超,一旦超过范围立刻报错
    严格模式到底开不开呢?
        mysql5.7之后的版本默认都是开启严格模式的
        使用数据库的准则:
            能尽量少的让数据库干活就尽量少,不要给数据库增加额外的压力
    约束条件之not null(不能插入null)
        create table t8(id int,name char not null);
        insert into t8 values(1,null); 报错
    宽度和约束条件到底是什么关系?
        宽度是用来限制数据的存储
        约束条件是在宽度的基础之上增加的额外的约束
'''

严格模式

'''
    如何查看严格模式?
        show variables like '%mode';
        variable_name:sql_mode;value:no_engine_substitution
            模糊匹配/查询
                关键字:like
                        %:匹配任意多个字符
                        _:匹配任意单个字符
    修改严格模式
        set session 只在当前窗口有效,相当于临时修改,一旦退出就不行了
        set global  全局有效
        
        set global sql_mode='strict_trans_tables'; 设置完后重新进mysql就可以了
    create table t14(name char);
    desc t14;
    insert into t14('jason'); 报错
    insert into t14('j');
    select * from t14;
'''
while True: print('studying...')
原文地址:https://www.cnblogs.com/xuewei95/p/15113217.html