目录
1.标识符命名规则
数据库名、表名不得超过30个字符,变量名限制为29个
必须只能包含 A–Z, a–z, 0–9, _共63个字符
数据库名、表名、字段名等对象名中间不要包含空格
同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名 必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,请在SQL语句中使 用`(着重号)引起来
保持字段名和类型的一致性:在命名字段并为其指定数据类型的时候一定要保证一致性,假如数据 类型在一个表里是整数,那在另一个表里可就别变成字符型了
2.MySQL中的数据类型
3. 创建和管理数据库
3.0创建数据库(DATABASE)
方式1:创建数据库
CREATE DATABASE 数据库名 ;
方式2:创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
方式3:判断数据库是否已经存在,不存在则创建数据库( 推荐 )
CREATE DATABASE IF NOT EXISTS 数据库名 CHARACTER SET 字符集;;
注意:DATABASE 不能改名。一些可视化工具可以改名,它是建新库,把所有表复制到新库,再删 旧库完成的。
3.1使用数据库
查看当前所有的数据库:SHOW DATABASES;
查看当前正在使用的数据库:SELECT DATABASE();
查看指定库下所有的表:SHOW TABLES FROM 数据库名;
查看数据库的创建信息:SHOW CREATE DATABASE 数据库名;
使用/切换数据库:USE 数据库名;
注意:要操作表格和数据之前必须先说明是对哪个数据库进行操作,否则就要对所有对象加上“数 据库名.”。
3.2修改数据库
更改数据库字符集:ALTER DATABASE 数据库名 CHARACTER SET 字符集;
删除指定的数据库:DROP DATABASE IF EXISTS 数据库名;
4.创建和管理表
4.0 创建表
必须具备: CREATE TABLE权限 存储空间
语法格式:CREATE TABLE [IF NOT EXISTS] 表名(
字段1, 数据类型 [约束条件] [默认值], 字段2, 数据类型 [约束条件] [默认值], 字段3, 数据类型 [约束条件] [默认值], ……
[表约束条件]
);
创建时必须指定: 表名 列名(或字段名),数据类型,长度
可选指定: 约束条件 默认值
创建表举例1:
-- 创建表
CREATE TABLE emp (
emp_id INT,
emp_name VARCHAR(20),
salary DOUBLE,
birthday DATE
);
4.1复制表
使用 AS subquery 选项,将创建表和插入数据结合起来
创建表emp1并和employees表结构相同(数据也复制过去)
CREATE TABLE emp1
AS
SELECT * FROM employees;
创建表emp2并和employees表结构相同(只复制表结构,不复制数据)
CREATE TABLE emp2
AS
SELECT * FROM employees
WHERE 1=2; -- 创建的emp2是空表,因为employees不存在1=2的条件
例如:创建表dept80并将employees表中的last_name, salary*12 ANNSAL, hire_date结构和数据复制过去
CREATE TABLE dept80
AS
SELECT last_name, salary*12 ANNSAL, hire_date
FROM employees
4.2查看表
SHOW CREATE TABLE
4.3 修改表
修改表指的是修改数据库中已经存在的数据表的结构。
使用 ALTER TABLE 语句可以实现:
向已有的表中添加列
修改现有表中的列
删除现有表中的列
重命名现有表中的列
1 追加一个列:ALTER TABLE 表名 ADD 【COLUMN】 字段名 字段类型 【FIRST|AFTER 字段名】;
举例:ALTER TABLE dept80 ADD job_id varchar(15);
2 修改一个列:可以修改列的数据类型,长度、默认值和位置
ALTER TABLE 表名
MODIFY 【COLUMN】 字段名1 字段类型 【DEFAULT 默认值】【FIRST|AFTER 字段名 2】;
举例:修改类型长度
ALTER TABLE dept80
MODIFY last_name VARCHAR(30);
3 重命名一个列:ALTER TABLE 表名 CHANGE 【column】 列名 新列名 新数据类型;
举例:
ALTER TABLE dept80
CHANGE department_name dept_name varchar(15);
4 删除一个列:ALTER TABLE 表名 DROP 【COLUMN】字段名
5.修改表名:使用RENAME
RENAME TABLE 表名 TO 新表名;
5.删除表
在MySQL中,当一张数据表 没有与其他任何数据表形成关联关系 时,可以将当前数据表直接删除。 数据和结构都被删除 所有正在运行的相关事务被提交 所有相关索引被删除。
DROP TABLE [IF EXISTS] 数据表1 [, 数据表2, …, 数据表n];
举例:
DROP TABLE dept80;
DROP TABLE 语句不能回滚
6. 清空表
删除表中所有的数据 释放表的存储空间
TRUNCATE TABLE 表名;
TRUNCATE语句不能回滚,而使用 DELETE 语句删除数据,可以回滚
可回滚举例
不可回滚举例
最后查不到表
阿里巴巴《Java开发手册》之MySQL字段命名
数据备份重要性
MySQL8新特性—DDL的原子化
在MySQL 8.0版本中,InnoDB表的DDL支持事务完整性,即 DDL操作要么成功要么回滚 。DDL操作回滚日志 写入到data dictionary数据字典表mysql.innodb_ddl_log(该表是隐藏的表,通过show tables无法看到) 中,用于回滚操作。通过设置参数,可将DDL操作日志打印输出到MySQL错误日志中。
当存在book1,不存在book2时,下面语句不在只删除book1后提示 ERROR 1051 (42S02): Unknown table 'mytest.book2'而是 book1和book2都无法删除。
mysql> DROP TABLE book1,book2;