第十章 创建和管理表
1.1 一条数据的存储过程
创建数据库->确认字段->创建数据表->插入数据
1.2 标识符遵守一定的规则
数据库名,表名不超过30个字符,变量名为29个
只能在A-Z,a-z,0-9,_ 总共63个
相同字段数据类型的一致性
1.3 MySql中数据类型
2.创建和管理数据库
方式1:创建数据库
CREATE DATABASE test1 ;
SHOW CREATE DATABASE test1
方式2:创建数据库并指定字符集
CREATE DATABASE test2 CHARACTER SET 字符集
方式3:
判断数据库是否存在,不存在则创建
CREATE DATABASE IF NOT EXISTS test3;
DATABASE不能改名,一些可视化工具可以改名,它是创建新库,把所有的表复制到
新库,再删旧库完成的。
2.2管理数据库
查看当前连接中的数据库都有哪些
SHOW DATABASES;
切换数据库
USE mytest2
查看当前数据库中保存的表
SHOW TABLES
查看当前使用的数据库
SELECT DATABASE() FROM DUAL;
查看指定数据库下保存的数据表
SHOW TABLES FROM mysql;
2.3修改数据库
更改数据库的字符集
ALTER DATABASE 数据库名CHARACTER SET 字符集
ALTER DATABASE test1 CHARACTER SET 'gbk';
2.4删除数据库
方式1:
如果存在数据库,则删除成功,如果不存在,则会报错
DROP DATABASE 数据库名
DROP DATABASE test2;
SHOW DATABASES;
方式2:
如果存在数据库,则删除成功,如果不存在,则不会报错
DROP DATABASE IF EXISTS 数据库名;
3.如何创建表
USE atguigudb
CREATE TABLE
方式1:
需要用户具备创建表的权限
CREATE TABLE IF NOT EXISTS mytemp1(id INT,
emp_name VARCHAR(15),使用varchar来定义字符串时,必须使用varchar时指明其长度
hire_date DATE
);
SHOW TABLES;
SELECT * FROM mytemp1;
DESC mytemp1;
SHOW CREATE TABLE mytemp1;
方式2:基于现有表创建一个表
查询字段的别名 可以作为新创建的表的字段的名称
CREATE TABLE mytemp2
AS
SELECT employee_id,last_name,salary
FROM employees;
SHOW CREATE TABLE mytemp2;
DESC mytemp2;
练习1:创建一个表employee_copy ,实现对employees表的复制 ,包括表数据的复制
白手起家形式
CREATE TABLE IF NOT EXISTS employee_copy
AS
SELECT * FROM employees;
SHOW CREATE TABLE employee_copy;
DESC employee_copy;
SELECT * FROM employee_copy;
练习2:创建一个表employee_blank,实现对employees表的复制,不包括表的数据
富二代模式
CREATE TABLE IF NOT EXISTS employee_blank
AS
SELECT *
FROM employees
WHERE department_id>10000;
SELECT * FROM employee_blank;
3.1修改表
添加一个字段
ALTER TABLE mytemp1
ADD salary DOUBLE(10,2);默认添加到最后的位置
DESC mytemp1;
ALTER TABLE mytemp1
ADD email VARCHAR(45);
ALTER TABLE mytemp1
ADD phone_number VARCHAR(20) AFTER emp_name;
ALTER TABLE mytemp1
MODIFY emp_name VARCHAR(45) DEFAULT 'aaa';
修改一个字段 数据类型,长度,默认值
ALTER TABLE mytemp1
MODIFY emp_name VARCHAR(45);
重命名一个字段
ALTER ALTER mytemp1
CHANGE salary month_salary DOUBLE(10,2);
删除一个字段
ALTER TABLE mytemp1
DROP COLUMN email;
重命名表
方式1:
RENAME TABLE mytemp1 to mytemp2;
方式2:
ALTER TABLE mytemp1
RENAME TO mytemp3;
4.清空表
清空表表示清空表中所有的数据,但是表结构保留
SELECT * FROM employee_copy;
TRUNCATE TABLE employee_copy;
SELECT * FROM employee_copy;
DESC employee_copy;
delete,drop,truncate 都有删除表的作用,区别在于:
1、delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除,打个比方,delete 是单杀,truncate 是团灭,drop 是把电脑摔了。
2、delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和 drop 是 DDL 语句,操作完马上生效,不能回滚,打个比方,delete 是发微信说分手,后悔还可以撤回,truncate 和 drop 是直接扇耳光说滚,不能反悔。
3、执行的速度上,drop>truncate>delete,打个比方,drop 是神舟火箭,truncate 是和谐号动车,delete 是自行车。
4.DCL中COMMIT和ROLLBACK
COMMIT:提交数据。一旦执行commit,则数据就被永久保存到数据库中,意味着数据不可以回滚
ROLLBACK:回滚数据。一旦执行ROLLBACK,则可以实现数据的回滚。回滚到最后执行的COMMIT之后
SELECT * FROM mytemp2;
DELETE FROM mytemp2;
SELECT * FROM mytemp2;
ROLLBACK;