MySQL数据定义语句

本文只介绍基础、常用的 MySQL 语法语句,更详细的语法语句请移步这里

1 CREATE DATABASE 语法

语法

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name

CREATE DATABASE用于创建数据库,并进行命名。

1.1 建立 STUDENT_COURSE 数据库
CREATE DATABASE IF NOT EXISTS STUDENT_COURSE;

img

1.2 切换到 STUDENT_COURSE 数据库
USE STUDENT_COURSE;

img

2 DROP DATABASE 语法

语法

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
2.1 删除 STUDENT_COURSE 数据库
DROP DATABASE IF EXISTS STUDENT_COURSE;

img

  后续还需要使用这个数据库进行学习,利用上面的 CREATE DABATE 语句 重新创建回来,并切回到该数据库下。

3 CREATE TABLE 语法

语法

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(create_definition,...)]
    [table_options] [select_statement]

或:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    [(] LIKE old_tbl_name [)];
3.1 创建 Student
 CREATE TABLE IF NOT EXISTS Student(
    Sno INT NOT NULL,
    Sname CHAR(10) NOT NULL,
    Ssex CHAR(2) NOT NULL,
    Sage INT,
    Sdept VARCHAR(20),
    PRIMARY KEY (Sno)
    );

img

3.2 创建 Course
CREATE TABLE IF NOT EXISTS Course(
    Cno INT NOT NULL,
    Cname VARCHAR(20) NOT NULL,
    Cpno INT NULL,
    Ccredit INT NOT NULL,
    PRIMARY KEY (Cno)
    );

img

3.3 创建 SC
 CREATE TABLE IF NOT EXISTS SC(
    Sno INT NOT NULL,
    Cno INT NOT NULL,
    Grade INT NULL,
    PRIMARY KEY (Sno, Cno),
    FOREIGN KEY (Sno) REFERENCES Student(Sno),
    FOREIGN KEY (Cno) REFERENCES Course(Cno)
    );

img

4 ALTER TABLE 语法

语法

ALTER [IGNORE] TABLE tbl_name
    alter_specification [, alter_specification] ...
4.1 增加一列

语法

ADD [COLUMN] column_definition [FIRST | AFTER col_name ]

Student 表增加 Sphone 字段

 ALTER TABLE Student
    ADD Sphone VARCHAR(12) NULL COMMENT 'add phone column' AFTER Sage;

img
可以利用 DESC table_name 来查看表结构。
img
可以看到已经在字段Sage后面增加了字段Sphone

4.2 改变表中原有列

语法

CHANGE [COLUMN] old_col_name column_definition
        [FIRST|AFTER col_name]

改变 Student 表中 Sphone 字段改为 Semail 字段

ALTER TABLE Student
    CHANGE Sphone Semail VARCHAR(20) NULL;

img
查看一下 Student 表结构
img
Sphone 已经改为 Semail,类型也改为了 VARCHAR(20)

4.3 修改表中原有列的定义

语法

 MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]

修改 Student 表中 Semail 字段的类型

 ALTER TABLE Student
    MODIFY Semail VARCHAR(25) NOT NULL;

img
查看一下表结构
img

注:聪明的读者肯定注意到了 CHANGEMODIFY 都可以改变列定义,它们有什么区别呢?一言以蔽之,修改某一列,列名要改变,用change, 列名不改变用modify

4.4 删除一列

语法

DROP [COLUMN] col_name

删除 Student 中的 Semail 字段

ALTER TABLE Student
    DROP Semail;

img
查看一下表结构
img
表中已经没有 Semail 字段了。

5 RENAME TABLE 语法

语法

RENAME TABLE tbl_name TO new_tbl_name
    [, tbl_name2 TO new_tbl_name2] ...
5.1 重命名 Student
RENAME TABLE Student TO Employee;

img
查看一下数据库中的表,可以使用 SHOW TABLES;
img
Student 表已经重命名为 Employee 表。
最后我们还是改回来哈。

6 DROP TABLE 语法

语法

DROP [TEMPORARY] TABLE [IF EXISTS]
    tbl_name [, tbl_name] ...
    [RESTRICT | CASCADE]
6.1 删除 SC
DROP TABLE IF EXISTS SC;

img

7 CREATE INDEX 语法

语法

REATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [USING index_type]
    ON tbl_name (index_col_name,...)
7.1 为 Student 表中的 Sno 字段建立索引
CREATE INDEX sno_index ON Student (Sno);

img
查看一下索引,可以使用命令 SHOW INDEX FROM Student
img
发现 MySQL 会为主键自动创建索引。

8 DROP INDEX 语法

语法

DROP INDEX index_name ON tbl_name
8.1 删除上面创建的索引
DROP INDEX sno_index ON Student;

img
再查看一下 Student 的索引
img
发现已经删除 sno_index 索引了。

MySQL数据定义语句到这里就告一段了,祝大家学习愉快。

参考

  1. MySQL 5.1中文文档
  2. mysql索引原理
  3. 深入理解 Mysql 索引底层原理
  4. Mysql索引:图文并茂,深入探究索引的原理和使用
posted @ 2022-07-19 15:29  岁月飞扬  阅读(250)  评论(0编辑  收藏  举报