DDL创建数据库
-- 直接创建数据库
CREATE DATABASE 数据库名;
-- 判断是否存在并创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名;
-- 创建数据库并指定字符集
CREATE DATABASE 数据库名 character set 字符集;
DDL查看数据库
-- 查看所有数据库
SHOW DATABASES;
-- 查看某个数据库的定义信息
SHOW CREATE DATABASE 数据库名;
DDL修改和删除数据库
-- 修改数据库字符集
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
-- 删除数据库
DROP DATABASE 数据库名;
DDL使用数据库
-- 查看正在使用的数据库
SELECT DATABASE();
-- 使用/切换数据库
USE 数据库名;
DDL创建表
CREATE TABLE 表名 (
字段名1 字段类型1,
字段名2 字段类型2
);
注意:
- 最后一个字段不加逗号
- 创建表的前提是先使用某个数据库
DDL查看表
-- 查看某个数据库中的所有表
SHOW TABLES;
-- 查看表结构
DESC 表名;
-- 查看创建表的SQL语句
SHOW CREATE TABLE 表名;
DDL删除表
-- 创建一个表结构相同的表
CREATE TABLE 表名 LIKE 其他表;
-- 直接删除表
DROP TABLE 表名;
-- 判断表是否存在并删除表
DROP TABLE IF EXISTS 表名;
-- 删除并重建表
TRUNCATE TABLE 表名;
DDL修改表结构
-- 添加表列
ALTER TABLE 表名 ADD 字段名/列名 类型;
-- 修改列类型
ALTER TABLE 表名 MODIFY 字段名 新的类型;
-- 修改列名
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型;
-- 删除列
ALTER TABLE 表名 DROP 字段名;
-- 修改表名
RENAME TABLE 旧表名 TO 新表名;
-- 修改字符集
ALTER TABLE 表名 CHARACTER SET 字符集;
DDL定义约束
主键约束
主键作用
用来唯一标识一条记录
创建主键
-- 创建表时添加主键
字段名 字段类型 PRIMARY KEY
-- 在已有表中添加主键
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
注意:
- 主键必须包含唯一的值
- 主键列不能包含NULL值
主键自增
字段名 字段类型 PRIMARY KEY AUTO_INCREMENT
注意:
AUTO_INCREMENT
表示自动增长(字段类型必须是整数类型)- DELETE 删除表中的数据,但不重置AUTO_INCREMENT的值
- TRUNCATE 摧毁表,重建表,AUTO_INCREMENT重置为1
唯一约束
唯一约束的作用
在这张表中这个字段的值不能重复
创建唯一约束
-- 创建表时添加唯一约束
字段名 字段类型 UNIQUE
-- 在已有表中添加唯一约束
ALTER TABLE 表名 ADD UNIQUE(字段名);
注意:
UNIQUE 多个null不算重复
非空约束
非空约束的作用
这个字段必须设置值,不能是NULL
创建非空约束
-- 创建表时添加非空约束
字段名 字段类型 NOT NULL
-- 在已有表中添加非空约束
ALTER TABLE 表名 MODIFY 列名 字段类型 NOT NULL;
注意:
主键约束和唯一约束并且非空的区别:
- 主键约束可以实现主键自增
- 唯一约束并且非空不能实现主键自增
默认值
默认值的作用
往表中添加数据时,如果不指定这个字段的数据,就使用默认值
创建默认值
-- 创建表时添加默认值
字段名 字段类型 DEFAULT 默认值
-- 在已有表中添加默认值
ALTER TABLE 表名 MODIFY 列名 字段类型 DEFAULT 默认值;
插入默认值
INSERT INTO 表名(test) VALUES(DEFAULT);
INSERT INTO 表名(name) VALUES('张三');
注意:
- 插入数据时,不选择向有默认值的列插入数据,会自动填入默认值,非空约束不报错
- 插入数据时,向有默认值的列插入数据,使用DEFAULT表示默认值,填NULL不会自动填入默认值,非空约束报错
外键约束
外键约束的作用
维护表之间的关系
创建外键约束
-- 创建表时添加外键约束
字段名 字段类型,
CONSTRAINT 外键约束名称 FOREIGN KEY(当前表中的列名) REFERENCES 被引用表名(被引用表的列名);
-- 在已有表中添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(当前表中的列名) REFERENCES 被引用表名(被引用表的列名);
注意:
- CONSTRAINT 外键约束名称 可以不写
- mysql会自动生成外键约束名称
外键的级联
级联概念
在修改和删除主表的主键时,同时更新或删除从表的外键值,称为级联操作
ON UPDATE CASCADE
-- 级联更新,主键发生更新时,外键也会更新
ON DELETE CASCADE
-- 级联删除,主键发生删除时,外键也会删除
创建级联
-- 创建表时添加外键级联
CONSTRAINT 外键约束名称 FOREIGN KEY(当前表中的列名) REFERENCES 被引用表名(被引用表的列名) ON UPDATE CASCADE ON DELETE CASCADE;
-- 在已有表中添加外键级联
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(当前表中的列名) REFERENCES 被引用表名(被引用表的列名);
注意:
在已有表中添加外键级联,如果已有外键需要先将外键删除
DDL删除约束
删除主键约束
ALTER TABLE 表名 DROP PRIMARY KEY;
删除唯一约束
ALTER TABLE 表名 DROP INDEX 索引名
删除非空约束
ALTER TABLE 表名 MODIFY 列名 字段类型;
注意:
删除非空约束只需修改列属性即可
删除默认值
ALTER TABLE 表名 MODIFY 列名 字段类型;
注意:
删除默认值只需修改列属性即可
删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名;