表操作


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

创建表

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

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;

删除被其他表关联的父表

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

  • 先删除子表,再删除父表
  • 先删除子表的外键约束,再删除父表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值