欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

表操作

程序员文章站 2022-07-14 16:23:34
...


表是数据库存储数据的基本单位。一个表包含若干个字段。

创建表

创建表是指在已存在的数据库中创建新表。我们尝试创建一个表。

create table example1 (id int primary key,
    -> name varchar(20),
    -> sex boolean);

表包含3个字段,id字段是整型,name字段是字符串型,sex字段是布尔类型。我们可以看到在创建表设定字段时,要按照这样的顺序:

字段名+数据类型+[完整性约束条件]

完整性约束条件是对字段进行限制,要求用户对该字段进行的操作符合特定要求,如果不满足条件,用户操作就不会被执行,目的是为了保证数据库数据的完整性。

约束条件 说明
primary key 字段为该表的主键,可以唯一地标识对应的元组
foreign key 字段为该表的外键,是与之联系的某表的主键
not null 该字段不能为空
unique 该字段不能重复
auto_increment 自增
default 为字段设置默认值

设置表的主键

主键是表的一个特殊字段,能唯一的标识该表中的每条信息。主键就好像一条信息的身份证号一样,通过主键可以以最快的速度查找到表内的每一条信息。
主键必须满足:唯一,非空。主键可以是单一字段,也可以是多个字段的组合。

设置单字段主键
create table example1 (id int primary key,
    -> name varchar(20),
    -> sex boolean);
设置多字段主键
create table example2 (uid int,
    -> gid int,
    -> primary key(uid,gid));

设置表的外键

外键是表的一个特殊字段,如果字段1是表A的一个属性,且依赖于表B的主键,那么称表B是父表,表A是子表,字段1是表A的外键。
外键的作用是建立该表与其父表的关联关系,父表中更改某条信息时,字表中与之对应的信息也必须有相应改变

创建父表
create table class (
    -> id int primary key,
    -> name varchar(20));
创建子表
create table student (
    -> id int primary key,
    -> name varchar(20),
    -> class varchar(20),
    -> constraint c_fk foreign key (id) references class(id));

子表的外键关联的必须是父表的主键,且数据类型必须一致。

设置表的属性的默认值

我们可以指定表中字段的默认值,当插入数据且没有为这个字段赋值时,这个字段会自动变为默认值。

 create table example3 (id int primary key auto_increment,
    -> name varchar(20),
    -> sex varchar(10) default 'man');

查看表结构

查看表基本结构

desc test;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | varchar(20)      | NO   |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+

使用desc语句查看表,会显示字段,数据类型,是否为空,是否为主键或外键,默认值和额外信息。

查看表详细结构

show create table test;
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                        |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test  | CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

MariaDB [test]> show create table test\G;
*************************** 1. row ***************************
       Table: test
Create Table: CREATE TABLE `test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8

show create table语句可以查看表的详细定义,该语句可以查看表的字段名、字段的数据类型、完整性约束条件等信息,还可以查看表默认的存储引擎和字符编码

修改表

修改表是指修改数据库中已存在的表的定义。修改表不需要重新加载数据,也不会影响正在进行的服务。

修改表名

alter table example rename example0;

修改字段数据类型

alter table example modify name varchar(30);

修改字段名

alter table example change name username varchar(20);

change修改字段名的同时也可以修改数据类型。

增加字段

alter table example add age int not null;

增加的字段默认会在表的最后位置,我们也可以在任意位置增加字段。

在表的第一个位置增加字段:加上first参数
alter table example add pid int first;
在表的指定位置增加字段
alter table example add phone char(11) after username;

删除字段

alter table example drop pid;

修改字段的排列顺序

到任意字段后
alter table example modify age int after phone;
到第一个字段处
alter table example modify age int first;

更该表的存储引擎

alter table example engine=MyISAM;

删除表的外键约束

alter table student drop foreign key c_fk;

删除表

删除没有被关联的普通表

我们可以直接用drop语句删除没有被关联的表。

drop table test;

删除被其他表关联的父表

当有外键依赖于该表时,直接删除会报错,想要删除该表必须先去掉这种依赖关系。我们有两种解决方法:

  • 先删除子表,再删除父表
  • 先删除子表的外键约束,再删除父表
相关标签: mariadb