显示所有表
show tables;
SHOW TABLES;
创建表
创建表,使用 CREATE TABLE
语法。
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
,如下所示:
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
列没有指定默认值:
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
:定义外键约束,用于保证关联表格中的数据完整性。
以下是一个包含多种约束的表格创建语句示例:
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_amount
是 CHECK
约束的名称,unique_order_date_customer
是唯一性约束的名称。
修改表
修改表,使用 ALTER TABLE
语法。
修改表,其实是修改表的列。因此,主要有以下三方面:
- 添加列
ADD
- 修改列
MODIFY
- 删除列
DROP
添加列
添加列,使用 ADD
语法:
ALTER TABLE table_name
ADD new_colum data_type column_constraint DEFAULT default_value [AFTER existing_column];
AFTER
表示在哪一列后面添加新列,如果省略的话,会默认添加在最后一列后。
修改列
修改列,使用 MODIFY
语法:
ALTER TABLE table_name
MODIFY column_name column_definition;
譬如:
ALTER TABLE courses
MODIFY fee NUMERIC (10, 2) NOT NULL
删除列
删除列,使用 DROP COLUMN
语法:
ALTER TABLE table_name
DROP COLUMN column_name,
DROP COLUMN colum_name,
...;
删除表
删除表,使用 DROP TABLE
语法。
DROP TABLE table_name;
另外有一些联用选项:
IF EXISTS
:如果删除一个不存在的表,数据库系统将不会抛出任何错误。CASCADE
:删除表的同时也删除与该表相关联的其他对象,例如触发器、索引、外键约束等。
-- 如果存在表employees,则删除该表
DROP TABLE IF EXISTS employees;
-- 删除表departments和与之关联的触发器和索引
DROP TABLE departments CASCADE;
DROP TABLE
语句永久删除表的数据和结构,某些数据库系统要求表中的记录必须为空时才能从数据库中删除。这有助于防止意外删除仍在使用的表。
要删除表中的所有数据,(也就是说保留表的定义但删除表中的所有数据)可以使用 DELETE
或 TRUNCATE TABLE
语句。
要删除由另一个表的外键约束引用的表,必须在删除表之前禁用或删除外部约束。
也可以同时删除多个表:
DROP TABLE table_name, table_name, ...;
删除表中的数据
删除表,可以使用 DROP TABLE
。
删除表中的数据,可以使用 DELETE
语句,或者 TRUNCATE TABLE
语句。
DELETE
删除表中的所有数据:
DELETE FROM table_name;
删除表中的某些数据:
DELETE FROM table_name
WHERE conditions;
TRUNCATE TABLE
TRUNCATE TABLE table_name;
TRUNCATE TABLE
用于从数据库表中删除所有数据行,并释放表所占用的存储空间。
它类似于 DELETE
命令,但有一些不同之处:
TRUNCATE TABLE
比DELETE
更快,因为它不会逐行删除,而是直接删除整个表。TRUNCATE TABLE
不能带WHERE
子句,因为它将删除表中的所有行。TRUNCATE TABLE
操作不能回滚,这意味着一旦你执行了TRUNCATE TABLE
命令,数据就永久丢失了。因此,在执行TRUNCATE TABLE
操作之前,请确保你真正需要删除所有行。
重命名表
可以使用 ALTER TABLE
语法:
ALTER TABLE table_name
RENAME TO new_table_name;
也可以直接使用 RENAME
语法:
RENAME old_table _name To new_table_name;
复制表
SELECT * INTO destination_table FROM source_table
临时表
SQL
临时表是在使用中创建的一种临时表格,只存在于当前的会话中,并在会话结束时自动销毁。
临时表通常被用来存储和处理一些临时性的数据,以便在 SQL
查询中使用。
临时表还有一些限制和特点:
- 临时表只存在于当前会话中,对其他会话是不可见的。
- 临时表的数据只在当前会话中有效,当会话结束后,临时表的数据会自动清空。
- 临时表不能在事务中使用,因为它们的生命周期是和会话绑定的,而不是和事务绑定的。
- 临时表的命名规则和普通表一样,但是需要注意避免与其他会话中的临时表重名。
临时表的语法与普通表非常相似,可以使用 CREATE TABLE
语句来创建临时表,例如:
CREATE TEMPORARY TABLE temp_table (
id INT,
name VARCHAR(50),
age INT
);
在使用完毕后,可以使用 DROP TABLE
语句来删除临时表,例如:
DROP TEMPORARY TABLE temp_table;
TEMPORARY
和 LOCAL TEMPORARY
都是用于创建临时表的关键字,它们之间的区别在于临时表的可见性和作用域范围。
TEMPORARY
关键字创建的临时表是全局可见的,它们可以被其他的会话或模块使用,但是它们只存在于创建它们的会话中。
如果在另一个会话中使用相同的表名创建了一个新的全局临时表,则原始的全局临时表将被覆盖。
LOCAL TEMPORARY
关键字创建的临时表只能在当前会话中可见,其他的会话或模块无法使用它们。它们只存在于创建它们的会话中,并且在该会话结束时自动删除。如果在同一会话中使用相同的表名创建多个本地临时表,则每个本地临时表都是唯一的,并且它们之间不会相互干扰。
在大多数关系型数据库管理系统中,默认的临时表都是本地临时表。如果需要创建全局可见的临时表,则需要显式地指定 TEMPORARY
关键字。
但是,某些数据库管理系统可能不支持全局临时表,或者需要特定的许可证才能使用全局临时表。
因此,建议在使用临时表时,先查阅相关文档,了解目标数据库管理系统的支持情况。