三、DDL
DDL(Data Definition Language):数据定义语言; 可以通过DDL语句对数据库或者表进行:创建、删除、修改等操作;
1.数据库操作
(1)创建数据库
CREATE DATABASE 数据库名;
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
- 方式3:判断数据库是否已经存在,不存在则创建数据库( 推荐 )
CREATE DATABASE IF NOT EXISTS 数据库名;
(2)使用数据库
SHOW DATABASES;
- 查看当前正在使用的数据库(使用全局函数 DATABASE() )
SELECT DATABASE();
SHOW TABLES FROM 数据库名;
SHOW CREATE DATABASE 数据库名;
USE 数据库名;
(3)修改数据库
ALTER DATABASE 数据库名 CHARACTER SET 字符集;
DROP DATABASE IF EXISTS 数据库名;
2.表操作
(1)创建表
# 格式:
CREATE TABLE [IF NOT EXISTS] 表名(
字段1, 数据类型 [约束条件] [默认值],
字段2, 数据类型 [约束条件] [默认值],
字段3, 数据类型 [约束条件] [默认值],
……
[表约束条件]
);
# 举例1:
CREATE TABLE emp (
-- int类型
emp_id INT,
-- 最多保存20个中英文字符
emp_name VARCHAR(20),
-- 总位数不超过15位
salary DOUBLE,
-- 日期类型
birthday DATE
);
# 举例2:
CREATE TABLE dept(
-- int类型,自增
deptno INT(2) AUTO_INCREMENT,
dname VARCHAR(14),
loc VARCHAR(13),
-- 主键
PRIMARY KEY (deptno)
);
使用 AS,将创建表和插入数据结合起来;
# 相当于复制employees表并取名为emp1
CREATE TABLE emp1 AS SELECT * FROM employees;
# 创建具有emp2表相相同字段的空表
CREATE TABLE emp2 AS SELECT * FROM employees WHERE 1=2;
# 创建一个具有某个表某些数据的表
CREATE TABLE dept80
AS
SELECT employee_id, last_name, salary*12 ANNSAL, hire_date
FROM employees
WHERE department_id = 80;
(2)查看表结构
SHOW CREATE TABLE 表名\G
(3)修改表
# 语法格式
ALTER TABLE 表名 ADD 【COLUMN】 字段名 字段类型 【FIRST|AFTER 字段名】;
# 举例:
ALTER TABLE dept80 ADD job_id varchar(15);
# 格式
ALTER TABLE 表名 MODIFY 【COLUMN】 字段名1 字段类型 【DEFAULT 默认值】【FIRST|AFTER 字段名
2】;
# 举例:
ALTER TABLE dept80 MODIFY last_name VARCHAR(30);
ALTER TABLE dept80 MODIFY salary double(9,2) default 1000;
# 注:对默认值的修改只影响今后对表的修改
# 格式
ALTER TABLE 表名 CHANGE 【column】 列名 新列名 新数据类型;
# 举例:
ALTER TABLE dept80 CHANGE department_name dept_name varchar(15);
# 格式
ALTER TABLE 表名 DROP 【COLUMN】字段名;
# 举例:
ALTER TABLE dept80 DROP COLUMN job_id;
# 方式一:
RENAME TABLE emp TO myemp;
# 方式二:
ALTER table dept RENAME [TO] detail_dept; -- [TO]可以省略
# 格式
DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, …, 数据表n];
# 举例:
DROP TABLE dept80;
# TRUNCATE语句不能回滚,而使用 DELETE 语句删除数据,可以回滚
TRUNCATE TABLE detail_dept;
# 对比:
SET autocommit = FALSE;
DELETE FROM emp2;
#TRUNCATE TABLE emp2;
SELECT * FROM emp2;
ROLLBACK;
SELECT * FROM emp2;
3.插入数据
(1)VALUES的方式插入数据
INSERT INTO departments VALUES (100, 'Finance', NULL, NULL);
INSERT INTO departments(department_id, department_name) VALUES (80, 'IT');
INSERT INTO emp(emp_id,emp_name)
VALUES (1001,'shkstart'),
(1002,'atguigu'),
(1003,'Tom');
(2)将查询结果插入到表中
INSERT INTO 目标表名
(tar_column1 [, tar_column2, …, tar_columnn])
SELECT
(src_column1 [, src_column2, …, src_columnn])
FROM 源表名
[WHERE condition]
INSERT INTO emp2
SELECT *
FROM employees
WHERE department_id = 90;
INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';
4.更新数据
UPDATE table_name
SET column1=value1, column2=value2, … , column=valuen
[WHERE condition]
UPDATE employees
SET department_id = 70
WHERE employee_id = 113;
- 省略 WHERE 子句,则表中的所有数据都将被更新
UPDATE copy_emp SET department_id = 110;
5.删除数据
DELETE FROM table_name [WHERE <condition>];
DELETE FROM departments
WHERE department_name = 'Finance';
DELETE FROM copy_emp;
|