• 3-MySQL常用数据类型及表管理


        数据类型
        1.整数类型:只能包含数字的类型,不包含小数点
            TINYINT:占用1字节存储空间(1B) 
            SMALLINT:占用2字节存储空间(2B) 
            MEDIUMINT:占用3字节存储空间(3B) 
            INT:可以动态设置数据占用的存储空间 
            BIGINT:占用8字节存储空间(8B) 
            
        2.浮点类型:带小数点的数
            FLOAT :单精度,4字节
            DOUBLE:双精度类型,8字节
            DECIMAL:定点数类型,可以固定小数点后数据的位数(精度)
        3.字符串类型
            char:固定长度的字符串类型,比如邮政编码char(6),身份证号char(18),长度不能超过8000字节
            VARCHAR:不固定长度的字符串类型,设置最大数据范围,比如varchar(100),长度不能超过8000字节
            BINARY:固定长度的二进制,长度不能超过8000字节
            VARBINARY:不固定长度的字符串类型,长度不能超过8000字节
            BLOB:大文件操作
            text:大文本数据操作
            enum:限定范围(‘男’,‘女’)
            set:简单理解为数组集合
            
        4.日期与时间类型
            year:年
            date:日期(包含年月日)
            time:时间(包含时分秒)
            datetime:日期时间(包含年月日时分秒)
            TIMESTAMP:时间戳,精度比datetime要高
        5.二进制类型
            bit:1位
            BINARY
            VARBINARY
            BLOB
            TINYBLOB
            MEDIUMBLOB 
            LONGBLOB
            

    -- 创建数据表create table 语句
    /*
        创建学生表(学生表)
        学号  整形,不允许为空(not null) ,主键(primary key)
        姓名  字符串,最大长度20字符
        年龄  整形 ,必须大于0
        班级  字符串
        性别 字符串
        

    */
    -- 删除表格
    drop table 学生表;
    /*
        字段名称必须唯一,
        字段名称中间最好不要出现空格,如果字段名称包含空格,必须加上`符号
        字段名称要有一定的意义

    */
    create table 学生表
    (
        学号 int(11) not null primary key,  -- 字段名称为学号,整形,不允许为空(not null),设置为主键(primary key)
        姓名 varchar(20) not null,
        年龄 TINYINT ,   
        班级 varchar(30) ,
        性别 enum('男','女') default '男'
    );
    -- 用select查询表数据
    select * from 学生表;
    -- 新增记录(insert语句)
    -- 字符串类型的值必须用单引号
    insert into 学生表(学号,姓名,年龄,班级,性别) values(1,'张三',20,'高技二班','男');
    select * from 学生表;

    insert into 学生表(学号,姓名,年龄,班级,性别) values(2,'小丽',16,'高技二班','女');

    select * from 学生表;
    insert into 学生表(学号,姓名,年龄,班级,性别) values(3,'王老五',-128,'高技二班','男');

    insert into 学生表(学号,姓名,年龄,班级,性别) values(5,'李四',-1,'高技二班','男');
    -- 允许为空的字段,可以不输入值
    insert into 学生表(学号,姓名,年龄,班级,性别) values(4,'王麻子',18,null,'男');

    -- 允许为空的字段可以不写在列表中,values中也可以不输入值
    insert into 学生表(学号,姓名,年龄,性别) values(4,'王麻子',18,'男');
    -- 没有输入性别的值,默认为男
    insert into 学生表(学号,姓名,年龄) values(6,'王麻子2',18);
    -- -----------------------------------------------------------------------------------

    -- 创建班级表
    /*
            班级ID 整形 自动递增 非空 主键
            班级名称 字符串 非空
            班主任 字符串

    */
    create table 班级表
    (
        班级ID int not null auto_increment PRIMARY key,
        班级名称 varchar(30) not null,
        班主任 varchar(20)
    );

    insert into 班级表(班级名称,班主任) values('高技1班','李红丽');
    insert into 班级表(班级名称) values('高技2班');
    insert into 班级表(班级名称,班主任) values('软编1班','xxx');
    insert into 班级表(班级ID,班级名称,班主任) values(4,'软编2班','xxx');
    insert into 班级表(班级ID,班级名称,班主任) values(5,'软编3班','xxx');
    insert into 班级表(班级名称,班主任) values('软编4班','xxx');
    insert into 班级表(班级ID,班级名称,班主任) values(6,'软编4班','xxx'),(7,'软编5班','xxx'),(8,'软编6班','xxx');

    select * from 班级表;
    -- 如果学生表存在,则删除
    drop table if exists 学生表;

    create table 学生表
    (
        学号 int(11) not null,  -- 字段名称为学号,整形,不允许为空(not null),
        姓名 varchar(20) not null,
        年龄 TINYINT ,   
        班级ID int not null , -- 班级ID必须引用班级表中班级ID字段的值 
        性别 enum('男','女') default '男',
        身份证号 varchar(18) unique, -- unique唯一
        primary key(学号)   -- 设置为主键(primary key)
    );
    insert into 学生表(学号,姓名,年龄,班级ID,性别,身份证号) values(1,'张三',18,10,'男','362135198808081188');
    -- 更新数据
    update 学生表 set 班级ID=2;
    select * from 学生表;
    -- 学生表与班级表建立外键关联(引用完整性)
    alter table 学生表 add constraint fk_student_class foreign key(班级ID) REFERENCES 班级表(班级ID);

    /*
        必须在学生表建立外键关系,不能在班级表建立外键关系
        建立外键关系以后,学生表新增学生记录时,班级ID字段的值,必须在班级表中存在,否则会新增失败
        建立外键关系以后,删除班级表的记录时,如果班级ID在学生表中已经使用,则删除失败。
    */


    insert into 学生表(学号,姓名,年龄,班级ID,性别,身份证号) values(2,'丽丽',16,5,'女','362135198808081181');
    insert into 学生表(学号,姓名,年龄,班级ID,性别,身份证号) values(3,'李小龙',20,1,'男','362135198808081182');

    select * from 班级表;
    select * from 学生表;
    select s.*,b.班级名称,b.班主任 from 学生表 s,班级表 b where s.班级ID=b.班级ID;

    -- 删除高技1班
    delete from 班级表 where 班级ID=1; -- 报错


    delete from 班级表 where 班级ID=6;
    -- 课程表
    /*
        课程ID 整形 自增 主键
        课程名称 字符串
        学分 tinyint
        
        
    */
    create table 课程表
    (
        课程ID int(11) auto_increment primary key, -- 1.创建主键
        课程名称 varchar(30) not null,
        学分 TINYINT DEFAULT 0
    );
    -- 或者
    drop table 课程表;

    create table 课程表
    (
        课程ID int(11) auto_increment ,
        课程名称 varchar(30) not null,
        学分 TINYINT DEFAULT 0,
        primary key(课程ID) -- 2.创建主键
    );
    -- 或者

    create table 课程表
    (
        课程ID int(11),
        课程名称 varchar(30) not null,
        学分 TINYINT
    );
    -- 3.创建主键
    alter table 课程表 add constraint pk_courseId primary key(课程ID);
    -- 创建默认值
    alter table 课程表 change column  学分 学分 tinyint default 0;

    select * from 课程表;

    insert into 课程表(课程名称,学分) values('HTML',2);
    insert into 课程表(课程名称,学分) values('MySQL',4),('java',8);

    -- 成绩表
    /*
        学号 整形 不允许为空
        课程编号 整形
        考试成绩   DECIMAL(18,2);
        
        主键是组合键(学号+课程编号)

    */
    create table 成绩表
    (
        学号 int not null,
        课程编号 int not null,
        考试成绩 decimal(18,2) default 0
    );
    -- 创建主键
    alter table 成绩表 add constraint pk_score PRIMARY KEY(学号,课程编号);
    -- 创建与学生表的外键关联
    alter table 成绩表 add CONSTRAINT fk_studid FOREIGN KEY(学号) REFERENCES 学生表(学号);
    -- 创建与课程表的外键关联
    alter table 成绩表 add CONSTRAINT fk_courseid FOREIGN KEY(课程编号) REFERENCES 课程表(课程ID);
    select * from 成绩表;
    select * from 学生表;
    select * from 课程表;
    insert into 成绩表(学号,课程编号,考试成绩) values(2,2,99);
    /*
        别名:在表名的后面加一个比较简单的名称,代表表名
        多表关联时,字段列表中包含的字段,在多个表中存在同名的情况,则必须在字段名称前面加上别名,否则别名可以省略
    */
    select s.学号,姓名,性别,身份证号,课程名称,学分,考试成绩 from 成绩表 c,学生表 s,课程表 k where c.学号=s.学号 and c.课程编号=k.课程ID;

    -- 不用别名
    select 学生表.学号,姓名,性别,身份证号,课程名称,学分,考试成绩 from 成绩表,学生表,课程表 where 成绩表.学号=学生表.学号 and 成绩表.课程编号=课程表.课程ID;

    本人从事软件项目开发20多年,2005年开始从事Java工程师系列课程的教学工作,录制50多门精品视频课程,包含java基础,jspweb开发,SSH,SSM,SpringBoot,SpringCloud,人工智能,在线支付等众多商业项目,每门课程都包含有项目实战,上课PPT,及完整的源代码下载,有兴趣的朋友可以看看我的在线课堂

    讲师课堂链接:https://edu.csdn.net/lecturer/893

  • 相关阅读:
    18. 线性代数 - 线性变换
    SpringBoot+Vue实现前后端分离的企业人事管理系统
    力扣 857. 雇佣 K 名工人的最低成本
    element-ui合计逻辑踩坑
    数据结构作业:传输数据的增删改
    无代码开发部门入门教程
    接口优化及问题
    计算某个字符出现的次数
    设计模式之创建型模式:建造者模式
    运动蓝牙耳机哪个品牌好、运动蓝牙耳机推荐
  • 原文地址:https://blog.csdn.net/software7503/article/details/127707676