17.1 创建表

使用CREATE TABLE语句创建表。

不同的DBMS中CREATE TABLE语句的语法可能不同。

17.1.1 表创建基础

利用CREATE TABLE创建表,必须具备如下信息:

  • 新表的名字,在关键字CREATE TABLE之后给出
  • 表列的名字和定义,用逗号分隔
  • 有的DBMS还要求指定表的位置

实际的表定义(所有列)括在圆括号之中,各列之间用逗号分隔。

在创建新的表时,指定的表名必须不存在,否则会出错。

MariaDB [sqlbzbh]> SHOW TABLES;
+-------------------+
| Tables_in_sqlbzbh |
+-------------------+
| CustCopy |
| CustNew |
| Customers |
| OrderItems |
| Orders |
| Products |
| Vendors |
+-------------------+
7 rows in set (0.00 sec) MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]> CREATE TABLE ProductsNew
-> (
-> prod_id char(10) NOT NULL ,
-> vend_id char(10) NOT NULL ,
-> prod_name char(255) NOT NULL ,
-> prod_price decimal(8,2) NOT NULL ,
-> prod_desc text NULL
-> );
Query OK, 0 rows affected (0.00 sec) MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]> SHOW TABLES;
+-------------------+
| Tables_in_sqlbzbh |
+-------------------+
| CustCopy |
| CustNew |
| Customers |
| OrderItems |
| Orders |
| Products |
| ProductsNew |
| Vendors |
+-------------------+
8 rows in set (0.00 sec) MariaDB [sqlbzbh]>

17.1.2 使用NULL值

NULL值含义是没有值或缺值,不是空字符串。

每个表列要么是NULL列,要么是NOT NULL列,这种状态在创建时由表的定义规定。

大多数DBMS中,如果不指定NOT NULL时,将默认为NULL。

主键是其值唯一标识表中每一行的列。只有不允许NULL值的列可作为主键。

MariaDB [sqlbzbh]> CREATE TABLE VendorsNew
-> (
-> vend_id char(10) NOT NULL ,
-> vend_name char(50) NOT NULL ,
-> vend_address char(50) NULL ,
-> vend_city char(50) NULL ,
-> vend_state char(5) NULL ,
-> vend_zip char(10) NULL ,
-> vend_country char(50) NULL
-> );
Query OK, 0 rows affected (0.00 sec) MariaDB [sqlbzbh]>

17.1.3 指定默认值

在CREATE TABLE语句的列定义中用关键字DEFAULT指定默认值。

建议使用DEFAULT值而不是NULL值。

默认值经常用于日期或时间戳列。

MariaDB [sqlbzbh]> CREATE TABLE OrderItemsNew
-> (
-> order_num int NOT NULL ,
-> order_item int NOT NULL ,
-> prod_id char(10) NOT NULL ,
-> quantity int NOT NULL DEFAULT '1',
-> item_price decimal(8,2) NOT NULL
-> );
Query OK, 0 rows affected (0.00 sec) MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]> SELECT CURRENT_DATE();
+----------------+
| CURRENT_DATE() |
+----------------+
| 2016-12-29 |
+----------------+
1 row in set (0.00 sec) MariaDB [sqlbzbh]>

17.2 更新表

使用ALTER TABLE语句更新表定义。

  • 理想情况下,不要在表中包含数据时对其进行更新。
  • 不同DBMS对允许更新的内容差别巨大,需要慎重地区别对待。

使用ALTER TABLE更改表结构,必须具备下面信息:

  • 要更改的表名(必须已经存在)
  • 要更改的列

添加、更改或删除列、增加约束或增加键,这些操作都使用类似的语法。

复杂的表结构更改,一般需要手动建新表、复制数据、检验、重命名或删除旧表等过程,而且可能需要重建触发器、存储过程、索引和外键。

使用ALTER TABLE必须极为小心,应该提前做好完整的备份(表结构和数据的备份)。

MariaDB [sqlbzbh]> SELECT * FROM Vendors;
+---------+-----------------+-----------------+------------+------------+----------+--------------+
| vend_id | vend_name | vend_address | vend_city | vend_state | vend_zip | vend_country |
+---------+-----------------+-----------------+------------+------------+----------+--------------+
| BRE02 | Bear Emporium | 500 Park Street | Anytown | OH | 44333 | USA |
| BRS01 | Bears R Us | 123 Main Street | Bear Town | MI | 44444 | USA |
| DLL01 | Doll House Inc. | 555 High Street | Dollsville | CA | 99999 | USA |
| FNG01 | Fun and Games | 42 Galaxy Road | London | NULL | N16 6PS | England |
| FRB01 | Furball Inc. | 1000 5th Avenue | New York | NY | 11111 | USA |
| JTS01 | Jouets et ours | 1 Rue Amusement | Paris | NULL | 45678 | France |
+---------+-----------------+-----------------+------------+------------+----------+--------------+
6 rows in set (0.00 sec) MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]> ALTER TABLE Vendors ADD vend_phone CHAR(20);
Query OK, 6 rows affected (0.01 sec)
Records: 6 Duplicates: 0 Warnings: 0 MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]> SELECT * FROM Vendors;
+---------+-----------------+-----------------+------------+------------+----------+--------------+------------+
| vend_id | vend_name | vend_address | vend_city | vend_state | vend_zip | vend_country | vend_phone |
+---------+-----------------+-----------------+------------+------------+----------+--------------+------------+
| BRE02 | Bear Emporium | 500 Park Street | Anytown | OH | 44333 | USA | NULL |
| BRS01 | Bears R Us | 123 Main Street | Bear Town | MI | 44444 | USA | NULL |
| DLL01 | Doll House Inc. | 555 High Street | Dollsville | CA | 99999 | USA | NULL |
| FNG01 | Fun and Games | 42 Galaxy Road | London | NULL | N16 6PS | England | NULL |
| FRB01 | Furball Inc. | 1000 5th Avenue | New York | NY | 11111 | USA | NULL |
| JTS01 | Jouets et ours | 1 Rue Amusement | Paris | NULL | 45678 | France | NULL |
+---------+-----------------+-----------------+------------+------------+----------+--------------+------------+
6 rows in set (0.00 sec) MariaDB [sqlbzbh]>

17.3 删除表

使用DROP TABLE语句删除表。

许多DBMS允许强制实施有关规则,防止删除与其他表相关联的表。

MariaDB [sqlbzbh]> SHOW TABLES;
+-------------------+
| Tables_in_sqlbzbh |
+-------------------+
| CustCopy |
| Customers |
| OrderItems |
| Orders |
| Products |
| Vendors |
+-------------------+
6 rows in set (0.00 sec) MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]> DROP TABLE CustCopy;
Query OK, 0 rows affected (0.00 sec) MariaDB [sqlbzbh]>
MariaDB [sqlbzbh]> SHOW TABLES;
+-------------------+
| Tables_in_sqlbzbh |
+-------------------+
| Customers |
| OrderItems |
| Orders |
| Products |
| Vendors |
+-------------------+
5 rows in set (0.00 sec) MariaDB [sqlbzbh]>

17.4 重命名表

不同的DBMS对重命名操作的有不同的定义和实现。

MySQL和MariaDB使用RENAME语句。

所有重命名操作的基本语法都要求指定旧表名和新表名。

读书笔记--SQL必知必会17--创建和操纵表的更多相关文章

  1. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  2. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  3. 读书笔记--SQL必知必会--建立练习环境

    书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL in 10 Minutes - Fourth Edition> MyS ...

  4. 读书笔记--SQL必知必会12--联结表

    12.1 联结 联结(join),利用SQL的SELECT在数据查询的执行中联结表. 12.1.1 关系表 关系数据库中,关系表的设计是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联 ...

  5. SQL语法语句总结(《SQL必知必会》读书笔记)

    一.SQL语句语法 ALTER TABLE ALTER TABLE 用来更新已存在表的结构. ALTER TABLE tablename (ADD|DROP column datatype [NULL ...

  6. [SQL必知必会] 读书笔记

    第1课 数据库 这一课介绍SQL究竟是什么,它能做什么事情.   1.1 数据库基础 下面是一些数据库概念的简要介绍,如果你刚开始接触数据库,可以由此了解必需的基本知识.   1.1.1 数据库 数据 ...

  7. 【读书笔记】【数据库】SQL必知必会

    第1课 了解SQL 简单介绍了sql,和dbms,无重点. 第2课 检索数据 重点:select语句,distinct,limit,注释 1. select 语句如果没有明确排序查询结果,那么返回的数 ...

  8. 《SQL 必知必会》读书笔记

    第1课 了解 SQL 这章主要介绍了数据库,表,字段类型,行,列,主键和SQL等基本概念. 数据库:以某种形式存储的数据集合,在计算机上的表现形式可能是一个文件或者一组文件.我们平时所说的数据库,往往 ...

  9. 《mysql必知必会》读书笔记--存储过程的使用

    以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...

  10. 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作

    上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...

随机推荐

  1. 恢复SQL Server被误删除的数据(再扩展)

    恢复SQL Server被误删除的数据(再扩展) 大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的 ...

  2. node中的cmd规范

    你应该熟悉nodejs模块中的exports对象,你可以用它创建你的模块.例如:(假设这是rocker.js文件) exports.name = function() { console.log('M ...

  3. SQL Server 常用内置函数(built-in)持续整理

    本文用于收集在运维中经常使用的系统内置函数,持续整理中 一,常用Metadata函数 1,查看数据库的ID和Name db_id(‘DB Name’),db_name('DB ID') 2,查看对象的 ...

  4. JavaScript之链式结构序列化

    一.概述 在JavaScript中,链式模式代码,太多太多,如下: if_else: if(...){ //TODO }else if(...){ //TODO }else{ //TODO } swi ...

  5. 【NLP】前戏:一起走进条件随机场(一)

    前戏:一起走进条件随机场 作者:白宁超 2016年8月2日13:59:46 [摘要]:条件随机场用于序列标注,数据分割等自然语言处理中,表现出很好的效果.在中文分词.中文人名识别和歧义消解等任务中都有 ...

  6. 【HTML】Html页面跳转的5种方式

    目录结构: // contents structure [-] html实现 javascript方式实现 结合了倒数的javascript实现(IE) 解决Firefox不支持innerText的问 ...

  7. TCP/IP基础

    TCP/IP 是用于因特网 (Internet) 的通信协议. 计算机通信协议是对那些计算机必须遵守以便彼此通信的规则的描述. 什么是 TCP/IP? TCP/IP 是供已连接因特网的计算机进行通信的 ...

  8. Android游戏开发实践(1)之NDK与JNI开发03

    Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...

  9. iOS 10 跳转系统设置

    苦心人天不负, 为了项目终于把 iOS 10 跳转系统设置的方法给搞定了, 很欣慰. http://www.cnblogs.com/lurenq/p/6189580.html iOS 10 跳转系统设 ...

  10. GitHub管理代码-随笔

    公司一直用的SVN进行项目管理,平时便自己折腾了下Git,这里做下GitHub的最简单的记录... 在git上创建仓库等就免谈了,网上也有好多教程,直接从创建之后记录: 在github的readme文 ...