mysql系列(三)创建表和删除表

前言

之前对mysql数据库做了一个简要的讲解,也讲了怎么安装mysql数据库,从这篇开始正式进入对mysql知识的讲解。本专栏所有博客关于mysql的讲解都使用mysql的客户端工具:Navicat for MySQL。

1.创建数据库

表位于数据库之中,因此创建表前应该创建一个数据库用于储存表,或者选择一个已有的数据库。创建数据库使用CREATE DATABASE关键字。如图,创建一个名为school的数据库:

SQL语句写完之后点击运行就可以在数据库中执行,刷新左边的列表就可以看到刚才创建的school数据库。

  • 使用DROP DATABASE可以删除数据库,如下:
DROP DATABASE school;
2.创建表

创建表有两种方式:
1.使用具有交互式创建和管理表的工具,比如Navicat 、sqlyog等;
2.表也可以直接用MySQL语句操纵(使用 CREATE TABLE语句)。

2.1表创建基础

使用CREATE TABLE创建表,必须给出下列信息:

  • 新表的名字,在关键字CREATE TABLE之后给出;
  • 表列的名字和定义,用逗号分隔。

一个最基本的表至少要包含表名和列的细节,比如创建一个学生表:

CREATE TABLE t_student(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, -- id
    student_name VARCHAR(20), -- 姓名
    age INT(30),  -- 年龄
    sex VARCHAR(10), -- 性别
    birthday DATE, -- 生日
    tel VARCHAR(20)-- 电话号码
)ENGINE=InnoDB;

其中,PRIMARY KEY定义主键,也可以和列分开写,如下:

CREATE TABLE t_student(
    id INT NOT NULL AUTO_INCREMENT, -- id
    student_name VARCHAR(20), -- 姓名
    age INT(30),  -- 年龄
    sex VARCHAR(10), -- 性别
    birthday DATE, -- 生日
    tel VARCHAR(20),-- 电话号码
    PRIMARY KEY(id)
)ENGINE=InnoDB;

从上面可以看出:

  • 表名紧跟在CREATE TABLE关键字后面。
  • 实际的表定义(所有列)括在圆括号之中。
  • 各列之间用逗号分隔。
  • 表的主键可以在创建表的时候用PRIMARY KEY关键字指定。整条语句由右圆括号后的分号结束。(ENGINE=InnoDB指定用什么引擎来储存、管理该表,可省略,则使用默认引擎)

注意

  • 在创建新表时,指定的表名必须不存在,否则将出错。如果要防止意外覆盖已有的表,SQL要求首先手工删除该表,然后再重建它。
  • 如果想在一个表不存在时创建它,应该在表名后给出 IF NOT EXISTS.它只是查看表名是否存在,并且仅在表名不存在时创建它。如下:
CREATE TABLE IF NOT EXISTS t_student(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, -- id
    student_name VARCHAR(20), -- 姓名
    age INT(30),  -- 年龄
    sex VARCHAR(10), -- 性别
    birthday DATE, -- 生日
    tel VARCHAR(20)-- 电话号码
)ENGINE=InnoDB;

因为之前创建过t_student表,因此可以看到在数据库中并没有重新创建表,也没有报错。

2.2使用NULL值

允许NULL值的列也允许插入行时不给出该列的值,不允许NULL值的列不接受该列没有值的行。

每个表列或者是NULL列,或者是NOT NULL列,这种状态在创建时由表的定义给出。比如,刚才创建的学生表可以这样创建(id、姓名、年龄、性别不允许NULL,生日、电话允许NULL值):

CREATE TABLE IF NOT EXISTS t_student(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, -- id
    student_name VARCHAR(20) NOT NULL, -- 姓名
    age INT(30) NOT NULL,  -- 年龄
    sex VARCHAR(10) NOT NULL, -- 性别
    birthday DATE NULL, -- 生日
    tel VARCHAR(20) NULL-- 电话号码
)ENGINE=InnoDB;
  • 理解NULL 不要把NULL与空串相混淆。NULL是没有值,它不是空串。如果指定’ ‘(空串),这在NOT NULL列中是允许的。空串是一个有效的值,它不是无值。
2.3 主键

主键值必须唯一。表中的每个行必须具有唯一的主键。如果主键使用单个列,则它的值必须唯一。如果使用多个列,则这些列的组合值必须唯一。

主键用 PRIMARY KEY(id) 来定义。如果使用多个列值作为主键,则多个列名之间用逗号分隔 ,比如:PRIMARY KEY(id1,id2,id3)

主键可以在创建表时定义,也可以在创建表之后定义

2.4 使用AUTO_INCREMENT

AUTO_INCREMENT告诉MySQL,本列每当增加一行时自动增量。也就是说每次执行一个INSERT操作时,MySQL自动对该列增量,给该列赋予下一个可用的值。这样给每个行分配一个唯一的id,从而可以用作主键值。

每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(如,通过使它成为主键)。

覆盖AUTO_INCREMENT:如果一个列被指定为AUTO_INCREMENT,你也可以在INSERT简单指定一个值,只要这个值是唯一的即可,该值将被用来替代自动生成的值。后续的增量将开始使用该手工插入的值。

2.5指定默认值

如果在插入行时没有给出值,MySQL允许指定此时使用的默认值。默认值用CREATE TABLE语句的列定义中的DEFAULT关键字指定。比如创建班级表时,年级默认为一年级,则可以这样创建表:

CREATE TABLE IF NOT EXISTS t_class(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, -- 班级id
    class_name VARCHAR(20) NOT NULL, -- 班级名
    grade VARCHAR(10) NOT NULL DEFAULT '一年级'  -- 所属年级
)ENGINE=InnoDB;
  • 默认值不允许使用函数,必须是常量
  • 使用默认值而不是NULL值
2.6 引擎类型

与其他DBMS一样,MySQL有一个具体管理和处理数据的内部引擎。创建表、插入数据、查询数据等都是由引擎来处理

MySQL与其他DBMS不一样,它具有多种引擎,每种引擎具有各自不同的功能和特性,为不同的任务选择正确的引擎能够获得良好的功能和灵活性。

以下是几个比较常用的引擎:
- InnoDB是一个可靠的事物处理引擎,它不支持全文本搜索;
- MEMORY在功能等同于MyISAM,但由于数据储存在内存中,速度很快(特别适合于临时表);
- MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。

注意:
引擎类型可以混用
外键不能跨引擎

3.更新表

使用 ALTER TABLE 语句可以更新表。
为了使用ALTER TABLE更改表结构,必须给出以下信息:

  • ALTER TABLE之后给出要更改的表名(该表必须存在,否则将出错);
  • 需要做更改的列名

例如,给学生表增加一列(班级id):

ALTER TABLE t_student
ADD class_id INT;

执行该SQL语句后,可以看到t_student表增加了一列:

修改刚添加的列(使用关键字MODIFY):

ALTER TABLE t_student
MODIFY COLUMN class_id varchar(200);

执行该SQL语句后,可以看到class_id列的数据类型已经改变了:

删除刚添加的列(使用关键字DROP):

ALTER TABLE t_student
DROP COLUMN class_id ;

执行上面的SQL语句,然后重新打开t_student表,可以发现,class_id列已经没有了:

  • ALTER TABLE的一种常见的用途是定义外键(什么是外键以后再讲,这里先讲怎么定义),语法如下:
    ALTER TABLE 子表的数据表名 ADD FOREIGN KEY(子表的外键名称) REFERENCES 父表的数据表名称(父表的主键名称);
    例如,我们把班级表作为主表,学生表作为从表,给学生表添加外键约束:
ALTER TABLE t_student
ADD FOREIGN KEY(class_id) REFERENCES t_class(id);

注意:由于刚才我们把t_student表的class_id列给删除了,直接执行以上SQL语句肯定会报错,需要先给t_student表添加class_id列。

4.重命名表

重命名表使用关键字RENAME TABLE,例如重命名t_student表为t_student_rename:

RENAME TABLE t_student TO t_student_rename;

也可以重命名多个表,如下:

RENAME TABLE 
t_student_rename TO t_student_rename_1,
t_class TO t_class_rename;
5.删除表

删除表使用DROP TABLE即可。比如,删除学生表:

DROP TABLE t_student_rename_1;
6.小结

本文主要讲了添加、删除数据库,创建、修改、更新表以及给表添加外键约束,对数据库操作有了一个基本认识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值