535 字
3 分钟
MySQL学习笔记 (3)
2026-08-27
NOTE

基于 MySQL 26.7。CREATE TABLE

创建数据库#

CREATE SCHEMA scoredb;

然后选中这个数据库:

USE scoredb;

以后可以用 scoredb.employee 这种写法指定库名和表名。

CREATE TABLE#

CREATE TABLE 语句用于创建表。

CREATE TABLE department (
dept_no CHAR(3) NOT NULL,
dept_name VARCHAR(50) NOT NULL,
director VARCHAR(50) DEFAULT '院长',
CONSTRAINT department_pk PRIMARY KEY (dept_no),
CONSTRAINT department_name_un UNIQUE (dept_name)
);
CREATE TABLE employee (
emp_id INTEGER NOT NULL,
last_name VARCHAR(40) NOT NULL,
first_name VARCHAR(40),
dept_no CHAR(3),
hire_date DATE,
salary NUMERIC(12, 2),
manager_id INTEGER,
is_active BOOLEAN,
job_id VARCHAR(10),
phone VARCHAR(20),
title VARCHAR(50),
CONSTRAINT employee_pk PRIMARY KEY (emp_id),
CONSTRAINT emp_id_ck CHECK (emp_id > 0),
CONSTRAINT employee_dept_fk
FOREIGN KEY (dept_no) REFERENCES department (dept_no)
);

约束可以写在列后面,也可以写成 CONSTRAINT 名字 …

先插入部门,再插入员工(因为员工的部门编号要在部门表里存在):

INSERT INTO department (dept_no, dept_name, director)
VALUES ('D01', '教务处', '院长'),
('D02', '人事处', '院长'),
('D03', '财务处', '院长');
INSERT INTO employee (
emp_id, last_name, first_name, dept_no, hire_date,
salary, manager_id, is_active, job_id, phone, title
)
VALUES
(101, '张三', '明', 'D01', DATE '2018-03-01',
9000, NULL, TRUE, 'T01', '13800000001', '讲师'),
(102, '李四', '华', 'D01', DATE '2019-07-15',
12000, 101, TRUE, 'T01', NULL, '副教授'),
(103, '王五', '强', 'D02', DATE '2021-01-10',
7500, 101, TRUE, 'T02', '13800000003', '助教'),
(104, '赵六', '芳', 'D02', DATE '2016-11-20',
15000, NULL, FALSE, 'T02', '13800000004', '教授');

约束#

约束用来限制表中的数据。

约束作用
NOT NULL列不能是 NULL
UNIQUE列的值不能重复
PRIMARY KEY主键:非空且唯一,一张表一个
FOREIGN KEY外键:值必须在另一张表里存在
CHECK值必须满足条件,例如 emp_id > 0
DEFAULT插入时没给值就用默认值

外键列可以是 NULL(如果该列允许 NULL)。

ALTER TABLE#

ALTER TABLE 语句用于修改表。

ALTER TABLE employee ADD COLUMN email VARCHAR(100);
ALTER TABLE employee ADD CONSTRAINT employee_email_un UNIQUE (email);
ALTER TABLE employee DROP INDEX employee_email_un;
ALTER TABLE employee DROP COLUMN email;
ALTER TABLE department ALTER COLUMN director SET DEFAULT '院长';
ALTER TABLE department ALTER COLUMN director DROP DEFAULT;

DROP TABLE#

DROP TABLE 语句用于删除表。

DROP TABLE employee, department;

有外键时,先删除子表,或者先删除外键。

索引#

CREATE INDEX 语句用于创建索引,加快查找。

CREATE INDEX employee_name_idx ON employee (last_name);

主键和 UNIQUE 已经带有索引。删除索引:

DROP INDEX employee_name_idx ON employee;

参考#

  1. MySQL 26.7 · CREATE SCHEMA
  2. MySQL 26.7 · CREATE TABLE
  3. MySQL 26.7 · Constraints
  4. MySQL 26.7 · FOREIGN KEY
  5. MySQL 26.7 · ALTER TABLE
  6. MySQL 26.7 · CREATE INDEX
  7. ISO/IEC 9075(SQL<2023>
MySQL学习笔记 (3)
https://blog.chuwu.top/posts/sql/mysql3/
作者
ChuwuYo
发布于
2026-08-27
许可协议
CC BY-NC-SA 4.0