读书笔记--SQL必知必会17--创建和操纵表
SQL -- 创建 17 读书笔记 必会 必知 操纵
2023-09-14 09:00:40 时间
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语句。
所有重命名操作的基本语法都要求指定旧表名和新表名。
相关文章
- SQL2008--SQL语句-存储过程-触发器-事务处理-基本语法-函数
- Spark sql -- Spark sql中的窗口函数和对应的api
- SQL Tune Report–sqltrpt.sql
- SQL Server实现 LeetCode 178 分数排名
- 查看oracle的sql语句历史记录和锁表的情况
- sql中varchar(max),取代text类型
- 【学习总结】SQL的学习-2-sql操作
- 读书笔记--SQL必知必会14--组合查询
- 读书笔记--SQL必知必会13--创建高级联结
- 读书笔记--SQL必知必会18--视图
- mysql--SQL编程(关于mysql中的日期,关于重叠) 学习笔记2.2
- 读书笔记--SQL必知必会--常用MySQL(MariaDB)命令及示例
- 读书笔记--SQL必知必会06--用通配符进行过滤
- SQL语句的执行顺序
- Atitit.软件GUI按钮与仪表盘--db数据库区--导入mysql sql错误的解决之道
- SQL DXP 6.6.x 高级版--最新版
- 业务SQL那些事--慎用LIMIT
- Bigdata之sql+mplot:利用数据库信息和基于mplot将信息数据各种可视化(图表+地图+动态图)
- ClickHouse 数据插入、更新与删除操作 SQL
- C# 连接SQL Server数据库的几种方式--server+data source等方式
- 解决java.sql.SQLException: ORA-01789: query block has incorrect number of result columns
- 第51讲:SQL优化之COUNT查询的优化
- 都是 HBase 上的 SQL 引擎,Kylin 和 Phoenix 有什么不同?——Kylin 利用 MapReduce/Spark 将原始数据进行聚合计算,转成了 OLAP Cube 并加载到 HBase 中,以 Key-Value 的形式存储。Cube 按照时间范围划分为多个 segment,每个 segment 是一张 HBase 表,每张表会根据数据大小切分成多个 region
- facebook Presto SQL分析引擎——本质上和spark无异,分解stage,task,MR计算
- 【MySQL】常用的SQL命令_Unit02
- 《SQL必知必会》拾遗 原创 Django Java工程师成长日记
- 【MyBatis】| 动态SQL(重要)
- 实用SQL语句