DDL(data definition language) 针对数据库、表的创建、删除、修改等操作
一、创建数据库
------------------------------------创建数据库库--------------------------------------
语法:
create database 数据库名 default character set 字符集 collate 排序规则;
# 删除数据库
drop database 数据库名;
create database db_lzy default character set utf8mb4 collate utf8mb4_general_ci;
drop database db_lzy;
二、创建表
创建表
create table 表名(
字段名 类型(长度) 是否为null 约束条件 注释,
字段名 类型(长度) 是否为null default 默认值 [auto_increment 主键自动递增] comment '注释',
字段名 类型(不写使用默认长度) 是否为null default默认值 comment '注释',
。。。
PRIMARY KEY(主键)
);
CREATE TABLE t_user(
id int ( 11 ) not null auto_increment comment '主键' ,
name VARCHAR ( 20 ) DEFAULT null comment '姓名' ,
sex TINYINT ( 1 ) DEFAULT 1 comment '性别1男0女' ,
create_time datetime default now ( ) comment '创建时间' ,
modify_time datetime DEFAULT null comment '修改时间' ,
PRIMARY key ( id)
) ;
desc t_user;
三、复制表信息
#复制表(先选择数据库)
复制表不会复制约束条件,需要自己重新添加
create table 表名 as select 字段列表 from 已有表; #会将数据一起复制过来
create table 表名 as select 字段列表 from 已有表 where 1!=1;
create table 表名 as select 字段列表 from 已有表 where 1=0; # 只复制表结构,没有数据
复制表以及约束条件但是不复制数据
create table 表名 like 已有表;
insert into t_user( name, sex, create_time) values ( '张三' , 1 , now ( ) ) ;
insert into t_user( id, name, sex, create_time) values ( 2 , '李四' , 0 , now ( ) ) ;
create table t_user_copy as select * from t_user;
create table t_user_copy2 as select * from t_user where 1 = 0 ;
CREATE TABLE t_user_copy3 like t_user;
desc t_user_copy;
desc t_user_copy2;
desc t_user_copy3;
四、删除表
drop table 表名; #删除表
truncate table 表名; # 清空表
1 / 清空表,只清空数据会保留一些状态(自增的状态,再次添加 是接着以前的自增插入)
delete from t_user;
2 / 清空表,清空数据以及状态(相当于恢复出场状态)
truncate table t_user;
五、修改表结构
######################################修改表结构#################
# 修改表名:rename table 原表名 to 新表名;
# 修改列名:alter table 表名 change 原字段名 新字段名 字段类型 约束条件;
# 修改类型:alter table 表名 modify 字段名称 字段类型 [完整性约束条件];
# 添加列 :alter table 表名 add 字段 类型 约束;
# 删除列 :alter table 表名 drop column 字段;
RENAME table t_user to t_user_original;
alter table t_user_original change sex age int ( 3 ) DEFAULT 0 comment '年龄' ;
alter table t_user_original modify age varchar ( 3 ) DEFAULT '0' not null comment '注释' ;
alter table t_user_original add job datatime DEFAULT NULL ;
alter table t_user_original drop column job;
六、综合练习
CREATE table t_student(
s_id tinyint ( 11 ) not null auto_increment comment '主键' ,
s_name VARCHAR ( 20 ) DEFAULT null comment '名字' ,
s_sex tinyint ( 1 ) DEFAULT null COMMENT '性别' ,
create_time datetime DEFAULT now ( ) comment '创建时间' ,
is_valid TINYINT ( 1 ) DEFAULT 1 comment '是否有效' ,
primary key ( s_id)
) ;
CREATE table t_teacher(
t_id tinyint ( 11 ) not null auto_increment comment '主键' ,
t_name VARCHAR ( 20 ) DEFAULT null comment '名字' ,
t_sex tinyint ( 1 ) DEFAULT null COMMENT '性别' ,
create_time datetime DEFAULT now ( ) comment '创建时间' ,
is_valid TINYINT ( 1 ) DEFAULT 1 comment '是否有效' ,
primary key ( t_id)
) ;
CREATE TABLE t_t_s(
t_id tinyint ( 1 ) not null comment '学生id' ,
s_id tinyint ( 1 ) not null comment '老师id' ,
PRIMARY key ( t_id, s_id)
) ;
alter table t_t_s add constraint fk_s_id foreign key ( s_id) REFERENCES t_student( s_id) ;
alter table t_t_s add constraint fk_t_id foreign key ( t_id) references t_teacher( t_id) ;
insert into t_student( s_name, s_sex, create_time)
VALUES ( '张三' , 1 , now ( ) ) , ( '李四' , 0 , now ( ) ) , ( '王五' , 1 , now ( ) ) , ( '赵六' , 0 , now ( ) ) , ( '田七' , 1 , now ( ) ) ;
insert into t_teacher( t_name, t_sex, create_time)
VALUES ( '周老师' , 1 , now ( ) ) , ( '吴老师' , 0 , now ( ) ) , ( '郑老师' , 1 , now ( ) ) , ( '王老师' , 0 , now ( ) ) , ( '赵老师' , 1 , now ( ) ) ;
insert into t_t_s( s_id, t_id)
VALUES ( 1 , 1 ) , ( 2 , 1 ) , ( 3 , 1 ) , ( 1 , 2 ) , ( 3 , 2 ) , ( 4 , 2 ) , ( 1 , 3 ) , ( 2 , 3 ) , ( 3 , 3 ) , ( 4 , 3 ) ;
select t_id from t_teacher where t_name= '周老师' ;
select t_id from t_t_s where s_id = ( select t_id from t_teacher where t_name= '周老师' ) ;
select s_name from t_student where s_id in (
select t_id from t_t_s where s_id = (
select t_id from t_teacher where t_name= '周老师' )
) ;
select s_name from t_student s
inner join t_t_s tt on s. s_id = tt. s_id
inner join t_teacher t on tt. t_id = t. t_id
where t. t_name = '周老师' ;
select s_name from t_student s
left join t_t_s tt on s. s_id = tt. s_id
left join t_teacher t on tt. t_id = t. t_id
where t. t_name = '周老师' ;
select * from t_student s
right join t_t_s tt on s. s_id = tt. s_id
right join t_teacher t on tt. t_id = t. t_id
where t. t_name = '周老师' ;