文章目录
表是数据库存储数据的基本单位。一个表包含若干个字段。
创建表
创建表是指在已存在的数据库中创建新表。我们尝试创建一个表。
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;
删除被其他表关联的父表
当有外键依赖于该表时,直接删除会报错,想要删除该表必须先去掉这种依赖关系。我们有两种解决方法:
- 先删除子表,再删除父表
- 先删除子表的外键约束,再删除父表