必须会的SQL语句:创建表、修改表结构、删除表
在数据库操作中,表是存储数据的核心容器,掌握创建表、修改表结构、删除表这三个基础SQL语句,是进行后续数据增删改查操作的前提。
一、创建表(CREATE TABLE)
创建表使用CREATE TABLE语句,需要指定表名、列名、每列的数据类型,还可以设置列的约束条件,比如非空、主键、默认值等。
1. 基础语法
CREATE TABLE 表名 ( 列名1 数据类型 [约束条件], 列名2 数据类型 [约束条件], ... [表级约束条件] );
2. 示例:创建用户表
下面是一个创建用户表的示例,包含用户ID、用户名、密码、注册时间四个字段,其中用户ID设为主键自增,用户名设置非空且唯一,注册时间设置默认值为当前时间。
CREATE TABLE user_info ( user_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID', user_name VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名', password VARCHAR(100) NOT NULL COMMENT '密码', register_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';
上述语句中,COMMENT用于添加字段或表的注释,ENGINE=InnoDB指定存储引擎,DEFAULT CHARSET=utf8mb4设置字符集,避免中文乱码问题。
二、修改表结构(ALTER TABLE)
当表创建完成后,如果需要新增字段、修改字段类型或名称、删除字段、添加或删除约束,都可以使用ALTER TABLE语句实现。
1. 新增字段
语法:ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [约束条件] [AFTER 已有列名 | FIRST];
示例:给user_info表新增一个用户年龄字段,放在user_name字段后面:
ALTER TABLE user_info ADD COLUMN age INT COMMENT '用户年龄' AFTER user_name;
2. 修改字段
如果需要修改字段的数据类型或约束,可以使用MODIFY;如果需要同时修改字段名和数据类型,可以使用CHANGE。
示例1:修改age字段的数据类型为TINYINT,设置默认值为18:
ALTER TABLE user_info MODIFY COLUMN age TINYINT DEFAULT 18 COMMENT '用户年龄';
示例2:将age字段名修改为user_age,数据类型改为INT:
ALTER TABLE user_info CHANGE COLUMN age user_age INT COMMENT '用户年龄';
3. 删除字段
语法:ALTER TABLE 表名 DROP COLUMN 列名;
示例:删除user_info表中的user_age字段:
ALTER TABLE user_info DROP COLUMN user_age;
4. 添加/删除约束
示例:给user_info表的user_name字段添加唯一约束(如果之前没加的话):
ALTER TABLE user_info ADD UNIQUE INDEX idx_user_name (user_name);
示例:删除user_info表的主键约束(注意:如果主键是自增的,需要先取消自增再删除主键):
-- 先取消自增(修改字段去掉AUTO_INCREMENT) ALTER TABLE user_info MODIFY COLUMN user_id INT PRIMARY KEY; -- 再删除主键 ALTER TABLE user_info DROP PRIMARY KEY;
三、删除表(DROP TABLE)
删除表会直接移除表结构和表中所有数据,操作不可逆,执行前需要确认是否真的需要删除。
1. 基础语法
语法:DROP TABLE [IF EXISTS] 表名1 [, 表名2...];
其中IF EXISTS是可选参数,加上后如果表不存在,不会报错,只会给出警告,避免语句执行失败。
2. 示例
示例1:删除user_info表,如果表存在的话:
DROP TABLE IF EXISTS user_info;
示例2:同时删除多个表:
DROP TABLE IF EXISTS user_info, order_info, product_info;
四、注意事项
创建表前可以先判断表是否存在,避免重复创建报错,语法为
CREATE TABLE IF NOT EXISTS 表名 (...);修改表结构尤其是删除字段、删除表的操作,执行前一定要备份数据,防止数据丢失
不同数据库(如MySQL、PostgreSQL、SQL Server)的SQL语法存在细微差异,比如自增关键字,MySQL用AUTO_INCREMENT,PostgreSQL用SERIAL或GENERATED ALWAYS AS IDENTITY,实际使用时需要根据对应的数据库调整语法
删除表后,表上关联的索引、触发器等也会被一并删除,需要提前确认是否有依赖对象