MySQL-表

发布于:2025-03-05 ⋅ 阅读:(13) ⋅ 点赞:(0)
  • 存储在表中的数据是一种类型的数据,不同类型的数据应放到不同的表中,否则会使以后的检索和访问很困难。
  • 数据库中的每个表都有一个名字,用来标识自己。此名字是唯一的, 这表示数据库中没有其他表具有相同的名字。
  • 表由一个或多个列组成。每一列存储一列特定的信息,列称为字段,每个列都有相应的数据类型。数据类型定义列可以存储的数据种类。例如,某一列中需要存储数字,该列的数据类型应该定义为数值类型。

数据类型

整型:无符号-unsigned

浮点型、定点型

日期时间类型

字符型

 char 和 varchar 的区别:

     char:固定长度

                最大 255 字符

                数据长度不足会再尾部填充空格,查询时会自动去掉空格

                效率高,占空间

varchar:长度可变

                最大可设置 65535 字节

insert into vc(v,c) values('ab  ','ab  ');

select * from vc where v='ab  ';  # 能查到
select * from vc where c='ab  ';  # 能查到

select * from vc where v like 'ab  ';  # 能查到
select * from vc where c like 'ab  ';  # 不能查到

 注:'=' 不是完全对等,'like' 可以表示完全对等

DDL(数据定义语言) 

Data Definition Language, 用于定义和管理数据库中的对象和结构,如表、列、索引等。

创建表

create table [if not exists] 表名(
    字段1 字段类型 [列级约束条件],
    字段2 字段类型 [列级约束条件],
    ...
    [表级约束条件]
)

注:最后一个字段后面不加“,” 

查看表

显示数据库中的表

show tables;

查看表的基本结构

desc 表名;

查看数据库/表的创建语句

show create table 表名:

修改表

  • 添加字段
alter table 表名
add column 新列名 数据类型 [约束条件] first / after 列名;

注:

first:添加到最前面(即第一列)

after 列名:添加到该列之后 

  • 修改字段的类型
alter table 表名
modify column 列名 数据类型 [约束条件];
  • 修改字段的位置
alter table 表名
modify column 列名 数据类型 first / after 列名;
  • 修改字段名
alter table 表名
change column 旧列名 新列名 数据类型;
  • 删除字段
alter table 表名
drop column 列名;

重命名表

alter table 旧表名
rename to 新表名;

删除表

drop table 表名;

练习

DML(数据操作语言)

Data Manipulation Language,用于操作数据库中的实际数据,如插入、更新、删除和查询数据。

插入数据

        插入完整的行,所有字段,每一个字段都必须提供一个值,如果某个字段没有值,应该使用NULL,每个字段必须以他们在表中定义的顺序给出。这种语法简单,但是不安全,应该避免使用。

insert into 表名
values (字段1的值,字段2的值,...);

        更安全的方法是,在表名后的括号中给出字段名,values 中的值的顺序与前面给出的字段的顺序相同,一一对应。不需要与表中定义的顺序相同,没有值的字段可以不提供。

insert into 表名 (字段1,字段2,...)
values (字段1的值,字段2的值,...);
  • values 后面可以跟多个括号,括号间用逗号分隔,每个括号代表要插入的一条数据
  • 单条 insert 语句插入多条数据比多条 insert 语句快

更新数据

update 表名
set 字段1 = 字段1的值,字段2 = 字段2的值,...
where 限制条件;
  •  注:记得加 where 限制条件,否则更新整个表中的每一条数据

删除数据

delete from 表名
where 限制条件;
  • 同样,不加限制条件会删除整个表中每一条数据
  • 物理删除,无法恢复
  • 注:在对 update 或 delete 使用 where 前,应该先用 select 语句进行测试保,证它的过滤结果是正确的

练习

约束

constraint

约束类型 非空约束 默认约束 唯一约束 主键约束 外键约束
关键字 not null default unique primary key foregin key

非空约束

创建表时设置非空约束

create table 表名(
    字段名 字段类型 not null,
    ...
);

已有字段添加非空约束

alter table 表名
modify column 字段名 字段类型 not null;

删除非空约束(修改为允许为空)

alter table 表名
modify column 字段名 字段类型;

注意:不要混淆 NULL 值和空串,NULL值是没有值,空串是“(两个单引号,中间没有字符)

默认约束

create table 表名(
    字段名 字段类型 default 默认值,
    ...
);

唯一约束

列级

create table 表名(
    字段名 字段类型 unique,
    ...
);

表级,可以给约束起名,可以创建多列的唯一约束(联合唯一约束)

create table 表名(
    字段1 字段类型,
    字段2 字段类型,
    ...
    [constraint 约束名] unique(字段1,字段2)
);

已有字段添加唯一约束

alter table 表名
modify 字段名 字段类型 unique;

alter table 表名
add [constraint 约束名] unique(字段名);

删除唯一约束

alter table 表名
drop index 约束名;

alter table 表名
drop key 约束名;

主键约束

        唯一标识表中每行的这个列(或这组列)称为主键。主键用来表示一个特定的行。没有主键,更新或删除表中特定行很困难,因为没有安全的方法保证只涉及相关的行。

因此:

  • 每一个表都应该定义主键
  • 主键的值不应该修改
  • 不使用可能会修改值的列作为主键(与业务无关,通常使用id 作为主键)

特点:

  • 唯一性:主键要求每一行数据的主键值都必须是唯一的,不允许有重复值。
  • 非空性:主键要求主键列的值不能为空,即不能为 NULL
  • 单一性:每个表只能有一个主键。主键可以由一个列或多个列组成,形成复合主键

列级

create table 表名(
    字段名 字段类型 primary key,
    ...
);

表级,可以给约束起名,可以创建多列的联合主键

create table 表名(
    字段1 字段类型,
    字段2 字段类型,
    ...
    [constraint 约束名] primary key(字段1,字段2)
);

删除主键

alter table 表名
drop primary key;

自动递增

        auto_increment:设置 auto_increment 的列,当每增加一行时自动增量。每个表只允许一个 auto_increment 列。

create table 表名(
    字段1 字段类型 auto_increment
);

外键约束

        外键为表中的某一字段,该字段是另一表的主键值,外键用来在两个表的数据之间建立联结,一个表中可以有一个或多个外键。外键的作用是保持数据的一致性、完整性。

注意:

外键字段可以为null,外键为空的数据也叫孤儿数据

有了外键引用之后,表分为父表和子表

  • 创建表时先创建父表,再创建子表
  • 插入数据时,先插入附表数据,再插入子表数据
  • 删除时,先删除子表,再删除父表

子表外键类型要与父表外键类型一致

[constraint 外键名] foreign key (列名) references 主表名 (主键);

练习


网站公告

今日签到

点亮在社区的每一天
去签到