-- 1. 创建和管理表 CREATE TABLE
-- 方式一:
CREATE TABLE emp1(
id INT(10),
`name` VARCHAR(20),
salary DOUBLE(10, 2),
hire_date DATE
);
-- 方式二:基于现有表创建新表(相当于表的复制)
CREATE TABLE emp3
AS
SELECT *
FROM employees;
CREATE TABLE emp4
AS
SELECT employee_id, last_name, salary
FROM employees
WHERE department_id = 90;
-- 基于现有表创建新表,但是不导入数据
CREATE TABLE emp5
AS
SELECT *
FROM employees
WHERE 1 = 2;
-- 2. 修改表 ALTER TALBE
-- ①添加列
ALTER TABLE emp4
ADD age INT(2);
ALTER TABLE emp4
ADD gender VARCHAR(2) DEFAULT '女';
-- ②修改列
ALTER TABLE emp4
MODIFY gender VARCHAR(20);
-- ③重命名列
ALTER TABLE emp4
CHANGE gender gender22 VARCHAR(2);
-- ④删除列
ALTER TABLE emp4
DROP COLUMN age;
-- 3. 重命名表
ALTER TABLE emp4
RENAME employees4;
-- 4. 清空表
TRUNCATE TABLE emp3;
-- 5. 删除表
DROP TABLE employees4;
-- DDL : 数据定义语言,不可以回滚的,因为都是自动 commit
-- 3. 约束与分页
-- NOT NULL 非空约束,规定某个字段不能为空
CREATE TABLE emp7(
id INT(10) NOT NULL, -- 列级约束
`name` VARCHAR(20)
);
-- 添加非空约束
ALTER TABLE emp7
MODIFY `name` VARCHAR(25) NOT NULL;
-- 取消非空约束
ALTER TABLE emp7
MODIFY `name` VARCHAR(25) NULL;
-- UNIQUE 唯一约束,规定某个字段在整个表中是唯一的
CREATE TABLE emp8(
id INT(10),
`name` VARCHAR(20),
CONSTRAINT emp8_id_un UNIQUE(id) -- 表级约束
);
-- 组合约束
CREATE TABLE emp9(
id INT(10),
`name` VARCHAR(20),
phone VARCHAR(25),
email VARCHAR(30),
CONSTRAINT emp9_phoneAndEmail_un UNIQUE(phone, email)
);
-- 添加唯一约束
ALTER TABLE emp9
ADD CONSTRAINT emp9_name_un UNIQUE(NAME);
-- 删除唯一约束
ALTER TABLE emp9
DROP INDEX emp9_name_un;
-- PRIMARY KEY 主键(非空且唯一) : 通常利用主键确定唯一一条数据
CREATE TABLE emp10(
id INT(10) PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(20)
);
CREATE TABLE emp11(
id INT(10),
`name` VARCHAR(20),
CONSTRAINT emp11_id_pk PRIMARY KEY(id)
);
-- 添加主键约束
ALTER TABLE emp11
ADD CONSTRAINT emp11_id_pk PRIMARY KEY(id);
-- 删除主键约束
ALTER TABLE emp11
DROP PRIMARY KEY;
-- CHECK 检查约束
CREATE TABLE emp13(
id INT(10),
salary DOUBLE(10, 2),
CONSTRAINT emp13_salary_ck CHECK(salary > 3000)
);
-- MYSQL 分页(重要)
-- 公式:(当前页数-1)*每页条数,每页条数
SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary DESC
LIMIT 20, 10;