6、数据库中的表

文章介绍了MySQL中的数据类型,如varchar、char、int、date和datetime等,以及如何使用str_to_date和date_format进行日期转换。此外,讨论了创建和删除表的方法,包括truncate与delete的区别,并详细讲解了表的约束,如非空、唯一、主键和外键约束。最后,提到了DML操作,如插入、删除和更新数据。

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

一、表

mysql短日期默认格式:%Y-%m-%d

mysql长日期默认格式:%Y-%m-%d %h:%i:%s

若题目给你的数据不是这个格式,那你就要先转格式再使用DML语句了

1.1、MySQL中的数据类型

  • varchar(最长255)
    • 可变长度的字符串
    • 会根据实际的数据长度动态分配空间。
    • 优点:节省空间
    • 缺点:需要动态分配空间,速度慢。
  • char(最长255)
    • 定长字符串
    • 不管实际的数据长度是多少,分配固定长度的空间去存储数据。
    • 优点:不需要动态分配空间,速度快。
    • 缺点:使用不当可能会导致空间的浪费。
    • varchar和char我们应该怎么选择?
      • 性别字段你选什么?因为性别是固定长度的字符串,所以选择char。
      • 姓名字段你选什么?每一个人的名字长度不同,所以选择varchar。
  • int(最长11)
    • 数字中的整数型。
  • bigint
    • 数字中的长整型。
  • float
    • 单精度浮点型数据
  • double
    • 双精度浮点型数据
  • date
    • 短日期类型
  • datetime
    • 长日期类型
  • date与datetime区别
    • date是短日期:只包括年月日信息。
    • datetime是长日期:包括年月日时分秒信息。
  • clob
    • 字符大对象
    • 最多可以存储4G的字符串。
    • 比如:存储一篇文章,存储一个说明。
    • 超过255个字符的都要采用CLOB字符大对象来存储。
    • Character Large Object:CLOB
  • blob
    • 二进制大对象
    • Binary Large OBject
    • 专门用来存储图片、声音、视频等流媒体数据。
    • 往BLOB类型的字段上插入数据的时候,例如插入一个图片、视频等,
    • 你需要使用IO流才行。

1.2、数据类型之间的转换

  • str_to_date:将字符串varchar类型转换成date类型
    insert into t_user values(1, 'zhangsan', str_to_date('01-10-1990','%d-%m-%Y'));
  • date_format:将date类型转换成一定格式的varchar字符串类型
    select id,name,date_format(birth, '%m/%d/%Y') as birth from t_user;

1.3、创建表

  • 新建一个学生表:
    create table t_student(
    no int,
    name varchar(32),
    sex char(1),
    age int(3),
    email varchar(255)
    );
  • 复制粘贴已有表:
    create table emp2 as select * from emp;

1.4、删除表

  • 1、删除整个表(表消失)
    drop table 表名;(DDL)
  • 2、删除表的整个数据(表还在)
    delete from 表名;(DML)

//删除暂时不需要的小表,数据可恢复
表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放!!!

缺点:删除效率很低,大表不建议用

优点:支持回滚,后悔了可以再恢复数据!!!

truncate table 表名; (DDL)

优点:快速,适合明确不要的大表删除操作

缺点:不支持回滚(rollback)

//删除明确不要的大表,数据不能恢复
这种删除效率比较高,表被一次截断,物理删除。

1.5、对表进行约束

约束对应的英语单词:constraint

在创建表的时候,我们可以给表中的字段加上一些约束,来保证这个表中数据的完整性、有效性!!!

约束的作用就是为了保证:表中的数据有效!!

  • 约束包括哪些

1、非空约束:not null

create table t_vip(
id int,
name varchar(255) not null
// not null只有列级约束,没有表级约束!
);

2、唯一性约束: unique


唯一性约束unique约束的字段不能重复,但是可以为NULL;
需要给多个字段联合起来添加某一个约束的时候,需要使用表级约束
在mysql当中,如果一个字段同时被not null和unique约束的话,该字段自动变成主键字段!!

1| create table t_vip(
id int,
name varchar(255) unique,
// 约束直接添加到列后面的,叫做列级约束
email varchar(255)
);
----------------------------------------
2| create table t_vip(
id int,
name varchar(255),
email varchar(255),
unique(name,email)
// 约束没有添加在列的后面,叫做表级约束
);

3、主键约束: primary key (简称PK)

主键值是每一行记录的唯一标识。

主键值是每一行记录的身份证号!!!

记住:任何一张表都应该有主键,没有主键,表无效!!

主键的特征:not null + unique(不为空值且不重复!!)

1| create table t_vip(
id int primary key,
//列级约束
name varchar(255)
);
----------------------
2| create table t_vip(
id int,
name varchar(255),
primary key(id)
// 表级约束
);

表级约束主要是给多个字段联合起来添加约束

id和name联合起来做主键:复合主键!!!!

在实际开发中不建议使用:复合主键。建议使用单一主键!

因为主键值存在的意义就是这行记录的身份证号,只要意义达到即可,单一主键可以做到。

复合主键比较复杂,不建议使用!!!

列级约束的主键只能是一个!!!

复合主键只能出现在表级约束中!!!

create table t_vip(
id int,
name varchar(255),
email varchar(255),
primary key(id,name)
);

自增主键

create table t_vip(
id int primary key auto_increment,
//auto_increment表示自增,从1开始,以1递增!
//即插入数据时不需要写主键字段值,它会从1自增至末尾
name varchar(255)
);

4、外键约束:foreign key(简称FK)

一张表引用另一张表时使用外键FK!!
为啥给cno字段添加外键约束??
答:当cno字段没有任何约束的时候,可能会导致数据无效。可能出现一个102,但是102班级不存在。
所以为了保证cno字段中的值都是100和101,需要给cno字段添加外键约束。
那么:cno字段就是外键字段。cno字段中的每一个值都是外键值。

  • t_class是父表,t_student是子表
    • 删除表的顺序?
      • 先删子,再删父。
    • 创建表的顺序?
      • 先创建父,再创建子。
    • 删除数据的顺序?
      • 先删子,再删父。
    • 插入数据的顺序?
      • 先插入父,再插入子。
    • 注意:
      • 外键引用的不一定是主键,但至少具有unique约束
      • 外键值可以为null

5、检查约束:check(mysql不支持,oracle支持)

不做要求

1.6、增、删、改

  • 1、对数据(DML)
    • 插入数据insert 增
      1| insert into 表名(字段名1,字段名2,字段名3...) values(值1,值2,值3);
      2| insert into 表名 values(值1,值2,值3);
      • 默认添加数据的顺序以表创建时字段的顺序加入
        //即数量要对应。数据类型要对应
      • 一次可以插入多条记录:
        语法:insert into t_user(字段名1,字段名2) values(),(),(),();
        insert into t_user(id,name,birth,create_time) values
        (1,'zs','1980-10-11',now()),
        (2,'lisi','1981-10-11',now()),
        (3,'wangwu','1982-10-11',now());
    • 删除数据delete 删
      delete from 表名 where 条件;
      • 没有条件,整张表的数据会全部删除!!
    • 修改数据update 改
      update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3... where 条件;
      • 注意:没有条件限制会导致所有数据全部更新!!
  • 2、对表结构(DDL)
    • 增加字段 增
      alter table t_student add contact_tel varchar(40)
    • 删除字段 删
      alter table t_student drop contact_tel;
    • 修改字段 改
      alter table t_student modify student_name varchar(100) ;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值