表操作
表的创建表的修改修改列名修改列类型或约束添加新列删除列修改表名
表的删除删除表数据及结构删除表数据使用DELETE语法使用TRUNCATE语法
表的复制仅仅复制表结构复制表的结构+数据复制全部数据复制部分数据仅仅复制部分结构跨库复制表结构
查看表结构表约束六大约束分类列级约束表及约束主键和唯一键对比外键修改表时添加约束表及约束和列级约束标识列
外键删除方式级联删除级联删除置空
表的创建
CREATE TABLE IF NOT EXISTS 表名(
字段名 类型 【字段约束】,
字段名 类型 【字段约束】,
字段名 类型 【字段约束】,
...
);
表的修改
修改列名
ALTER TABLE 表名 CHANGE COLUMN 旧字段名 新字段名 字段类型;
修改列类型或约束
ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型|约束;
添加新列
ALTER TABLE 表名 ADD COLUMN 字段名 字段类型;
删除列
ALTER TABLE 表名 DROP COLUMN 字段名;
修改表名
ALTER TABLE 表名 RENAME TO 新表名;
表的删除
删除表数据及结构
DROP TABLE IF EXISTS 表名;
删除表数据
使用DELETE语法
DELETE FROM 表名 【where 要删除数据的过滤条件】;
使用TRUNCATE语法
TRUNCATE TABLE 表名;
表的复制
仅仅复制表结构
CREATE TABLE 表名 LIKE 要复制的表名;
复制表的结构+数据
复制全部数据
CREATE TABLE 表名
SELECT * FROM 要复制的表名;
复制部分数据
CREATE TABLE 表名
SELECT 字段1,... FROM 要复制的表名
where 要复制的行;
仅仅复制部分结构
CREATE TABLE 表名
SELECT 字段1,... FROM 要复制的表名
where 永远不成立的条件;
跨库复制表结构
CREATE TABLE 表名
SELECT 字段1,... FROM 库名.要复制库中的表名
where 要复制的数据条件;
查看表结构
DESC 表名;
表约束
六大约束
NOT NULL:非空约束,保证该字段值不为空DEFAULT:默认,用于保证该字段有默认值PRIMARY KEY:主键,用于保证该字段的值具有唯一性切不为空UNIQUE:唯一,保证该字段值具有唯一性,可以为空CHECK:检查约束【MySQL不支持】FOREIGN KEY:外键,限制两个表的关系,保证从表中的添加的外键约束来自主表中的某个值
分类
列级约束
写在字段后面除了外键约束外其他约束都可以举例
create table student(
id int primary key,
name varchar(20) not null,
gender char(1) check(gender in('男',‘女’)), //MySQL不支持check,但语法不会报错
seat int unique,
age int default 18,
majorId int reference major(id) //外键列级约束上语法支持但是并不会产生真正效果
);
create table major(
id int primary key,
major_name varchar(20)
);
表及约束
写在整个定义完字段的下一行除了not null 和 default其他约束都可以语法:【constraint 约束名】 约束类型(字段名) 不起约束名的话会有默认名,但是主键不管如何都会使用默认名举例
create table student(
id int,
name varchar(20),
gender char(1),
seat int,
age int,
majorId int,
constraint pk primary key(id),
constraint uk unique(seat),
constraint ck check(gender = '男' or '女'),
constraint fk_student_major foreign key(majorid) references major(id)
);
create table major(
id int primary key,
major_name varchar(20)
);
主键和唯一键对比
类型是否唯一是否允许为空一个表允许定义多少是否允许组合,不推荐使用
主键是否只允许一个允许唯一键是允许一个为空可以有多个允许
外键
要求在从表设置外键关系从表中的外键列的类型必须引用自主表的关联列的类型要求一致或兼容,名称无要求主表的关联列必须是一个key(主键或者唯一键)插入数据时必须先插入主表再插入从表,删除时先删除从表再删除主表
修改表时添加约束
添加列级约束:alter table 表名 modify column 字段名 字段类型 约束添加标记约束:alter table 表名 add 【constraint 约束名】约束类型(字段名) 【外键的引用】
表及约束和列级约束
约束类型位置支持的约束类型是否可以起别名
列级约束列的后面除check和外键都支持不可以表级约束所有列的下面除了非空、默认、check其他都支持可以
标识列
MySQL中自增长的都叫标识列特点
表示列不一定非要和主键搭配,但要求是一个key一个表最多只允许有一个标识列标识列的类型只能是数值型,一般都是整形标识列可以通过set auto_increment_increment=n;设置步长也可以通过手动插入设置初始值
外键删除方式
解决因为外键存在不能删除的问题
级联删除
删除主表的同时删除从表的关联行设置级联删除on delete cascade
alter table 表名 add constraint 外键名 foreign key(设置外键的字段名) references 关联表名(关联表key) on delete cascade;
级联删除置空
删除主表的同时将从表的关联行的对应字段值设置为null设置级联删除on delete cascade
alter table 表名 add constraint 外键名 foreign key(设置外键的字段名) references 关联表名(关联表key) on delete set null;