基本SQL语句含基本数据类型

本文详细介绍了MySQL的基本操作,包括创建、显示和删除数据库与表,以及数据的插入、更新和删除。同时,讨论了不同的存储引擎,如MyISAM、InnoDB、Memory和Blackhole的特点。接着,讲解了MySQL中的基本数据类型,如整型、浮点型、字符型和日期类型,以及它们的特性和用途。最后,探讨了创建表时的约束条件,如非空、默认值、唯一和主键,特别是主键的设置及其对数据查询的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

```python
#针对库的,(;必带)
create database 库名;#创建新库
show databases;#展示所有库
show create database 库名;#展示创建的库里面包含的元素
alter database 库名 charset='字符';#可换utf8mb4和gbk
drop database 库名;#删除某个数据库

#针对表的,(;必带)
use 表名;#在指定的库里创建表
show tables;#展示所有表
create table 表名(id int,name varchar(32));#创建某表的表头,包含整数型(灵活)id,名字字节不超过32(灵活)位
desc 表名;#(展示某表的表头)
alter tables 表名 rename 重置的表名字;#重置表名
drop table 表名;#删除表名

#针对记录的
insert into 表名 values(1,'jason');#根据表头传值,id和name等
update 表名 set name='jack' where id =1;#修改表里指定id的用户名
delete from 表名 where id=1;#修改指定表里的id行
```

```python
#存储引擎
# 存储引擎可以看成是处理数据的不同方式

# 查看存储引擎的方式
    show engines;
 
# 需要掌握的四个存储引擎
    MyISAM(存取速度快但是不安全)
        MySQL5.5之前默认的存储引擎
            不支持事务、行级锁和外键 针对数据的操作较于InnoDB不够安全
            但是数据的存取速度较于InnoDB更快
    InnoDB(常用)
        MySQL5.5之后默认的存储引擎
            支持事务、行级锁和外键 针对数据的操作更加的安全
    memory(临时记忆)
        基于内存存取数据
            速度最快但是断电立刻丢失
    blackhole(类似于垃圾处理站)
        写入其中的数据都会立刻消失 类似于垃圾处理站
     
# 存储引擎创建表的不同点
    create table t1(id int) engine=myisam;
    create table t2(id int) engine=innodb;
    create table t3(id int) engine=memory;
    create table t4(id int) engine=blackhole;
    """
    MyISAM会创建三个文件
        .frm      表结构文件
        .MYD    表数据文件
        .MYI    表索引文件(索引是用来加快数据查询的)
    InnoDB会创建两个文件
        .frm     表结构文件
        .ibd     表数据和表索引文件
       memory
           .frm     表结构文件
       blackhole
           .frm     表结构文件
    """
```

```python
#MySQL基本数据类型
# 1.整型
    tinyint     smallint     int     bigint
    不同的int类型能够存储的数字范围是不一样的
        1.要注意是否存负数(正负号需要占一个比特位)
        2.针对手机号码只能用bigint
    '''研究默认是否需要正负号'''
        create table t5(id tinyint);
        insert into t5 values(-999),(999);
    # 结论:所有的int类型默认都需要正负号
        create table t6(id tinyint unsigned);  # 移除正负号
        insert into t6 values(-999),(999);
     
# 2.浮点型
    float        double      decimal
    float(255,30)  # 总共255位 小数位占30位
    double(255,30)  # 总共255位 小数位占30位
    decimal(65,30)  # 总共65位 小数位占30位
    """研究三者的不同"""
    create table t7(id float(255,30));
    create table t8(id double(255,30));
    create table t9(id decimal(65,30));
    insert into t7 values(1.11111111111111111111111);
    insert into t8 values(1.11111111111111111111111);
    insert into t9 values(1.11111111111111111111111);
    #float        double      decimal精确层级越来愈高
    # 结论:三者的精确度不一样
        float < double < decimal
    """
    到底使用哪个
        一般情况下小数点后面只保留两位 所以float足矣
        如果是从事高精密业务 则需要考虑更高的精确度
    ps:有时候很多看似需要用数字存储的数据 可能都是存的字符串
    课外扩展:python本身对数字的精确度很低 之所以能够从事人工智能和数据分析完全得益于功能强大的模块
    """
    
    # 3.字符类型
    char(4)
        定长类型  最多只能存四个字符 多了报错少了自动空格填充至四个
    varchar(4)
        变长类型  最多只能存四个字符 多了报错少了有几个则存几个
    """研究上述特征"""
    create table t10(id int,name char(4));
    create table t11(id int,name varchar(4));
    insert into t10 values(1,'jason');
    insert into t11 values(1,'jason');
    # 针对5.6版本超出范围不会报错 而是自动帮你截取并保存(此行为不合理)
    方式1:修改配置文件(永久)
    方式2:命令修改(暂时)
        show variables like '%mode%'
        set session  # 当前窗口有效
        set global  # 当前服务端有效
            set gloabl sql_mode = 'strict_trans_tables'
        修改完毕后退出客户端重新进入即可
    再次执行上述插入命令 会直接报错
    # 研究定长与变长特性
        insert into t10 values(1,'j');
        insert into t11 values(1,'t');
        # 统计某个字段数据的长度  char_length()
        '''底层确实会填充  但是取出来的时候又会自动去除'''
        set global sql_mode = 'strict_trans_tables,pad_char_to_full_length'
        
  char与varchar的对比
  char;
    优势:整存整取 速度快
    劣势:浪费存储空间
varchar
    优势:节省存储空间
    劣势:存取数据的速度较char慢
"""
char(5)
    jasontony kevintom  oscartank sean jerry
varchar(5)
    1bytes+jason1bytes+tony1bytes+kevin1bytes+tom
    存:先计算数据的长度
    取:先获取报头的数据
"""
# 以前几乎都是char 现在很多情况下使用varchar
    进了公司之后 会通过右键告诉你每个字段的英文名和中文名及类型等项目的诸多信息
    
补充:在创建字段的时候可以加上相应的注释
    create table t12(
        id int comment '序号',
        name char(4) comment '姓名'
    );
整型中括号内数字的作用

create table t13(id int(3));
insert into t13 values(4444444);
"""
在整型中括号内的数字并不是用来限制存储的长度 而是用来控制展示的长度
我们以后在定义整型字段的时候 不需要自己添加数字 使用默认的就可以
"""
create table t14(id int(3) zerofill);
insert into t13 values(4);
# 结论:整型比较的特殊 是唯一个不是用来限制存储长度的类型

枚举与集合类型
枚举
    多选一
enum()
    create table user(
        id int,
        name varchar(32),
        gender enum('male','female','others')
    );
    insert into user values(1,'jason','男');  # 报错
    insert into user values(1,'jason','male');  # 正常
 
集合
    多选多(包含了多选一)
set()
    create table userinfo(
        id int,
        name char(16),
        hobby set('basketball','football','doublecolorball')
    );
    #多选
   insert into userinfo values(1,'jason','baseketball,football')
    
日期类型
date        年月日
datetime    年月日时分秒
time        时分秒
year        年份

create table client(
    id int,
    name varchar(32),
    reg_time date,
    birth datetime,
    study_time time,
    join_time year
);
insert into client values(1,'jason','2000-11-11','2000-1-21 11:11:11','11:11:11',1995);


```

```python
创建表的完整语法
create table 表名(
    字段名1 字段类型(数字) 约束条件,
    字段名2 字段类型(数字) 约束条件,
    字段名3 字段类型(数字) 约束条件
);
"""
1.字段名和字段类型是必须的
2.数字和约束条件是可选的 并且 约束条件可以有多个空格隔开即可
3.最后一个语句的结尾不要加逗号
"""
```

```python
约束条件
"""
约束条件相当于是在字段类型的基础之上添加的额外约束
    eg: id int unsigned
"""
unsigned        让数字没有正负号
zerofill        多余的使用数字0填充
not null        非空
    """
    新增表数据的方式
        方式1:  按照字段顺序一一传值
             insert into t1 values(1,'jason');
        方式2:  自定义传值顺序 甚至不传
            insert into t1(name,id) values('jason',1);
            insert into t1(id) values(1);
    在MySQL中不传数据 会使用关键字NULL填充意思就是空 类似于python的None
    """
    create table t2(
        id int,
        name varchar(32) not null
    );
default            默认值
    """
    所有的字段都可以设置默认值 
        用户不给该字段传值则使用默认的 否则使用传了的
    create table t3(
        id int default 911,
        name varchar(16) default 'jason'
    );
    """
unique            唯一值
    """
    单列唯一
        create table t4(
            id int,
            name varchar(32) unique
        );
    联合唯一
        create table t5(
            id int,
            host varchar(32),
            port int,
            unique(host,port)
        );
    """
primary key        主键
    """
    但从约束层面上来说 相当于是 not null + unique(非空且唯一)
    在此基础之上还可以加快数据的查询
    
    InnoDB存储引擎规定了一张表必须有且只有一个主键
        因为InnoDB是通过主键的方式来构造表的
        如果没有设置主键
            情况1:没有主键和其他约束条件
                InnoDB会采用隐藏的字段作为主键 不能加快数据的查询
            情况2:没有主键但是有非空且唯一的字段
                自动将该字段升级为主键
                create table t6(
                    id int,
                    age int not null unique,
                    pwd int not null unique
                );
    结论:
        以后我们在创建表的时候一定要设置主键
        并且主键字段一般都是表的id字段(uid sid pid cid)
        create table user(
            id int primary key,
            name varchar(32)
        );
    """
auto_increment        自增
    """
    由于主键类似于数据的唯一标识 并且主键一般都是数字类型
    我们在添加数据的时候不可能记住接下来的序号是多少 太麻烦
    create table user1(
            id int primary key auto_increment,
            name varchar(32)
        );
    """
    
    
    自增不会因为删除操作而回退
    delete from无法影响自增
如果想要重置需需要使用truncate关键字
    truncate 表名  # 清空表数据并且重置主键值
```
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值