欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL语言分类——DDL

程序员文章站 2022-04-09 20:07:47
DDL的全称Data Definition Language,即数据定义语言 DDL的语法有:create、alter、drop、rename、truncate。对此做一个详细的解释: create (创建) create 可以创建数据库 create 可以创建表格 创建表格的语法:方括号的表示可以 ......

ddl的全称data definition language,即数据定义语言

  ddl的语法有:create、alter、drop、rename、truncate。对此做一个详细的解释:

create (创建)

  create 可以创建数据库

# 创建数据库
create database database_name;

# 然后进入该数据库
use database_name;

  create 可以创建表格

    创建表格的语法:方括号的表示可以省略

      create [temporary] table [if not exits] table_name(

        column_name data_type [not null | null] [default default_value] [auto_increment] [comment ""] [constraints约束条件],

      );

    [if not exits] 如果新建表不存在,则会创建新表;如果存在,不会报错,数据也不会被覆盖

create table if not exits table_name(
    id int,
    name varchar(20)
);

    [temporary] 创建临时表 用于存储临时计算的数据,生命周期只限于本次连接

create temporary table table_name(
    id int key,
    name varchar(20)
);

 

    [not null | null] 字段值是否可以为空; 如果这个字段值设置不为空,后面还有默认值,那么在插入时当前字段不插入数据,会按照后面的默认值填入

create table null_test(
    account varchar(20) not null,
    password varchar(32) not null,
    gender enum("0", "1") null
);

insert into null_test(account) values("zhangsan");    # error 因为password不能为空
insert into null_test(account, password) values("zhangsan", "abcdef");

  [default default_value] 字段值的默认值是什么,建议项目中表格的每一列都给默认值(以防用户不填数据)

create table default_test(
    id int not null default 0,
    address varchar(50) default "",
    gender enum("0", "1")  null default "0"
);

# 首先id不为空,插入时也没有写,在插入的过程中,会将默认值插进去
insert into default_test(address, gender) values ("kunshan", "1");

    [auto_increment] 字段值自动增加,一般适用于主键而且是int类型,默认从1开始

# auto_increment的三种表现形式
create table auto_test(
    id int primary key auto_increment,
    name varchar(20) not null
);

create table auto_test(
    id int primary key auto_increment,
    name varchar(20) not null
)auto_increment=1;

create table auto_test(
    id int primary key auto_increment,
    name varchar(20) not null
)auto_increment=2016211001000;

    [comment ""] 给表格字段添加备注

create table comment_test(
    id int comment "标号"
);

  constraints约束:

    约束是用来限制和保护表的数据符合我们定义的条件

约束的表现形式:

    列级约束 

      写在列的后面,针对某个列的约束

        • create table student(id number primary key,name varchar(10));

    表级约束

      写在建表语句的后边,针对某个列的约束

        • create table student(id number , name varchar(10),primary key(id)); 

    列级约束和表级约束作用相同,但是表级约束功能更强一些,具体见后边

    如果是表级约束,若涉及联合唯一或者是联合主键,只有联合的所有的字段值一样的才会报错(局部可以重复,全局不可以重复)

    not null 上面已有介绍

    unique   字段值唯一

create table unique_test(
    id int,
    stuno int not null unique  # 列级约束
);

create table unique_test(
    id int,
    stuno int not null unique  default 0 # 只能默认插入一次
);

create table unique_test(
    id int,
    stuno int not null,
    unique(stuno)      # 表级约束
);

create table unique_test(
    id int,
    stuno in not null,
    unique(id, stuno)   # 表级约束---联合约束唯一
);

# 联合唯一:单个列可以重复,整体不能重复; 条件必须时表级约束,同时重复才会报错

    primary key(表格的主键)    非空 唯一 索引

create table primary_test(
    id int primary key,   # 列级约束
    name char(20)
);

create table primary_test(
    id int,
    name char(20),
    primary key(id)    # 表级约束
);

create table primary_test(
    id int,
    name char(20),
    primary key(id, name)  # 表级约束 -----联合主键
);
# 联合唯一:单个列可以重复,整体不能重复; 条件必须时表级约束,同时重复才会报错

    foreign key(表格的外键)

      外键只能是表级约束,先有主表(与之关联的外键表),才有外表(当前表是外表)

      外表的引擎必须是innodb,在分号之前建议写上

      两者关联涉及的字段值类型必须相同

      删除数据(表),先删除子(外)数据(表),在删除父(主)数据(表)

      填写foreign key(字段名) references 主表名(主键)

# 主表(父表)
create table parent_table(
    id int primary key,     # 列级约束
    name varchar(20) not null default "",
);

# 外表(子表)
create table child_table(
    id int,
    parent_id int,
    name varchar(20) not null default "",
    primary key(id),        # 表级约束
    foreign key (parent_id) references parent_table(id)    # 表级约束
);

#插入数据: 先插入父表的数据,在插入子表的数据
insert into parent_table values(1001);
insert into child_table values(1, 1001);

    index/key 索引 建立索引提高查询速率

      key:如果表格没有主键,又是列级约束,会自动设置成主键;又是表级约束,就是普通的索引key了

      在已有的表格上创建/删除 索引:create/drop index index_name on table_name

# key 索引测试
create table key_test(
    id int key,      # 列级约束转换成主键了
    name varchar(20)
);

create table key_test(
    id int,
    name varchar(20),
    key(id)    # 表级约束  ---只是一个关键字索引
);

create table key_test(
    id int,
    name varchar(20),
    key(id, name)  # 表级约束---联合约束
);

#index 索引测试

create table index_test(
    id int index,      # index 没有列级约束   # error
    name varchar(20)
);

create table index_test(
    id int,
    name varchar(20),
    index(id)    # 表级约束  ---只是一个关键字索引
);

create table index_test(
    id int,
    name varchar(20),
    indexid, name)  # 表级约束---联合约束
);

# 在已有的表格创建索引
create index index_name on table_name(column_item1[, column_item2]);
# 在已有的存在索引字段的表格删除索引
drop index index_name on table_name(column_item1[, column_item2]);

    check(没有什么具体作用)

 

创建视图view(视图和相关联的表格是一致的):

create view view_name as 数据(某个结果数据集);

增加、删除、修改、查询(前提是操作成功)等功能和表格的一样

# 创建一个视图(可以将视图比作望远镜)
# 即实物与望远镜看到的事物是一致的
create view view_name as select * from table_name;

# 下面两个结果是一样的
select * from view_name;
select * from table_name;