Data Define Language用于对数据库和表的管理和操作
库的管理
创建库
CREATE DATABASE 库名 default character set = 'utf8'; 创建库,设置字符集,不然的话给表设置默认值为中文时会报错
这样的话,如果库名已经存在时会报错,可以这样写:
CREATE DATABASE IF NOT EXISTS 库名; 通过Java调用,容错性强一些
删除库
DROP DATABASE 库名;
同样的:
DROP DATABASE IF EXISTS 库名;
表的管理
创建表
CREATE TABLE 表名(
字段名 字段类型 【字段约束】,
字段名 字段类型 【字段约束】,
字段名 字段类型 【字段约束】
);
一般来说也需要加上IF EXISTS
DESC 表名; 查看表的结构
修改表
一般就是在表内数据为空的时候用的,其他时间不经常用
ALTER TABLE 表名 ADD|MODIFY|CHANGE|DROP COLUMN 字段名 字段类型 字段约束;
改表名
ALTER TABLE 旧表名 RENAME TO 新表名;
改字段名
ALTER TABLE 表名 CHANGE COLUMN 旧字段名 新字段名 TIMESTAMP UNIQUE;数据类型,字段约束可省
添加字段:
ALTER TABLE 表名 ADD COLUMN 新字段名 TIMESTAMP NOT NULL;
修改字段类型
ALTER TABLE 表名 MODIFY COLUMN 字段名 TIME NOT NULL;
删除字段
ALTER TABLE 表名 DROP COLUMN 字段名;
删除表
DROP TABLE IF EXISTS 表名;
复制表
直接复制表的结构,新表和旧表在一个数据库内
CREATE TABLE 新表名 LIKE 被复制表名;
复制表的结构加内容
CREATE TABLE 新表名 SELECT * FROM 被复制表名;
复制表内某几列的结构,不复制数据
CREATE TABLE 新表名
SELECT 列名
FROM 表名
WHERE 1=2; 不一定非要写这个式子,随意一个恒不成立的式子即可
数据类型
- 整形
- int 整型,还有同胞兄弟:tinyint,smallint,bigint
数值范围不同 - double/float 例:double(5,2) 5表示数字个数,2表示小数位个数,这个数最大为999.99,可省
- decimal 用在钱的方面,精度比前两者高
- 字符串
- text 字符串类型,存储较长文本
- char 固定长度字符串类型,开辟空间固定,char(10)长度固定为10个字节,默认为1。char速度快
- varchar 可变长度字符串,开辟空间根据实际所需,varchar(10),长度必须写
- 时间
- date :yyyy-MM-dd
- time :hh:mm:ss
- timestamp / datetime: yyyyMMdd hhmmss
- timestamp:范围 1970-1-1~2038-12-31,四字节
- datetime:范围 1900-1-1 ~ 无穷,八字节
- 二进制
- blob 一般用来存储图片
常见约束
用于限制表中字段数据,进一步保证数据表中的数据是一致的,可靠的,准确的。
- NOT NULL 非空:用于限制该字段为必填项
- DEFAULT 默认:如果用户没有填值,则填入默认值
- PRIMARY KEY 主键:限制该字段的值不能重复,并且会自动加上非空,一个表只能有一个主键,当设置多列为主键时,会将这多列看作一个主键。
- UNIQUE 唯一:用于限制该字段值不能重复,可以为空,并且可以有多列设置非空
- CHECK 检查:用于限制该字段的值必须满足指定条件,跟where后面语句类似,MySQL不支持。
- FOREIGN KEY 外键:限制两个表的关系,要求外键列表的值必须来自主表的关联列,要求:从表的关联列必须和主表关联列类型一致,意思一样,名称无所谓。主表关联列必须是主键。
- AUTO_INCREMENT自增长列。必须设置在主键或者唯一键上,必须为数值型,且一个表只能有一个
用法
每列可以添加多个约束
CREATE TABLE lcytql(
ID INT PRIMARY KEY, 主键
mingzi CHAR(5) UNIQUE, 唯一
email VARCHAR(20) NOT NULL, 非空
majorid INT,
CONSTRAINT 别名(可不写) FOREIGN KEY (设置外键的列) REFERENCES 主表名(对应的列) 外键,需要另起一行添加
)