Skip to main content

Table

Database

# 查看有哪些db
show databases;

# 查看当前使用的是哪个 db
select database();

# 选择 db
use [database-name];

# 创建 db
CREATE DATABASE [new-database-name];

# 删除 db
DROP DATABASE [database-name];

Table

查看当前 db 中的 tables

SHOW TABLES;

查看 Table 结构

DESC employee;

CREATE

CREATE TABLE employee
(
empid VARCHAR(10),
name VARCHAR(10),
age INT
);

列属性

创建/更新列时,列名、数据类型后可插入以下内容

  • PRIMARY KEY: 主键
  • UNIQUE: 唯一键
  • AUTO_INCREMENT: 自增,可与主键结合使用
  • DEFAULT [default value]: 默认值

INDEX

用于加速检索。在设置了主键的情况下,索引会自动创建。
在相同值较多(重复值较多)的情况下,可能会对检索性能提升有限。
对更新速度可能会有影响。当对创建了索引的表进行更新时,也需要对已经存在的索引信息进行维护。

CREATE INDEX [index name] on [table name] ([column name]);
-- example
CREATE INDEX id ON tb1A (empid);

-- 显示索引
SHOW INDEX FROM [table name];

-- 删除索引
DROP INDEX [index name] on [table name];

批量插入数据

INSERT INTO employee (empid, name, age)
VALUES ('A101', '佐藤', 40),
('A102', '高桥', 28),
('A103', '中川', 20),
('A104', '渡边', 23),
('A105', '西泽', 35);

-- 创建表格,并插入数据
DROP TABLE IF EXISTS sales;
CREATE TABLE sales (empid VARCHAR(20),sales INT,month INT);
INSERT INTO sales VALUES ('A103',101,4);
INSERT INTO sales VALUES ('A102',54,5);
INSERT INTO sales VALUES ('A104',181,4);
INSERT INTO sales VALUES ('A101',184,4);
INSERT INTO sales VALUES ('A103', 17,5);
INSERT INTO sales VALUES ('A101',300,5);
INSERT INTO sales VALUES ('A102',205,6);
INSERT INTO sales VALUES ('A104', 93,5);
INSERT INTO sales VALUES ('A103', 12,6);
INSERT INTO sales VALUES ('A107', 87,6);

复制 Table

复制列结构和记录,然后创建新的表。这种方法不能复制 AUTO_INCREMENT 等属性。AUTO_INCREMENT 等属性需要在复制后再次进行设置。

CREATE TABLE [new table name] SELECT * from [source table name];
-- example
CREATE TABLE tb1A SELECT * from employee;

-- 复制部分数据
CREATE TABLE sales_copy
SELECT * from sales
ORDER BY sales DESC
LIMIT 4 OFFSET 1;

复制表的列结构,创建新表。这种方法虽然不会复制表中的记录,但是会复制 AUTO_INCREMENTPRIMARY KEY 等列的属性。

CREATE TABLE [new table name] LIKE [source table name];
-- example
CREATE TABLE tb1B LIKE employee;

复制其他表的记录

INSERT INTO [table name] SELECT * from [source table name];
-- example
INSERT INTO tb1B SELECT * from employee;

-- 复制指定列
INSERT INTO [table name](column name) SELECT (column name) from [source table name];
-- example
INSERT INTO tb1B(empid) SELECT name from employee;

ALTER

添加列

-- 添加列
ALTER TABLE [table name] ADD [column name] [data type];
-- example:
ALTER TABLE tb1A ADD birthday DATETIME;

修改列的数据类型

-- 修改列
ALTER TABLE [table name] MODIFY [column name] [data type];
-- example:
ALTER TABLE tb1A MODIFY name VARCHAR(100);

修改列的顺序

ALTER TABLE tb1A ADD birthday DATETIME FIRST;
ALTER TABLE tb1A ADD birthday DATETIME AFTER name;

ALTER TABLE tb1A MODIFY birthday DATETIME FIRST;
ALTER TABLE tb1A MODIFY birthday DATETIME AFTER age;

修改列名

ALTER TABLE [table-name] CHANGE [column name] [new column name] [data type];
-- example
ALTER TABLE tb1A CHANGE birthday birth DATETIME;

删除列

ALTER TABLE [table-name] DROP [column name];
-- example
ALTER TABLE tb1A drop birthday;

删除 Table

DROP TABLE tb1A;
-- 避免发生错误
DROP TABLE IF EXISTS tb1A;

-- 删除所有记录
DELETE FROM [table name];

跨 DB 访问 Table

在使用use选择数据库的状态下也能够操作其他数据库中的表。这时可以像“数据库名.表名”这样把“数据库名”和“表名”用“.”连接起来。

DESC practice.employee;