sql create table index

本文介绍如何使用SQL语句创建用户表,并演示了字段的添加、修改与删除操作,包括索引管理和数据插入等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

drop table if exists `users`;

CREATE TABLE IF NOT EXISTS `users` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL,
`userpass` CHAR(32) NOT NULL,
`telno` VARCHAR(20) NOT NULL,
`sex` ENUM('男','女') NOT NULL DEFAULT '男',
`birthday` DATE NOT NULL DEFAULT '0000-00-00',
PRIMARY KEY(`id`),
INDEX username_index(`username`),
INDEX userpass_index(`userpass`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ALTER TABLE `users` CHANGE `username` `uname` VARCHAR(32) NOT NULL DEFAULT '';
ALTER TABLE `users` MODIFY `userpass` VARCHAR(16) NOT NULL DEFAULT '';
ALTER TABLE `users` ADD `tname` VARCHAR(40) NOT NULL DEFAULT '';
alter table users add tpass char(38) not null default '' after userpass;

alter table users drop tname;
alter table users drop tpass;

drop table if exists user;
alter table users rename as user;

insert into user(uname, userpass, telno) values('admin', '123456', '123456789');
insert into user(uname, userpass, telno) values('root', 'sendto2018', '56789');

alter table user auto_increment=1;

-- \G 显示结果立起来
show indexes from user\G;

ALTER TABLE `user` DROP INDEX `userpass_index`;
ALTER TABLE `user` ADD INDEX `userpass_index`(userpass);

### 使用 `CREATE TABLE LIKE` 创建新表 在 SQL 中,`CREATE TABLE LIKE` 语句用于根据现有表的结构创建一个新表。此操作不会复制数据,仅复制表的结构、索引和某些约束条件[^1]。以下是对该语句的详细说明: #### 语法 ```sql CREATE TABLE new_table_name LIKE existing_table_name; ``` - `new_table_name` 是要创建的新表的名称。 - `existing_table_name` 是用作模板的现有表的名称。 #### 功能特点 1. **复制表结构**:新表将具有与现有表相同的列定义,包括数据类型、默认值和注释[^5]。 2. **索引复制**:现有表上的索引会被复制到新表中[^1]。 3. **约束复制**: - `CHECK` 约束会被复制,但其名称会自动生成。 - 外键约束不会被复制。 4. **其他属性**: - 不会复制表的临时属性。如果需要复制临时表,请使用 `CREATE TEMPORARY TABLE LIKE`。 - 不会保留 `DATA DIRECTORY` 和 `INDEX DIRECTORY` 参数。 #### 示例 假设有一个名为 `employees` 的表,包含以下结构: ```sql CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50), age INT, department_id INT, CONSTRAINT chk_age CHECK (age >= 18) ); ``` 可以使用以下语句创建一个名为 `employees_backup` 的新表: ```sql CREATE TABLE employees_backup LIKE employees; ``` 执行后,`employees_backup` 将具有与 `employees` 相同的结构,包括列定义和索引,但不包含数据或外键约束[^1]。 #### 注意事项 - 如果源表被 `LOCK TABLES` 锁定,则 `CREATE TABLE LIKE` 语句无法成功执行。 - 新表不会继承源表的数据。如果需要复制数据,可以结合 `INSERT INTO ... SELECT` 语句使用[^5]。 ```sql -- 复制数据到新表 INSERT INTO employees_backup SELECT * FROM employees; ``` #### PostgreSQL 中的差异 在 PostgreSQL 中,`CREATE TABLE LIKE` 的行为与 MySQL 类似,但具体实现可能有所不同。例如,PostgreSQL 支持通过 `INCLUDING ALL` 选项来更全面地复制表属性[^3]。 ```sql CREATE TABLE new_table (LIKE existing_table INCLUDING ALL); ``` 这将尝试复制更多属性,如注释、默认值和规则等[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值