创建数据库
创建一个保存员工信息的数据库 create database employees
;
相关其他命令
show databases;
查看当前所有数据库
use employees;
“使用”一个数据库,使其作为当前数据库
命名规则
数据库名不得超过30个字符,变量名限制为29个
必须只能包含 A–Z, a–z, 0–9, _共63个字符
不能在对象名的字符间留空格
必须不能和用户定义的其他对象重名
必须保证你的字段没有和保留字、数据库系统或常用方法冲突
保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了
CREATE TABLE 语句
必须具备:
CREATE TABLE权限
存储空间
必须指定:
表名
列名, 数据类型, 尺寸
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][, …]);
创建表
语法
CREATE TABLE dept
(deptno INT(2),
dname VARCHAR(14),
loc VARCHAR(13));
确认
DESCRIBE dept
常用数据类型
INT 使用4个字节保存整数数据
CHAR(size) 定长字符数据。若未指定,默认为1个字符,最大长度255
VARCHAR(size) 可变长字符数据,根据字符串实际长度保存,必须指定长度
FLOAT(M,D) 单精度,M=整数位+小数位,D=小数位。 D<=M<=255,0<=D<=30,默认M+D<=6
DOUBLE(M,D) 双精度。D<=M<=255,0<=D<=30,默认M+D<=15
DATE 日期型数据,格式’YYYY-MM-DD’
BLOB 二进制形式的长文本数据,最大可达4G
TEXT 长文本数据,最大可达4G
**创建表** CREATE TABLE emp ( #int类型,自增 emp_id INT AUTO_INCREMENT, #最多保存20个中英文字符 emp_name CHAR (20), #总位数不超过15位 salary DOUBLE, #日期类型 birthday DATE, #主键 PRIMARY KEY (emp_id) ) ;
使用子查询创建表
使用 AS subquery 选项,将创建表和插入数据结合起来
指定的列和子查询中的列要一一对应
通过列名和默认值定义列
CREATE TABLE table [(column, column...)] AS subquery;
使用子查询创建表举例
CREATE TABLE dept80 AS SELECT employee_id, last_name, salary*12 ANNSAL, hire_date FROM employees WHERE department_id = 80;
ALTER TABLE 语句
使用 ALTER TABLE 语句可以实现:
向已有的表中添加列
ALTER TABLE dept80 ADD job_id varchar(15);` **修改现有表中的列** 可以修改列的数据类型, 尺寸和默认值 对默认值的修改只影响今后对表的修改 ``ALTER TABLE dept80 MODIFY (last_name VARCHAR(30));
ALTER TABLE dept80 MODIFY (salary double(9,2) default 1000);
丢弃现有表中的列
使用 DROP COLUMN 子句丢弃不再需要的列.
ALTER TABLE dept80 DROP COLUMN job_id;
重命名现有表中的列
使用 CHANGE old_column new_column dataType子句重命名列
ALTER TABLE dept80 *CHANGE department_name dept_name varchar(15);
丢弃表*
数据和结构都被删除
所有正在运行的相关事务被提交
所有相关索引被删除
DROP TABLE 语句不能回滚
DROP TABLE dept80;
清空表
TRUNCATE TABLE 语句:
删除表中所有的数据
释放表的存储空间
TRUNCATE TABLE detail_dept;
TRUNCATE语句不能回滚
可以使用 DELETE 语句删除数据,可以回滚
对比:
delete from emp2;
select * from emp2;
rollback;
select * from emp2;
改变对象的名称
执行RENAME语句改变表, 视图的名称
必须是对象的拥有者
ALTER table dept
RENAME TO detail_dept;
数据处理之增删改
数据操纵语言
DML(Data Manipulation Language – 数据操纵语言) 可以在下列条件下执行:
向表中插入数据
修改现存数据
删除现存数据
事务是由完成若干项工作的DML语句组成的
插入数据
使用 INSERT 语句向表中插入数据。 INSERT INTO table [(column [, column...])] VALUES (value [, value...]); 为每一列添加一个新值。 按列的默认顺序列出各个列的值。 在 INSERT 子句中随意列出列名和他们的值。 字符和日期型数据应包含在单引号中。
INSERT INTO departments(department_id, department_name, manager_id, location_id) VALUES (70, 'Public Relations', 100, 1700);
INSERT INTO employees(employee_id,last_name,email,hire_date,job_id)
向表中插入空值
隐式方式: 在列名表中省略该列的值。
INSERT INTO departments (department_id, department_name )
VALUES (30, ‘Purchasing’);
显示方式: 在VALUES 子句中指定空值。
INSERT INTO departments
VALUES (100, ‘Finance’, NULL, NULL);
插入指定的值
NOW()函数:记录当前系统的日期和时间。
INSERT INTO employees (employee_id,
first_name, last_name,
email, phone_number,
hire_date, job_id, salary,
commission_pct, manager_id,
department_id)
VALUES (113,
‘Louis’, ‘Popp’,
‘LPOPP’, ‘515.124.4567’,
NOW(), ‘AC_ACCOUNT’, 6900,
NULL, 205, 100);
从其它表中拷贝数据
在 INSERT 语句中加入子查询。
不必书写 VALUES 子句。
子查询中的值列表应与 INSERT 子句中的列名对应
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%';
*更新数据*
UPDATE 语句语法 使用 UPDATE 语句更新数据。 UPDATE table SET column = value [, column = value, ...] [WHERE condition];
可以一次更新多条数据。
如果需要回滚数据,需要保证在DML前,进行设置:SET AUTOCOMMIT = FALSE;
使用 WHERE 子句指定需要更新的数据。
UPDATE employees SET department_id = 70 WHERE employee_id = 113;
如果省略 WHERE 子句,则表中的所有数据都将被更新。
UPDATE copy_emp
SET department_id = 110;
更新中的数据完整性错误
UPDATE employees SET department_id = 55 WHERE department_id = 110; 不存在 55 号部门
删除数据
使用 DELETE 语句从表中删除数据。