MySQL:创建、修改和删除表

 

其实对很多人来说对于SQL语句已经忘了很多,或者说是不懂很多,因为有数据库图形操作软件,方便了大家,但是我们不能忘记最根本的东西,特别是一些细节上的东西,可能你用惯了Hibernate,不用写SQL语句,但是不是任何项目都要用到大框架的,如果不用,那你是不是就不会操作数据库了呢,所以我们最好还是熟悉一点好,对我们以后找工作和工作都有帮助。

  在说创建、修改和删除表前,我们还是要进行一个操作的简单说明:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

  1.登陆数据库系统

  在命令行中登陆MySQL数据库管理系统,输入一下内容:

mysql -h localhost -u root -p

  很多人都知道这个,但是其中参数的具体表示什么我们还是要了解的,其中,“-h”参数指连接的主机名,所以后面是localhost;“-u”参数表示用户名,此处的用户名为root;“-p”参数表示用户的密码,按下Enter键后就显示“Enter password:”,输入密码即可登录进去了。

  2.创建数据库

  在创建数据库之前,我们可以查看已经存在的数据库:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第1张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第2张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第3张
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| community          |
| community_test     |
| data               |
| mydata             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
8 rows in set (0.04 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第4张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第5张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第6张

  创建数据库的格式:CREATE DATABASE 数据库名;

示例:创建一个名为example的数据库

mysql增删改查,MySQL:创建、修改和删除表 随笔 第7张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第8张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第9张
mysql>  CREATE DATABASE example;
Query OK, 1 row affected (0.00 sec)

mysql>  SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| community          |
| community_test     |
| data               |
| example            |
| mydata             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
9 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第10张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第11张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第12张

  3.删除数据库:

  格式:DROP DATABASE 数据库名;

示例:删除example数据库

mysql增删改查,MySQL:创建、修改和删除表 随笔 第13张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第14张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第15张
mysql>  DROP DATABASE example;
Query OK, 0 rows affected (0.07 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| community          |
| community_test     |
| data               |
| mydata             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
8 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第16张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第17张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第18张

  4.数据库存储引擎

  存储引擎就是指表的类型,数据库存储引擎决定了表在计算机的存储方式。

  MySQL中查询存储引擎的类型命令:SHOW ENGINES;

mysql增删改查,MySQL:创建、修改和删除表 随笔 第19张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第20张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第21张
mysql> SHOW ENGINES;
+--------------------+---------+------------------------------------------------
----------------+--------------+------+------------+
| Engine             | Support | Comment
                | Transactions | XA   | Savepoints |
+--------------------+---------+------------------------------------------------
----------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine
                | NULL         | NULL | NULL       |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables
                | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine
                | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to
 it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine
                | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for tempor
ary tables      | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine
                | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and f
oreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema
                | NO           | NO   | NO         |
+--------------------+---------+------------------------------------------------
----------------+--------------+------+------------+
9 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第22张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第23张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第24张

  查询结果中,Engine参数指存储引擎名称;Support参数说明MySQL是否支持该类型引擎;Comment参数表示对该引擎的评论;Transaction参数表示是否支持事务处理;XA参数表示是否分布式交易处理的XA规范;Savepoints参数表示是否支持保存点,以方便事务的回滚操作;由上面我们看到InnoDB存储引擎是default的,也就是数据库默认的存储引擎,下面我们简单介绍一下InnoDB。

  InnoDB是MySQL的一种存储引擎,InnoDB给MySQL提供了事务、回滚、崩溃修复能力和多版本并发控制的事务安全。InnoDB是MySQL上第一个提供外键约束的表引擎,而且对事务处理的能力,也是其他存储引擎不能比拟的。不过这种引擎的缺点就是读写效率稍差,占用的数据空间相对比较大。

  下面就是正式的内容:

  创建表:

  1)创建表的形式:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第25张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第26张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第27张
CREATE TABLE 表名 (
    属性名 数据类型 [完整约束条件],
    属性名 数据类型 [完整约束条件],
    ...
    ...
    属性名 数据类型 [完整约束条件]
);
mysql增删改查,MySQL:创建、修改和删除表 随笔 第28张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第29张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第30张

  如果你很急的登陆进去就创建表,恭喜你,你会出现“No database selected”的错误,因为你没有告诉别人你要选择在哪个数据库创建表,所以在创建之前要选择数据库,格式:USE 数据库名;

示例创建一个student表:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第31张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第32张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第33张
mysql> use example;
Database changed
mysql> CREATE TABLE student (
    -> id int,
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.09 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第34张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第35张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第36张

上面创建表的时候涉及到一个完整性约束条件,下面就列出一个完整性约束条件表:

约束条件

说明

PRIMARY KEY

 标识该属性为该表的主键,可以唯一的标识对应的元组

FOREIGN KEY

 标识该属性为该表的外键,是与之联系某表的主键
 NOT NULL

 标识该属性不能为空

UNIQUE

 标识该属性的值是唯一的
AUTO_INCREMENT

 标识该属性的值是自动增加,这是MySQL的SQL语句的特色

 DEFAULT

为该属性设置默认值

  下面讲解一下上面完整性约束条件的应用:

 

  2)设置表的主键

  单字段主键格式:属性名 数据类型 PRIMARY KEY

示例:

mysql>  CREATE TABLE student1 (
    -> id int PRIMARY KEY,
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.06 sec)

  多字段主键格式:PRIMARY KEY(属性名1,属性名2....属性名n)

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第37张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第38张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第39张
mysql> CREATE TABLE student2 (
    -> id int,
    -> stu_id int,
    -> name varchar(20),
    -> PRIMARY KEY(id,stu_id)
    -> );
Query OK, 0 rows affected (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第40张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第41张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第42张

 

  3)设置表的外键

  格式:CONSTRAINT 外键别名 FOREIGN KEY(属性1,属性2,....属性n) REFERENCES 表名(属性1',属性2',...属性n')

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第43张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第44张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第45张
mysql> CREATE TABLE teacher (
    -> id int PRIMARY KEY,
    -> stu_id int,
    -> name varchar(20),
    -> CONSTRAINT STUID FOREIGN KEY(stu_id) REFERENCES student1(id)
    -> );
Query OK, 0 rows affected (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第46张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第47张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第48张

 

  4)设置表的非空约束

  简单的说就是不让这个属性的值为空,不填的话就会报错

  格式:属性名 数据类型 NOT NULL

 

  5)设置表的唯一性约束

  就是这个属性的值是不能重复的

  格式:属性名 数据类型 UNIQUE

 

  6)设置表的属性值自动增加

  AUTO_INCREMENT约束的字段可以是任何整数类型(TINYINT、SMALLINT、INT和BIGINT),在默认的情况下,该字段的值是从1开始自增

  格式:属性名 数据类型 AUTO_INCREMENT

 

  7)设置表的属性的默认值

  格式:属性名 数据类型 DEFAULT 默认值

  

下面对4-7进行综合示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第49张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第50张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第51张
mysql> CREATE TABLE student3 (
    -> id int PRIMARY KEY AUTO_INCREMENT,
    -> teacher_id int UNIQUE,
    -> name varchar(20) NOT NULL,
    -> sex varchar(10) DEFAULT 'male'
    -> );
Query OK, 0 rows affected (0.01 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第52张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第53张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第54张

 

  查看表结构

  查看表基本结构语句DESCRIBE

  格式:DESCRIBE 表名;

  通过查看表的结构,就很明确的对表进行解读,而且可以查看一下自己创建的表有没错误,这个SQL语句必须会用啊

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第55张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第56张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第57张
mysql> desc student3;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(11)     | NO   | PRI | NULL    | auto_increment |
| teacher_id | int(11)     | YES  | UNI | NULL    |                |
| name       | varchar(20) | NO   |     | NULL    |                |
| sex        | varchar(10) | YES  |     | male    |                |
+------------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第58张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第59张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第60张

  查看表详细结构语句SHOW CREATE TABLE

  通过这个SQL语句可以查看表的详细定义,除了字段名、字段的数据类型、约束条件外,还可以查看表的默认存储引擎和字符编码

  格式:SHOW CREATE TABLE 表名;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第61张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第62张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第63张
mysql> SHOW CREATE TABLE student3;
+----------+-----------------------------------
-----------------------------------------------
-----------------------------------------------
---------------------------------------------+
| Table    | Create Table


                                             |
+----------+-----------------------------------
-----------------------------------------------
-----------------------------------------------
---------------------------------------------+
| student3 | CREATE TABLE `student3` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `teacher_id` int(11) DEFAULT NULL,
  `name` varchar(20) NOT NULL,
  `sex` varchar(10) DEFAULT 'male',
  PRIMARY KEY (`id`),
  UNIQUE KEY `teacher_id` (`teacher_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+----------+-----------------------------------
-----------------------------------------------
-----------------------------------------------
---------------------------------------------+
1 row in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第64张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第65张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第66张

  

  修改表:

  1)修改表名

  表名可以在一个数据库中唯一的确定一张表。

  格式:ALTER TABLE 旧表名 RENAME 新表名;

示例:

mysql> ALTER TABLE student RENAME student4;
Query OK, 0 rows affected (0.11 sec)

mysql> DESCRIBE student;
ERROR 1146 (42S02): Table 'example.student' doesn't exist

由上面可以看出,改名后的表已经不存在了。

 

  2)修改字段的数据类型

  格式:ALTER TABLE 表名 MODIFY 属性名 数据类型;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第67张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第68张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第69张
mysql> DESCRIBE student1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.08 sec)

mysql> ALTER TABLE student1 MODIFY name varchar(30);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第70张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第71张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第72张

 

  3)修改字段名:

  格式:ALTER TABLE 表名 CHANGE 旧属性名 新属性名 新数据类型;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第73张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第74张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第75张
mysql> DESCRIBE student1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> ALTER TABLE student1 CHANGE name stu_name varchar(40);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| stu_name | varchar(40) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第76张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第77张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第78张

这里我修改的字段名的同时也修改了数据类型了,如果你不想修改数据类型的话就按照原来的写就行了。

 

  4)增加字段

  格式:ALTER TABLE 表名 ADD 属性名1 数据类型 [完整性约束条件] [FIRST | AFTER 属性名2];

  其中,“属性名1”参数指需要增加的字段的名称;“FIRST”参数是可选参数,其作用是将新增字段设置为表的第一个字段;“AFTER”参数也是可选的参数,其作用是将新增字段添加到“属性名2”后面;“属性名2”当然就是指表中已经有的字段

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第79张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第80张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第81张
mysql> DESCRIBE student1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| stu_name | varchar(40) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> ALTER TABLE student1 ADD teacher_name varchar(20) NOT NULL AFTER id;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| id           | int(11)     | NO   | PRI | NULL    |       |
| teacher_name | varchar(20) | NO   |     | NULL    |       |
| stu_name     | varchar(40) | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第82张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第83张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第84张

 

  5)删除字段

  格式:ALTER TABLE 表名 DROP 属性名;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第85张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第86张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第87张
mysql> DESCRIBE student1;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| id           | int(11)     | NO   | PRI | NULL    |       |
| teacher_name | varchar(20) | NO   |     | NULL    |       |
| stu_name     | varchar(40) | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> ALTER TABLE student1 DROP teacher_name;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| stu_name | varchar(40) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第88张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第89张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第90张

 

  6)更改表的存储引擎

  格式:ALTER TABLE 表名 ENGINE = 存储引擎名;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第91张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第92张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第93张
mysql> SHOW CREATE TABLE student2;
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| Table    | Create Table


+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| student2 | CREATE TABLE `student2` (
  `id` int(11) NOT NULL DEFAULT '0',
  `stu_id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`,`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
1 row in set (0.05 sec)

mysql> ALTER TABLE student2 ENGINE = MYISAM;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE student2;
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| Table    | Create Table


+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| student2 | CREATE TABLE `student2` (
  `id` int(11) NOT NULL DEFAULT '0',
  `stu_id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`,`stu_id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312 |
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
1 row in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第94张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第95张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第96张

 

  7)删除表的外键约束

  格式:ALTER TABLE 表名 DROP FOREIGN KEY 外键别名;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第97张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第98张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第99张
mysql> SHOW CREATE TABLE teacher;
+---------+------------------------------------------------
-----------------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------+
| Table   | Create Table


                                                  |
+---------+------------------------------------------------
-----------------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------+
| teacher | CREATE TABLE `teacher` (
  `id` int(11) NOT NULL,
  `stu_id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `STUID` (`stu_id`),
  CONSTRAINT `STUID` FOREIGN KEY (`stu_id`) REFERENCES `stu
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+---------+------------------------------------------------
-----------------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------+
1 row in set (0.08 sec)

mysql> ALTER TABLE teacher DROP FOREIGN KEY STUID;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE teacher;
+---------+------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------------+
| Table   | Create Table

                                                        |
+---------+------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------------+
| teacher | CREATE TABLE `teacher` (
  `id` int(11) NOT NULL,
  `stu_id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `STUID` (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+---------+------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------------+
1 row in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第100张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第101张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第102张

 

  删除表:

  格式:DROP TABLE 表名;

  删除没有被关联的普通表:直接上面的SQL语句就行了

  删除被其他表关联的父表:

  方法一:先删除子表,在删除父表

  方法二:删除父表的外键约束(上面有介绍),再删该表

,

其实对很多人来说对于SQL语句已经忘了很多,或者说是不懂很多,因为有数据库图形操作软件,方便了大家,但是我们不能忘记最根本的东西,特别是一些细节上的东西,可能你用惯了Hibernate,不用写SQL语句,但是不是任何项目都要用到大框架的,如果不用,那你是不是就不会操作数据库了呢,所以我们最好还是熟悉一点好,对我们以后找工作和工作都有帮助。

  在说创建、修改和删除表前,我们还是要进行一个操作的简单说明:

  1.登陆数据库系统

  在命令行中登陆MySQL数据库管理系统,输入一下内容:

mysql -h localhost -u root -p

  很多人都知道这个,但是其中参数的具体表示什么我们还是要了解的,其中,“-h”参数指连接的主机名,所以后面是localhost;“-u”参数表示用户名,此处的用户名为root;“-p”参数表示用户的密码,按下Enter键后就显示“Enter password:”,输入密码即可登录进去了。

  2.创建数据库

  在创建数据库之前,我们可以查看已经存在的数据库:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第103张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第104张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第105张
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| community          |
| community_test     |
| data               |
| mydata             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
8 rows in set (0.04 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第106张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第107张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第108张

  创建数据库的格式:CREATE DATABASE 数据库名;

示例:创建一个名为example的数据库

mysql增删改查,MySQL:创建、修改和删除表 随笔 第109张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第110张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第111张
mysql>  CREATE DATABASE example;
Query OK, 1 row affected (0.00 sec)

mysql>  SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| community          |
| community_test     |
| data               |
| example            |
| mydata             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
9 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第112张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第113张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第114张

  3.删除数据库:

  格式:DROP DATABASE 数据库名;

示例:删除example数据库

mysql增删改查,MySQL:创建、修改和删除表 随笔 第115张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第116张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第117张
mysql>  DROP DATABASE example;
Query OK, 0 rows affected (0.07 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| community          |
| community_test     |
| data               |
| mydata             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
8 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第118张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第119张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第120张

  4.数据库存储引擎

  存储引擎就是指表的类型,数据库存储引擎决定了表在计算机的存储方式。

  MySQL中查询存储引擎的类型命令:SHOW ENGINES;

mysql增删改查,MySQL:创建、修改和删除表 随笔 第121张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第122张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第123张
mysql> SHOW ENGINES;
+--------------------+---------+------------------------------------------------
----------------+--------------+------+------------+
| Engine             | Support | Comment
                | Transactions | XA   | Savepoints |
+--------------------+---------+------------------------------------------------
----------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine
                | NULL         | NULL | NULL       |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables
                | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine
                | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to
 it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine
                | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for tempor
ary tables      | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine
                | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and f
oreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema
                | NO           | NO   | NO         |
+--------------------+---------+------------------------------------------------
----------------+--------------+------+------------+
9 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第124张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第125张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第126张

  查询结果中,Engine参数指存储引擎名称;Support参数说明MySQL是否支持该类型引擎;Comment参数表示对该引擎的评论;Transaction参数表示是否支持事务处理;XA参数表示是否分布式交易处理的XA规范;Savepoints参数表示是否支持保存点,以方便事务的回滚操作;由上面我们看到InnoDB存储引擎是default的,也就是数据库默认的存储引擎,下面我们简单介绍一下InnoDB。

  InnoDB是MySQL的一种存储引擎,InnoDB给MySQL提供了事务、回滚、崩溃修复能力和多版本并发控制的事务安全。InnoDB是MySQL上第一个提供外键约束的表引擎,而且对事务处理的能力,也是其他存储引擎不能比拟的。不过这种引擎的缺点就是读写效率稍差,占用的数据空间相对比较大。

  下面就是正式的内容:

  创建表:

  1)创建表的形式:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第127张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第128张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第129张
CREATE TABLE 表名 (
    属性名 数据类型 [完整约束条件],
    属性名 数据类型 [完整约束条件],
    ...
    ...
    属性名 数据类型 [完整约束条件]
);
mysql增删改查,MySQL:创建、修改和删除表 随笔 第130张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第131张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第132张

  如果你很急的登陆进去就创建表,恭喜你,你会出现“No database selected”的错误,因为你没有告诉别人你要选择在哪个数据库创建表,所以在创建之前要选择数据库,格式:USE 数据库名;

示例创建一个student表:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第133张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第134张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第135张
mysql> use example;
Database changed
mysql> CREATE TABLE student (
    -> id int,
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.09 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第136张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第137张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第138张

上面创建表的时候涉及到一个完整性约束条件,下面就列出一个完整性约束条件表:

约束条件

说明

PRIMARY KEY

 标识该属性为该表的主键,可以唯一的标识对应的元组

FOREIGN KEY

 标识该属性为该表的外键,是与之联系某表的主键
 NOT NULL

 标识该属性不能为空

UNIQUE

 标识该属性的值是唯一的
AUTO_INCREMENT

 标识该属性的值是自动增加,这是MySQL的SQL语句的特色

 DEFAULT

为该属性设置默认值

  下面讲解一下上面完整性约束条件的应用:

 

  2)设置表的主键

  单字段主键格式:属性名 数据类型 PRIMARY KEY

示例:

mysql>  CREATE TABLE student1 (
    -> id int PRIMARY KEY,
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.06 sec)

  多字段主键格式:PRIMARY KEY(属性名1,属性名2....属性名n)

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第139张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第140张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第141张
mysql> CREATE TABLE student2 (
    -> id int,
    -> stu_id int,
    -> name varchar(20),
    -> PRIMARY KEY(id,stu_id)
    -> );
Query OK, 0 rows affected (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第142张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第143张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第144张

 

  3)设置表的外键

  格式:CONSTRAINT 外键别名 FOREIGN KEY(属性1,属性2,....属性n) REFERENCES 表名(属性1',属性2',...属性n')

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第145张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第146张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第147张
mysql> CREATE TABLE teacher (
    -> id int PRIMARY KEY,
    -> stu_id int,
    -> name varchar(20),
    -> CONSTRAINT STUID FOREIGN KEY(stu_id) REFERENCES student1(id)
    -> );
Query OK, 0 rows affected (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第148张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第149张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第150张

 

  4)设置表的非空约束

  简单的说就是不让这个属性的值为空,不填的话就会报错

  格式:属性名 数据类型 NOT NULL

 

  5)设置表的唯一性约束

  就是这个属性的值是不能重复的

  格式:属性名 数据类型 UNIQUE

 

  6)设置表的属性值自动增加

  AUTO_INCREMENT约束的字段可以是任何整数类型(TINYINT、SMALLINT、INT和BIGINT),在默认的情况下,该字段的值是从1开始自增

  格式:属性名 数据类型 AUTO_INCREMENT

 

  7)设置表的属性的默认值

  格式:属性名 数据类型 DEFAULT 默认值

  

下面对4-7进行综合示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第151张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第152张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第153张
mysql> CREATE TABLE student3 (
    -> id int PRIMARY KEY AUTO_INCREMENT,
    -> teacher_id int UNIQUE,
    -> name varchar(20) NOT NULL,
    -> sex varchar(10) DEFAULT 'male'
    -> );
Query OK, 0 rows affected (0.01 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第154张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第155张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第156张

 

  查看表结构

  查看表基本结构语句DESCRIBE

  格式:DESCRIBE 表名;

  通过查看表的结构,就很明确的对表进行解读,而且可以查看一下自己创建的表有没错误,这个SQL语句必须会用啊

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第157张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第158张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第159张
mysql> desc student3;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(11)     | NO   | PRI | NULL    | auto_increment |
| teacher_id | int(11)     | YES  | UNI | NULL    |                |
| name       | varchar(20) | NO   |     | NULL    |                |
| sex        | varchar(10) | YES  |     | male    |                |
+------------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第160张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第161张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第162张

  查看表详细结构语句SHOW CREATE TABLE

  通过这个SQL语句可以查看表的详细定义,除了字段名、字段的数据类型、约束条件外,还可以查看表的默认存储引擎和字符编码

  格式:SHOW CREATE TABLE 表名;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第163张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第164张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第165张
mysql> SHOW CREATE TABLE student3;
+----------+-----------------------------------
-----------------------------------------------
-----------------------------------------------
---------------------------------------------+
| Table    | Create Table


                                             |
+----------+-----------------------------------
-----------------------------------------------
-----------------------------------------------
---------------------------------------------+
| student3 | CREATE TABLE `student3` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `teacher_id` int(11) DEFAULT NULL,
  `name` varchar(20) NOT NULL,
  `sex` varchar(10) DEFAULT 'male',
  PRIMARY KEY (`id`),
  UNIQUE KEY `teacher_id` (`teacher_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+----------+-----------------------------------
-----------------------------------------------
-----------------------------------------------
---------------------------------------------+
1 row in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第166张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第167张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第168张

  

  修改表:

  1)修改表名

  表名可以在一个数据库中唯一的确定一张表。

  格式:ALTER TABLE 旧表名 RENAME 新表名;

示例:

mysql> ALTER TABLE student RENAME student4;
Query OK, 0 rows affected (0.11 sec)

mysql> DESCRIBE student;
ERROR 1146 (42S02): Table 'example.student' doesn't exist

由上面可以看出,改名后的表已经不存在了。

 

  2)修改字段的数据类型

  格式:ALTER TABLE 表名 MODIFY 属性名 数据类型;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第169张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第170张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第171张
mysql> DESCRIBE student1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.08 sec)

mysql> ALTER TABLE student1 MODIFY name varchar(30);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第172张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第173张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第174张

 

  3)修改字段名:

  格式:ALTER TABLE 表名 CHANGE 旧属性名 新属性名 新数据类型;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第175张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第176张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第177张
mysql> DESCRIBE student1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> ALTER TABLE student1 CHANGE name stu_name varchar(40);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| stu_name | varchar(40) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第178张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第179张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第180张

这里我修改的字段名的同时也修改了数据类型了,如果你不想修改数据类型的话就按照原来的写就行了。

 

  4)增加字段

  格式:ALTER TABLE 表名 ADD 属性名1 数据类型 [完整性约束条件] [FIRST | AFTER 属性名2];

  其中,“属性名1”参数指需要增加的字段的名称;“FIRST”参数是可选参数,其作用是将新增字段设置为表的第一个字段;“AFTER”参数也是可选的参数,其作用是将新增字段添加到“属性名2”后面;“属性名2”当然就是指表中已经有的字段

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第181张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第182张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第183张
mysql> DESCRIBE student1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| stu_name | varchar(40) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> ALTER TABLE student1 ADD teacher_name varchar(20) NOT NULL AFTER id;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| id           | int(11)     | NO   | PRI | NULL    |       |
| teacher_name | varchar(20) | NO   |     | NULL    |       |
| stu_name     | varchar(40) | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第184张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第185张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第186张

 

  5)删除字段

  格式:ALTER TABLE 表名 DROP 属性名;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第187张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第188张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第189张
mysql> DESCRIBE student1;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| id           | int(11)     | NO   | PRI | NULL    |       |
| teacher_name | varchar(20) | NO   |     | NULL    |       |
| stu_name     | varchar(40) | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> ALTER TABLE student1 DROP teacher_name;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| stu_name | varchar(40) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第190张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第191张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第192张

 

  6)更改表的存储引擎

  格式:ALTER TABLE 表名 ENGINE = 存储引擎名;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第193张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第194张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第195张
mysql> SHOW CREATE TABLE student2;
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| Table    | Create Table


+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| student2 | CREATE TABLE `student2` (
  `id` int(11) NOT NULL DEFAULT '0',
  `stu_id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`,`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
1 row in set (0.05 sec)

mysql> ALTER TABLE student2 ENGINE = MYISAM;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE student2;
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| Table    | Create Table


+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| student2 | CREATE TABLE `student2` (
  `id` int(11) NOT NULL DEFAULT '0',
  `stu_id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`,`stu_id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312 |
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
1 row in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第196张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第197张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第198张

 

  7)删除表的外键约束

  格式:ALTER TABLE 表名 DROP FOREIGN KEY 外键别名;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第199张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第200张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第201张
mysql> SHOW CREATE TABLE teacher;
+---------+------------------------------------------------
-----------------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------+
| Table   | Create Table


                                                  |
+---------+------------------------------------------------
-----------------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------+
| teacher | CREATE TABLE `teacher` (
  `id` int(11) NOT NULL,
  `stu_id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `STUID` (`stu_id`),
  CONSTRAINT `STUID` FOREIGN KEY (`stu_id`) REFERENCES `stu
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+---------+------------------------------------------------
-----------------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------+
1 row in set (0.08 sec)

mysql> ALTER TABLE teacher DROP FOREIGN KEY STUID;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE teacher;
+---------+------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------------+
| Table   | Create Table

                                                        |
+---------+------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------------+
| teacher | CREATE TABLE `teacher` (
  `id` int(11) NOT NULL,
  `stu_id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `STUID` (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+---------+------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------------+
1 row in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第202张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第203张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第204张

 

  删除表:

  格式:DROP TABLE 表名;

  删除没有被关联的普通表:直接上面的SQL语句就行了

  删除被其他表关联的父表:

  方法一:先删除子表,在删除父表

  方法二:删除父表的外键约束(上面有介绍),再删该表

,

  在说创建、修改和删除表前,我们还是要进行一个操作的简单说明:

  1.登陆数据库系统

  在命令行中登陆MySQL数据库管理系统,输入一下内容:

mysql -h localhost -u root -p

  很多人都知道这个,但是其中参数的具体表示什么我们还是要了解的,其中,“-h”参数指连接的主机名,所以后面是localhost;“-u”参数表示用户名,此处的用户名为root;“-p”参数表示用户的密码,按下Enter键后就显示“Enter password:”,输入密码即可登录进去了。

  2.创建数据库

  在创建数据库之前,我们可以查看已经存在的数据库:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第205张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第206张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第207张
mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| community          |
| community_test     |
| data               |
| mydata             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
8 rows in set (0.04 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第208张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第209张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第210张

  创建数据库的格式:CREATE DATABASE 数据库名;

示例:创建一个名为example的数据库

mysql增删改查,MySQL:创建、修改和删除表 随笔 第211张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第212张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第213张
mysql>  CREATE DATABASE example;
Query OK, 1 row affected (0.00 sec)

mysql>  SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| community          |
| community_test     |
| data               |
| example            |
| mydata             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
9 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第214张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第215张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第216张

  3.删除数据库:

  格式:DROP DATABASE 数据库名;

示例:删除example数据库

mysql增删改查,MySQL:创建、修改和删除表 随笔 第217张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第218张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第219张
mysql>  DROP DATABASE example;
Query OK, 0 rows affected (0.07 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| community          |
| community_test     |
| data               |
| mydata             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
8 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第220张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第221张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第222张

  4.数据库存储引擎

  存储引擎就是指表的类型,数据库存储引擎决定了表在计算机的存储方式。

  MySQL中查询存储引擎的类型命令:SHOW ENGINES;

mysql增删改查,MySQL:创建、修改和删除表 随笔 第223张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第224张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第225张
mysql> SHOW ENGINES;
+--------------------+---------+------------------------------------------------
----------------+--------------+------+------------+
| Engine             | Support | Comment
                | Transactions | XA   | Savepoints |
+--------------------+---------+------------------------------------------------
----------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine
                | NULL         | NULL | NULL       |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables
                | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine
                | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to
 it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine
                | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for tempor
ary tables      | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine
                | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and f
oreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema
                | NO           | NO   | NO         |
+--------------------+---------+------------------------------------------------
----------------+--------------+------+------------+
9 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第226张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第227张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第228张

  查询结果中,Engine参数指存储引擎名称;Support参数说明MySQL是否支持该类型引擎;Comment参数表示对该引擎的评论;Transaction参数表示是否支持事务处理;XA参数表示是否分布式交易处理的XA规范;Savepoints参数表示是否支持保存点,以方便事务的回滚操作;由上面我们看到InnoDB存储引擎是default的,也就是数据库默认的存储引擎,下面我们简单介绍一下InnoDB。

  InnoDB是MySQL的一种存储引擎,InnoDB给MySQL提供了事务、回滚、崩溃修复能力和多版本并发控制的事务安全。InnoDB是MySQL上第一个提供外键约束的表引擎,而且对事务处理的能力,也是其他存储引擎不能比拟的。不过这种引擎的缺点就是读写效率稍差,占用的数据空间相对比较大。

  下面就是正式的内容:

  创建表:

  1)创建表的形式:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第229张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第230张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第231张
CREATE TABLE 表名 (
    属性名 数据类型 [完整约束条件],
    属性名 数据类型 [完整约束条件],
    ...
    ...
    属性名 数据类型 [完整约束条件]
);
mysql增删改查,MySQL:创建、修改和删除表 随笔 第232张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第233张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第234张

  如果你很急的登陆进去就创建表,恭喜你,你会出现“No database selected”的错误,因为你没有告诉别人你要选择在哪个数据库创建表,所以在创建之前要选择数据库,格式:USE 数据库名;

示例创建一个student表:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第235张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第236张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第237张
mysql> use example;
Database changed
mysql> CREATE TABLE student (
    -> id int,
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.09 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第238张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第239张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第240张

上面创建表的时候涉及到一个完整性约束条件,下面就列出一个完整性约束条件表:

约束条件

说明

PRIMARY KEY

 标识该属性为该表的主键,可以唯一的标识对应的元组

FOREIGN KEY

 标识该属性为该表的外键,是与之联系某表的主键
 NOT NULL

 标识该属性不能为空

UNIQUE

 标识该属性的值是唯一的
AUTO_INCREMENT

 标识该属性的值是自动增加,这是MySQL的SQL语句的特色

 DEFAULT

为该属性设置默认值

  下面讲解一下上面完整性约束条件的应用:

 

  2)设置表的主键

  单字段主键格式:属性名 数据类型 PRIMARY KEY

示例:

mysql>  CREATE TABLE student1 (
    -> id int PRIMARY KEY,
    -> name varchar(20)
    -> );
Query OK, 0 rows affected (0.06 sec)

  多字段主键格式:PRIMARY KEY(属性名1,属性名2....属性名n)

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第241张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第242张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第243张
mysql> CREATE TABLE student2 (
    -> id int,
    -> stu_id int,
    -> name varchar(20),
    -> PRIMARY KEY(id,stu_id)
    -> );
Query OK, 0 rows affected (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第244张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第245张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第246张

 

  3)设置表的外键

  格式:CONSTRAINT 外键别名 FOREIGN KEY(属性1,属性2,....属性n) REFERENCES 表名(属性1',属性2',...属性n')

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第247张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第248张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第249张
mysql> CREATE TABLE teacher (
    -> id int PRIMARY KEY,
    -> stu_id int,
    -> name varchar(20),
    -> CONSTRAINT STUID FOREIGN KEY(stu_id) REFERENCES student1(id)
    -> );
Query OK, 0 rows affected (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第250张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第251张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第252张

 

  4)设置表的非空约束

  简单的说就是不让这个属性的值为空,不填的话就会报错

  格式:属性名 数据类型 NOT NULL

 

  5)设置表的唯一性约束

  就是这个属性的值是不能重复的

  格式:属性名 数据类型 UNIQUE

 

  6)设置表的属性值自动增加

  AUTO_INCREMENT约束的字段可以是任何整数类型(TINYINT、SMALLINT、INT和BIGINT),在默认的情况下,该字段的值是从1开始自增

  格式:属性名 数据类型 AUTO_INCREMENT

 

  7)设置表的属性的默认值

  格式:属性名 数据类型 DEFAULT 默认值

  

下面对4-7进行综合示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第253张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第254张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第255张
mysql> CREATE TABLE student3 (
    -> id int PRIMARY KEY AUTO_INCREMENT,
    -> teacher_id int UNIQUE,
    -> name varchar(20) NOT NULL,
    -> sex varchar(10) DEFAULT 'male'
    -> );
Query OK, 0 rows affected (0.01 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第256张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第257张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第258张

 

  查看表结构

  查看表基本结构语句DESCRIBE

  格式:DESCRIBE 表名;

  通过查看表的结构,就很明确的对表进行解读,而且可以查看一下自己创建的表有没错误,这个SQL语句必须会用啊

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第259张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第260张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第261张
mysql> desc student3;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(11)     | NO   | PRI | NULL    | auto_increment |
| teacher_id | int(11)     | YES  | UNI | NULL    |                |
| name       | varchar(20) | NO   |     | NULL    |                |
| sex        | varchar(10) | YES  |     | male    |                |
+------------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第262张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第263张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第264张

  查看表详细结构语句SHOW CREATE TABLE

  通过这个SQL语句可以查看表的详细定义,除了字段名、字段的数据类型、约束条件外,还可以查看表的默认存储引擎和字符编码

  格式:SHOW CREATE TABLE 表名;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第265张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第266张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第267张
mysql> SHOW CREATE TABLE student3;
+----------+-----------------------------------
-----------------------------------------------
-----------------------------------------------
---------------------------------------------+
| Table    | Create Table


                                             |
+----------+-----------------------------------
-----------------------------------------------
-----------------------------------------------
---------------------------------------------+
| student3 | CREATE TABLE `student3` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `teacher_id` int(11) DEFAULT NULL,
  `name` varchar(20) NOT NULL,
  `sex` varchar(10) DEFAULT 'male',
  PRIMARY KEY (`id`),
  UNIQUE KEY `teacher_id` (`teacher_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+----------+-----------------------------------
-----------------------------------------------
-----------------------------------------------
---------------------------------------------+
1 row in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第268张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第269张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第270张

  

  修改表:

  1)修改表名

  表名可以在一个数据库中唯一的确定一张表。

  格式:ALTER TABLE 旧表名 RENAME 新表名;

示例:

mysql> ALTER TABLE student RENAME student4;
Query OK, 0 rows affected (0.11 sec)

mysql> DESCRIBE student;
ERROR 1146 (42S02): Table 'example.student' doesn't exist

由上面可以看出,改名后的表已经不存在了。

 

  2)修改字段的数据类型

  格式:ALTER TABLE 表名 MODIFY 属性名 数据类型;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第271张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第272张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第273张
mysql> DESCRIBE student1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.08 sec)

mysql> ALTER TABLE student1 MODIFY name varchar(30);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第274张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第275张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第276张

 

  3)修改字段名:

  格式:ALTER TABLE 表名 CHANGE 旧属性名 新属性名 新数据类型;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第277张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第278张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第279张
mysql> DESCRIBE student1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(30) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> ALTER TABLE student1 CHANGE name stu_name varchar(40);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| stu_name | varchar(40) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第280张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第281张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第282张

这里我修改的字段名的同时也修改了数据类型了,如果你不想修改数据类型的话就按照原来的写就行了。

 

  4)增加字段

  格式:ALTER TABLE 表名 ADD 属性名1 数据类型 [完整性约束条件] [FIRST | AFTER 属性名2];

  其中,“属性名1”参数指需要增加的字段的名称;“FIRST”参数是可选参数,其作用是将新增字段设置为表的第一个字段;“AFTER”参数也是可选的参数,其作用是将新增字段添加到“属性名2”后面;“属性名2”当然就是指表中已经有的字段

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第283张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第284张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第285张
mysql> DESCRIBE student1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| stu_name | varchar(40) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> ALTER TABLE student1 ADD teacher_name varchar(20) NOT NULL AFTER id;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| id           | int(11)     | NO   | PRI | NULL    |       |
| teacher_name | varchar(20) | NO   |     | NULL    |       |
| stu_name     | varchar(40) | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第286张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第287张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第288张

 

  5)删除字段

  格式:ALTER TABLE 表名 DROP 属性名;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第289张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第290张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第291张
mysql> DESCRIBE student1;
+--------------+-------------+------+-----+---------+-------+
| Field        | Type        | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| id           | int(11)     | NO   | PRI | NULL    |       |
| teacher_name | varchar(20) | NO   |     | NULL    |       |
| stu_name     | varchar(40) | YES  |     | NULL    |       |
+--------------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> ALTER TABLE student1 DROP teacher_name;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> DESCRIBE student1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| stu_name | varchar(40) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第292张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第293张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第294张

 

  6)更改表的存储引擎

  格式:ALTER TABLE 表名 ENGINE = 存储引擎名;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第295张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第296张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第297张
mysql> SHOW CREATE TABLE student2;
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| Table    | Create Table


+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| student2 | CREATE TABLE `student2` (
  `id` int(11) NOT NULL DEFAULT '0',
  `stu_id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`,`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
1 row in set (0.05 sec)

mysql> ALTER TABLE student2 ENGINE = MYISAM;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE student2;
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| Table    | Create Table


+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
| student2 | CREATE TABLE `student2` (
  `id` int(11) NOT NULL DEFAULT '0',
  `stu_id` int(11) NOT NULL DEFAULT '0',
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`,`stu_id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312 |
+----------+----------------------------------------
----------------------------------------------------
----------------------------------------------------
1 row in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第298张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第299张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第300张

 

  7)删除表的外键约束

  格式:ALTER TABLE 表名 DROP FOREIGN KEY 外键别名;

示例:

mysql增删改查,MySQL:创建、修改和删除表 随笔 第301张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第302张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第303张
mysql> SHOW CREATE TABLE teacher;
+---------+------------------------------------------------
-----------------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------+
| Table   | Create Table


                                                  |
+---------+------------------------------------------------
-----------------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------+
| teacher | CREATE TABLE `teacher` (
  `id` int(11) NOT NULL,
  `stu_id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `STUID` (`stu_id`),
  CONSTRAINT `STUID` FOREIGN KEY (`stu_id`) REFERENCES `stu
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+---------+------------------------------------------------
-----------------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------+
1 row in set (0.08 sec)

mysql> ALTER TABLE teacher DROP FOREIGN KEY STUID;
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SHOW CREATE TABLE teacher;
+---------+------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------------+
| Table   | Create Table

                                                        |
+---------+------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------------+
| teacher | CREATE TABLE `teacher` (
  `id` int(11) NOT NULL,
  `stu_id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `STUID` (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+---------+------------------------------------------------
-----------------------------------------------------------
--------------------------------------------------------+
1 row in set (0.00 sec)
mysql增删改查,MySQL:创建、修改和删除表 随笔 第304张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第305张 mysql增删改查,MySQL:创建、修改和删除表 随笔 第306张

 

  删除表:

  格式:DROP TABLE 表名;

  删除没有被关联的普通表:直接上面的SQL语句就行了

  删除被其他表关联的父表:

  方法一:先删除子表,在删除父表

  方法二:删除父表的外键约束(上面有介绍),再删该表

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄