Skip to content

显示所有表

sql
show tables;

SHOW TABLES;

创建表

创建表,使用 CREATE TABLE 语法

sql
CREATE TABLE table_name (
  column_name_1 data_type column_constraint DEFAULT default_value,
  column_name_2 data_type column_constraint DEFAULT default_value,
  ...,
  table_constraint
)

DEFAULT default_value 是指在表格中创建一列时,可以为该列指定一个默认值。如果在插入数据时未指定该列的值,则会自动使用该默认值。

例如,如果创建一个名为 employees 的表格,其中包含一个名为 salary 的列,可以为该列设置默认值为 50000,如下所示:

sql
CREATE TABLE employees (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  salary DECIMAL(10,2) DEFAULT 50000,
  hire_date DATE
);

在上面的例子中,如果插入一行数据时未指定 salary 列的值,系统将会自动为其赋值为 50000。但是,如果插入一行数据时显式指定了 salary 的值,则系统将使用该值,而不是默认值。

DEFAULT default_value 可以省略。如果在创建表格时不为某一列指定默认值,则该列将不会有默认值,这意味着在插入数据时必须为该列显式指定值或提供 NULL 值。

例如,下面的示例创建一个名为 employees 的表格,其中 salary 列没有指定默认值:

sql
CREATE TABLE employees (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  salary DECIMAL(10,2),
  hire_date DATE
);

在这种情况下,如果在插入数据时不为 salary 列指定值,则该列的值将为 NULL。如果在插入数据时为 salary 列指定了值,则将使用该值,而不是默认值。

table_constraint 是在创建表格时,用于定义表格级别约束的语法元素。表格约束用于保证表格数据的完整性和一致性,例如限制某些列的取值范围、要求某些列不重复、定义外键关系等。

在创建表格时,可以为表格指定以下类型的约束:

PRIMARY KEY:定义表格的主键。 UNIQUE:定义一个或多个列的唯一性约束,要求列中的每个值都是唯一的。 CHECK:定义一个或多个列的取值范围约束,要求列中的值必须符合指定的条件。 FOREIGN KEY:定义外键约束,用于保证关联表格中的数据完整性。

以下是一个包含多种约束的表格创建语句示例:

sql
CREATE TABLE orders (
  order_id INT PRIMARY KEY,
  customer_id INT,
  order_date DATE,
  amount DECIMAL(10, 2),
  CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id),
  CONSTRAINT check_amount CHECK (amount > 0),
  CONSTRAINT unique_order_date_customer UNIQUE (order_date, customer_id)
);

在上面的示例中,orders 表格定义了主键约束、外键约束、CHECK 约束和唯一性约束。

其中 fk_customer 是外键约束的名称,check_amountCHECK 约束的名称,unique_order_date_customer 是唯一性约束的名称。

修改表

修改表,使用 ALTER TABLE 语法

修改表,其实是修改表的列。因此,主要有以下三方面:

  1. 添加列 ADD
  2. 修改列 MODIFY
  3. 删除列 DROP

添加列

添加列,使用 ADD 语法:

sql
ALTER TABLE table_name
ADD new_colum data_type column_constraint DEFAULT default_value [AFTER existing_column];

AFTER 表示在哪一列后面添加新列,如果省略的话,会默认添加在最后一列后。

修改列

修改列,使用 MODIFY 语法:

sql
ALTER TABLE table_name 
MODIFY column_name column_definition;

譬如:

sql
ALTER TABLE courses 
MODIFY fee NUMERIC (10, 2) NOT NULL

删除列

删除列,使用 DROP COLUMN 语法:

sql
ALTER TABLE table_name
DROP COLUMN column_name,
DROP COLUMN colum_name,
...;

删除表

删除表,使用 DROP TABLE 语法

sql
DROP TABLE table_name;

另外有一些联用选项:

  • IF EXISTS:如果删除一个不存在的表,数据库系统将不会抛出任何错误。
  • CASCADE:删除表的同时也删除与该表相关联的其他对象,例如触发器、索引、外键约束等。
sql
-- 如果存在表employees,则删除该表
DROP TABLE IF EXISTS employees;

-- 删除表departments和与之关联的触发器和索引
DROP TABLE departments CASCADE;

DROP TABLE 语句永久删除表的数据和结构,某些数据库系统要求表中的记录必须为空时才能从数据库中删除。这有助于防止意外删除仍在使用的表。

要删除表中的所有数据,(也就是说保留表的定义但删除表中的所有数据)可以使用 DELETETRUNCATE TABLE 语句。

要删除由另一个表的外键约束引用的表,必须在删除表之前禁用或删除外部约束

也可以同时删除多个表:

sql
DROP TABLE table_name, table_name, ...;

删除表中的数据

删除表,可以使用 DROP TABLE

删除表中的数据,可以使用 DELETE 语句,或者 TRUNCATE TABLE 语句。

DELETE

删除表中的所有数据:

sql
DELETE FROM table_name;

删除表中的某些数据:

sql
DELETE FROM table_name
WHERE conditions;

TRUNCATE TABLE

sql
TRUNCATE TABLE table_name;

TRUNCATE TABLE 用于从数据库表中删除所有数据行,并释放表所占用的存储空间。

它类似于 DELETE 命令,但有一些不同之处:

  1. TRUNCATE TABLEDELETE 更快,因为它不会逐行删除,而是直接删除整个表。

  2. TRUNCATE TABLE 不能带 WHERE 子句,因为它将删除表中的所有行。

  3. TRUNCATE TABLE 操作不能回滚,这意味着一旦你执行了 TRUNCATE TABLE 命令,数据就永久丢失了。因此,在执行 TRUNCATE TABLE 操作之前,请确保你真正需要删除所有行。

重命名表

可以使用 ALTER TABLE 语法:

sql
ALTER TABLE table_name   
RENAME TO new_table_name;

也可以直接使用 RENAME 语法:

sql
RENAME old_table _name To new_table_name;

复制表

sql
SELECT * INTO destination_table FROM source_table

临时表

SQL 临时表是在使用中创建的一种临时表格,只存在于当前的会话中,并在会话结束时自动销毁。

临时表通常被用来存储和处理一些临时性的数据,以便在 SQL 查询中使用。

临时表还有一些限制和特点:

  • 临时表只存在于当前会话中,对其他会话是不可见的。
  • 临时表的数据只在当前会话中有效,当会话结束后,临时表的数据会自动清空。
  • 临时表不能在事务中使用,因为它们的生命周期是和会话绑定的,而不是和事务绑定的。
  • 临时表的命名规则和普通表一样,但是需要注意避免与其他会话中的临时表重名。

临时表的语法与普通表非常相似,可以使用 CREATE TABLE 语句来创建临时表,例如:

sql
CREATE TEMPORARY TABLE temp_table (
  id INT,
  name VARCHAR(50),
  age INT
);

在使用完毕后,可以使用 DROP TABLE 语句来删除临时表,例如:

sql
DROP TEMPORARY TABLE temp_table;

TEMPORARYLOCAL TEMPORARY 都是用于创建临时表的关键字,它们之间的区别在于临时表的可见性和作用域范围。

TEMPORARY 关键字创建的临时表是全局可见的,它们可以被其他的会话或模块使用,但是它们只存在于创建它们的会话中。

如果在另一个会话中使用相同的表名创建了一个新的全局临时表,则原始的全局临时表将被覆盖。

LOCAL TEMPORARY 关键字创建的临时表只能在当前会话中可见,其他的会话或模块无法使用它们。它们只存在于创建它们的会话中,并且在该会话结束时自动删除。如果在同一会话中使用相同的表名创建多个本地临时表,则每个本地临时表都是唯一的,并且它们之间不会相互干扰。

在大多数关系型数据库管理系统中,默认的临时表都是本地临时表。如果需要创建全局可见的临时表,则需要显式地指定 TEMPORARY 关键字。

但是,某些数据库管理系统可能不支持全局临时表,或者需要特定的许可证才能使用全局临时表。

因此,建议在使用临时表时,先查阅相关文档,了解目标数据库管理系统的支持情况。