您的位置:首页 > 数据库 > MySQL

MySQL学习笔记(二)

2016-05-18 18:03 393 查看
  SQL标准规定SQL语句分为:DDL(Data Define Language 数据定义语言)、DML(Data Manipulation Language 数据操作语言)、TCL(Transaction Control Language 事务控制语言)、DQL(Data Query Language 数据查询语言)、DCL(Data Control Language 数据控制语言)。本文将详细介绍基于TABLE的DDL语句,其余的将在接下来的文章中加以详述。

一、DDL语言概述

  DDL语言全面数据定义语言(Data Define Language),主要的DDL动词有CREATE(创建)、DROP(删除)、ALTER(修改),还有TRUNCATE(截断)、RENAME(重命名)。使用DDL语言时,必须在动词后跟上数据库对象名词(例如:TABLE、VIEW、INDEX、SCHEMA、TRIGGER等)。

  注意:MySQL的DDL语言还有创建数据库,如CREATE DATABASE、DROP DATABASE,这在Oracle中则没有。

二、创建数据库对象 

语法格式:CREATE TABLE [IF NOT EXISTS] [schema.]dbName (<colume><data type>[列级完整性约束条件][,<colume><data type>[列级完整性约束条件]]...[,<表级完整性约束条件>]);



  原始员工表信息

  1、包含部分语法格式创建员工表



  2、包含所有语法格式员工创建员工表



  注意:使用sql developer创建数据库时,如果加入IF NOT EXISTS(如果已经存在,不会报错),会报错。如果数据库存在,在命令行客户端使用此命令则正常。





  创建完成数据库对象---表emp后,想显示一下emp表的结构,使用DESC table_name。但是使用sql developer操作mysql时,输入这句命令没有任何结果。由于是sql developer是可视化界面,因此可以直接点击forget406模式下的emp表直接查看表结构。当然也可以通过命令行输入DESC table_name查询表结构。



显示表结构

三、修改数据库对象属性(字段)

  DDL语言中,ALTER关键字用于修改数据库对象的字段,修改的方式大致有:增加字段、删除字段等。详细用法见:ALTER TABLE Syntax

语法格式:ALTER TABLE table_name [ADD [COLUMN]<new_column_name><data tape> [完整性约束] ][ADD<表级完整约束>][DROP [COLUMN]<column_name>[CASCADE|RESTRICT]][DROP CONSTRAINT<完整性约束名>[RESTRICT|CASCADE]][ALTER COLUMN<column_name><data type>]




原始emp表结构

  1、增加雇佣日期(hiredate)列  

ALTER TABLE emp ADD COLUMN hiredate DATE NOT NULL; 或者 ALTER TABLE emp ADD hiredate DATE NOT NULL;  /* COLUME可以省略 */




  ADD子句,用于增加新列(新字段)hiredate及其数据类型、新的列级完整约束NOT NULL、以及新的表级完整约束(此处没有)。当然增加的列是在所有已有列的最后。



  2、修改列名和数据类型



  3、修改字段对应的数据类型

ALTER TABLE emp MODIFY COLUME hiredate VARCHAR(30);  /* column可以省略 */






  4、删除hiredate列

ALTER TABLE emp DROP COLUMN CASCADE;或者ALTER TABLE emp DROP COLUMN RESTRICT;


四、修改数据库对象名字

  修改数据库对象的名字,首先我想到的是能不能修改DATABASE和SCHEMA这两种命名空间的名字。尝试了一下,发现不行。具体情况如下图所示。



  在google上查了一下MySQL5.7文档,发现MySQL5.7并不支持通过SQL语句对数据库名和模式名进行重命名,而只支持对基本表(TABLE)以及用户(USER)的重命名。



  因为我用的是MySQL5.5,所以我也没有确定这个理论是否正确,直到我在StackOverFlow上看到这段话,基本就确认目前使用的MySQL版本是不支持对数据库重命名的,而作为与数据库名类似的schema不支持也是同样的道理(原因是两者均为命名空间)。



  因此,如果需要改变db_name或者schema_name,只能通过Create关键字重新建立所需要的数据库、模式。

  MySQL修改基本表与Oracle有一定的区别。主要区别如下:

重命名 表 格式
MySQL:
RENAME TABLE old_table_name TO new_table_name;  /* 多了关键词 TABLE */
Oracle:
RENAME old_table_name TO new_table_name;


五、删除数据库对象与其数据

   TRUNCATE TALBE emp; 删除emp中的数据,但是保留emp表结构  

   DROP TABLE emp; 删除表emp及其数据

六、总结

  通过MySQL文档学习,虽然不能够完全掌握所有DDL内容,但是能够清楚的明白一点:MySQL的DDL语句十分灵活多变,尤其是其子句更是多种组合并用。往后的学习中需要根据具体的问题详细分析后挑选合适的SQL语句。


ALTER子句

  目前主流的数据库大致有Oracle、Oracle MySQL、Microsoft SQL Server、Sybase、IBM DB2、Apache Derby(纯Java数据库,JDK1.7包含在db包中)、BSD PostgreSQL,这些数据库的SQL语句均在遵循大部分SQL标准后加入扩展语句,这就使得学习的难度有所增加。

  就本文涉及到的知识点,试着比较一下MySQL和Oracle这两种主流数据库的区别。

  1、数值类型

  1.1)Oracle一般使用NUMBER(P,S)表示浮点数和NUMBER(P)表示整数,其中P代表支持的数字总位数,S代表最多支持的小数位数,其余为整数位;MySQL可以使用标准SQL定义中的NUMERIC(P,S)来支持类似的功能。

  1.2)Oracle使用NUMBER类型的子类型FLOAT(N)来定义浮点数(一般不常用,在SQL标准中定义);MySQL则不仅有SQL标准的FLOAT,还扩展支持了FLOAT(P,S)和DOUBLE(P,S)。

  2、字符类型

  2.1)Oracle支持CHAR、VARCHAR、VARCHAR2(Oracle特有),其中定长字符串CHAR最多支持2000字节,变长字符串VARCHAR2最多支持4000字节。注意Oracle不建议使用VARCHAR;而MySQL支持CHAR和VARCHAR,不过MySQL中的字符串相对比较复杂,将在接下去的文章中详细分析。

  注意:VARCHAR在SQL中定义不清楚,可能会改变,因此oracle干脆直接新定义了VARCHAR2来描述变长字符串。

  

  [b]声明:本文系作者原创,转载需经作者同意。[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: