一、DROP TABLE语句:用于删除数据表

  DROP TABLE removes one or more tables.

  You must have the DROP privilege for each table.

  All table data and the table definition are removed, so be careful with this statement!

基本格式:

  drop table <table_name>

DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]

TEMPORARY:用于删除临时表(推荐针对性使用),删除临时表不会结束当前的事务

IF EXISTS:用于在表不存在时,阻止错误消息的显示

[RESTRICT | CASCADE]:现在什么也不做

其实删表语法如上,还是挺简单的,但是当一个表被删除时,所有依赖于该表的对象也被删除(例如约束、索引、视图和权限等)

所以,删除表之前(注意):

  ①确认这个表没有人在使用,确实是一个废除的表

  ②看好确认是这个数据库的表


顺带提一下,如何重命名表:

RENAME  TABLE  tbl_name TO  new_tbl_name
       [, tbl_name2 TO new_tbl_name2] …

当然,可以使用ALTER TABLE语句替换该语句,如下……

二、ALTER TABLE语句:添加、修改和删除列

基本格式:

  1.修改表名:alter table 原表名 rename to 新表名;

  2.新增列:alter table 表名 add [column] 列名 varchar(20) ;

  3.删除列:alter table 表名 drop [column] 列名;

  4.修改列名: alter table 表名 change 原列名 新列名 varchar(20) ;

  5.修改列属性:alter table 表名 modify 列名 varchar(20) ;

ALTER [IGNORE]  TABLE  tbl_name
   ADD [COLUMN] col_name column_definition
    [FIRST | AFTER col_name ]
  |ADD [COLUMN] (col_name column_definition,...)
  |MODIFY [COLUMN] col_name column_definition
    [FIRST | AFTER col_name]
  |DROP [COLUMN] col_name
  |CHANGE [COLUMN] old_col_name new_col_name column_definition
  [FIRST|AFTER col_name]

FIRST:表示表头行

AFTER col_name:表示在col_name的后面,即下一行(没有before选项)

##Copy一张TEAMS表用作示例

mysql> create table teams_copy

 -> as

 -> select * from TEAMS;


1、添加列

  ①新列自动成为表中的最后一个列,除非指定了FIRST或AFTER选项(表中已有的行在新列上自动得到NULL值或默认值)

例1:添加type列给teams_copy表中

mysql> alter table teams_copy
-> add type1 char(); #添加的新列归位最后一个列 mysql> alter table teams_copy
-> add type2 char() default''; #添加列的同时设置默认值 mysql> alter table teams_copy
-> add type3 char() after PLAYERNO; #指定新列的位置 mysql> select * from teams_copy;
+--------+----------+-------+----------+-------+-------+
| TEAMNO | PLAYERNO | type3 | DIVISION | type1 | type2 |
+--------+----------+-------+----------+-------+-------+
| | | NULL | first | NULL | |
| | | NULL | second | NULL | |
+--------+----------+-------+----------+-------+-------+

  ②如果添加新列时指定了NOT NULL约束

则:

  字符串列自动得到空字符串;

  数字列自动得到0;

  日期类型自动得到0日期;

  时间类型自动得到00:00:00

mysql> alter table teams_copy
-> add (
-> type4 char() NOT NULL,
-> type5 INTEGER NOT NULL,
-> type6 DATE NOT NULL,
-> tpye7 time not null );

mysql> select * from teams_copy;  #截的一部分图

2、删除列

  列值是否有数据都可以删除,依赖于该列的其它数据库对象,如索引、权限也将被删除

mysql> alter table teams_copy
-> drop type6; mysql> alter table teams_copy drop type2;
mysql> alter table teams_copy drop type4;
mysql> alter table teams_copy drop type5; #只能一列一列的删 mysql> select * from teams_copy;
+--------+----------+-------+----------+-------+----------+
| TEAMNO | PLAYERNO | type3 | DIVISION | type1 | tpye7 |
+--------+----------+-------+----------+-------+----------+
| | | NULL | first | NULL | :: |
| | | NULL | second | NULL | :: |
+--------+----------+-------+----------+-------+----------+

3、修改列---经常用到

基本格式:

  alter table <表名> modify <列名> 数据类型(……) 选项;

1)修改列的宽度:

  如果是增加列宽,都无所谓

  如果是减少列宽,就必须保证原有的值要能放得下,否则出错

2)改变数据类型时,列中的值必须能转变为新的类型

mysql> desc student;
+-------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+-------+
| id | int() | NO | PRI | NULL | |
| name | varchar() | NO | | NULL | |
| sex | enum('M','F') | YES | | NULL | |
+-------+---------------+------+-----+---------+-------+
rows in set (0.00 sec) mysql> select * from student;
+----+--------+------+
| id | name | sex |
+----+--------+------+
| | 张三 | M |
| | 李四 | F |
| | 王五 | NULL |
+----+--------+------+
rows in set (0.00 sec) mysql> alter table student
-> modify id smallint not null;
Query OK, rows affected (0.29 sec)
Records: Duplicates: Warnings: mysql> alter table student
-> modify name int not null;
ERROR (HY000): Incorrect integer value: '张三' for column 'name' at row

解析:student表中id列值可转换为新的数据类型,但是name列的值无法转变,所以modify失败。

3)修改列名(不要加引号)

mysql> alter table student
-> change id 学号 int; mysql> select * from student;
+--------+--------+------+
| 学号 | name | sex |
+--------+--------+------+
| | 张三 | M |
| | 李四 | F |
| | 王五 | NULL |
+--------+--------+------+

4、修改约束

  可以添加或删除约束,但是不能修改一个已有的约束。

ALTER [IGNORE] TABLE tbl_name
   ADD [CONSTRAINT [symbol]] PRIMARY KEY(col_name,...)
  |ADD [CONSTRAINT [symbol]] UNIQUE (col_name,...)
  |ADD [CONSTRAINT [symbol]] FOREIGN KEY (col_name,...)
    References parent_table(col_name)
  |DROP PRIMARY KEY
  |DROP FOREIGN KEY fk_symbo
  |DROP {INDEX|KEY} index_name

示例:定义两张表t1和t2

mysql> create table t1(
->   a int not null primary key,
->   b int not null); mysql> create table t2(
->   a int not null primary key,
->   b int not null,
->   constraint c1 unique(b),
->   constraint fk1 foreign key(a) references t1(a)
-> ); 1)删除唯一性约束:删除对应的索引(index)即可
mysql> alter table t2
-> drop index c1; 2)给t1添加外键约束,取名fk2
mysql> alter table t1
-> add constraint fk2 foreign key(a) references t2(a); 3)删除外键fk2
mysql> alter table t1
-> drop foreign key fk2; 4)删除t1表的主键
mysql> alter table t1
-> drop primary key;

DDL中drop-alter table的更多相关文章

  1. My Sql 中要Alter Table的同学请注意!!!

    首先我建议你在对MySQL表做DDL操作时: 1 执行 show processlist 查看,要操作的表(数据库对象)是否处于锁状态 if("未锁定") { 执行DDL语句 }e ...

  2. oracle DDL(create、alter、drop)

    一.创建表1.创建表CREATE TABLE <table_name>( column1 DATATYPE [NOT NULL] [PRIMARY KEY], column2 DATATY ...

  3. MySQL5.6 ALTER TABLE 分析和测试

    在MySQL5.5和之前版本,在运行的生产环境对大表(超过数百万纪录)执行Alter操作是一件很困难的事情.因为将重建表和锁表,影响用户者的使用.因此知道Alter操作何时结束对我们是非常重要的.甚至 ...

  4. sql语句-ALTER TABLE

    在工作中常遇到要维护数据库表的列,这里主要介绍sql语句中的ALTER TABLE 语句.ALTER TABLE 语句用于在已有的表中添加.修改或删除列. 如需在表中添加列,请使用下列语法: ALTE ...

  5. mysql 添加索引,ALTER TABLE和CREATE INDEX的区别

    nvicat-->mysql表设计-->创建索引. (1)使用ALTER TABLE语句创建索引,其中包括普通索引.UNIQUE索引和PRIMARY KEY索引3种创建索引的格式: PRI ...

  6. [Hive - LanguageManual] Create/Drop/Alter Database Create/Drop/Truncate Table

    Hive Data Definition Language Hive Data Definition Language Overview Create/Drop/Alter Database Crea ...

  7. SQL ALTER TABLE 语句在项目中的使用

    1.在实际的项目开发过程中,之前已经创建好的实体类可能需要增加/删除字段,亦或是更改已有字段的属性,比如主键的增长策略从自增型改为UUID型,那么就会涉及到 SQL 中 alter table 语句的 ...

  8. ORACLE中通过SQL语句(alter table)来增加、删除、修改字段

    1.添加字段: alter table  表名  add (字段  字段类型)  [ default  '输入默认值']  [null/not null]  ; 2.添加备注: comment on ...

  9. problem during schema drop, statement alter table ACT_RU_VARIABLE

    将activiti的databaseSchemaUpdate设置为drop-create抛出DbSqlSession 错误 发布于2015-02-14 16:03:57 浏览7851次 Excepti ...

随机推荐

  1. Swift字符串插值

    字符串插值是一种全新的构建字符串的方式,可以在其中包含常量.变量.字面量和表达式.您插入的字符串字面量的每一项都被包裹在以反斜线为前缀的圆括号中: let multiplier = let messa ...

  2. Mathematica 10 Mac 设置默认工作目录

    用SetDirectory命令设置  

  3. Backbone中父子view之间的值传递

    backbone中,使用最多的莫过于在view中进行操作,如模板的渲染以及事件函数的定义.为了提高代码的可维护性,一般地我们会写多个视图即view,将界面按照功能的不同进行模块化划分,模块与view一 ...

  4. js 实现图片压缩并转换成base64(data:image/jpeg;base64)格式

    <!DOCTYPE html> <html> <head> <!--by 0o晓月メ http://www.cnblogs.com/final-elysion ...

  5. 二、redis集群搭建

    redis集群搭建 redis3.0后支持集群.集群中应该至少有三个节点,每个节点有一备份节点.需要6台服务器.搭建伪分布式,需要6个redis实例.搭建集群的步骤: 一.安装单机版redis 第一步 ...

  6. geotrellis使用(二十九)迁移geotrellis至1.1.1版

    目录 前言 升级过程 总结 一.前言        由于忙着安装OpenStack等等各种事情,有半年的时间没有再亲密的接触geotrellis,甚至有半年的时间没能畅快的写代码.近来OpenStac ...

  7. python新手之2变量

    变量 变量是将储存的值保存在内存中.当声明一个变量的时候会在内存中开辟一个储存内容的位置. 基于变量的数据类型,解释器分配内存空间并决定储存的内容.因此我们可以通过变量分配不同的数据类型,可以在变量中 ...

  8. 95后实习生的远程办公体验(asp.net mvc\C#技术栈)

    这个月我们做了一件别人看起来很疯狂的事情,就是让一批95后的实习生实行远程办公,效果还不错,于是写此文总结一下. 其实认真算算,我自己的远程工作经验有十年了吧,在北京工作的时候天气不好就申请在家办公, ...

  9. 纯 CSS 实现波浪效果!

    一直以来,使用纯 CSS 实现波浪效果都是十分困难的. 因为实现波浪的曲线需要借助贝塞尔曲线. 而使用纯 CSS 的方式,实现贝塞尔曲线,额,暂时是没有很好的方法. 当然,借助其他力量(SVG.CAN ...

  10. InnoDB关键特性之change buffer

    一.关于IOT:索引组织表 表在存储的时候按照主键排序进行存储,同时在主键上建立一棵树,这样就形成了一个索引组织表,一个表的存储方式以索引的方式来组织存储的. 所以,MySQL表一定要加上主键,通过主 ...