读书笔记--SQL必知必会17--创建和操纵表
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--创建和操纵表的更多相关文章
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 读书笔记--SQL必知必会--建立练习环境
书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL in 10 Minutes - Fourth Edition> MyS ...
- 读书笔记--SQL必知必会12--联结表
12.1 联结 联结(join),利用SQL的SELECT在数据查询的执行中联结表. 12.1.1 关系表 关系数据库中,关系表的设计是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联 ...
- SQL语法语句总结(《SQL必知必会》读书笔记)
一.SQL语句语法 ALTER TABLE ALTER TABLE 用来更新已存在表的结构. ALTER TABLE tablename (ADD|DROP column datatype [NULL ...
- [SQL必知必会] 读书笔记
第1课 数据库 这一课介绍SQL究竟是什么,它能做什么事情. 1.1 数据库基础 下面是一些数据库概念的简要介绍,如果你刚开始接触数据库,可以由此了解必需的基本知识. 1.1.1 数据库 数据 ...
- 【读书笔记】【数据库】SQL必知必会
第1课 了解SQL 简单介绍了sql,和dbms,无重点. 第2课 检索数据 重点:select语句,distinct,limit,注释 1. select 语句如果没有明确排序查询结果,那么返回的数 ...
- 《SQL 必知必会》读书笔记
第1课 了解 SQL 这章主要介绍了数据库,表,字段类型,行,列,主键和SQL等基本概念. 数据库:以某种形式存储的数据集合,在计算机上的表现形式可能是一个文件或者一组文件.我们平时所说的数据库,往往 ...
- 《mysql必知必会》读书笔记--存储过程的使用
以前对mysql的认识与应用只是停留在增删改查的阶段,最近正好在学习mysql相关内容,看了一本书叫做<MySQL必知必会>,看了之后对MySQL的高级用法有了一定的了解.以下内容只当读书 ...
- 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作
上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...
随机推荐
- 【.net 深呼吸】设置序列化中的最大数据量
欢迎收看本期的<老周吹牛>节目,由于剧组严重缺钱,故本节目无视频无声音.好,先看下面一个类声明. [DataContract] public class DemoObject { [Dat ...
- ASP.NET MVC 请求路径相关参数的获取
Request.ApplicationPath / Request.CurrentExecutionFilePath /Home/Index Request.FilePath /Home/Index ...
- 背后的故事之 - 快乐的Lambda表达式(一)
快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...
- xpath提取多个标签下的text
title: xpath提取多个标签下的text author: 青南 date: 2015-01-17 16:01:07 categories: [Python] tags: [xpath,Pyth ...
- Xamarin+Prism开发详解一:PCL跨平台类库与Profile的关系
在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]中提到过以下错误,不知道大伙还记得不: 无法安装程序包"Microsoft.Identity.Client 1.0. ...
- 《JavaScript设计模式与开发实践》整理
最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...
- select、poll、epoll之间的区别总结
select.poll.epoll之间的区别总结 05/05. 2014 select,poll,epoll都是IO多路复用的机制.I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪 ...
- C#反序列化XML异常:在 XML文档(0, 0)中有一个错误“缺少根元素”
Q: 在反序列化 Xml 字符串为 Xml 对象时,抛出如下异常. 即在 XML文档(0, 0)中有一个错误:缺少根元素. A: 首先看下代码: StringBuilder sb = new Stri ...
- 开始webservice了
一.WebService到底是什么 一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用 ...
- Linux文件查找.md
Linux 文件查找 在Linux系统的查找相关的命令: which 查看可执行文件的位置 whereis 查看文件的位置 locate 配合数据库查看文件位置 find 实际搜寻硬盘查询文件名称 w ...