mysql ddl分类_MySQL语言分类——DDL

DDL的全称Data Definition Language,即数据定义语言

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

create (创建)

create 可以创建数据库

# 创建数据库create databasedatabase_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 notexits table_name(

idint,

namevarchar(20)

);

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

create temporary tabletable_name(

idint key,

namevarchar(20)

);

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

create tablenull_test(

accountvarchar(20) not null,

passwordvarchar(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 tabledefault_test(

idint not null default 0,

addressvarchar(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 tableauto_test(

idint primary keyauto_increment,

namevarchar(20) not null);create tableauto_test(

idint primary keyauto_increment,

namevarchar(20) not null)auto_increment=1;create tableauto_test(

idint primary keyauto_increment,

namevarchar(20) not null)auto_increment=2016211001000;

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

create tablecomment_test(

idintcomment "标号"

);

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 tableunique_test(

idint,

stunoint not null unique# 列级约束

);create tableunique_test(

idint,

stunoint not null unique default 0# 只能默认插入一次

);create tableunique_test(

idint,

stunoint not null,unique(stuno) # 表级约束

);create tableunique_test(

idint,

stunoin not null,unique(id, stuno) # 表级约束---联合约束唯一

);

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

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

create tableprimary_test(

idint primary key, # 列级约束

namechar(20)

);create tableprimary_test(

idint,

namechar(20),primary key(id) # 表级约束

);create tableprimary_test(

idint,

namechar(20),primary key(id, name) # 表级约束 -----联合主键

);

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

foreign key(表格的外键)

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

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

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

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

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

# 主表(父表)create tableparent_table(

idint primary key, # 列级约束

namevarchar(20) not null default"",

);

# 外表(子表)create tablechild_table(

idint,

parent_idint,

namevarchar(20) not null default"",primary key(id), # 表级约束foreign key (parent_id) referencesparent_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 tablekey_test(

idint key, # 列级约束转换成主键了

namevarchar(20)

);create tablekey_test(

idint,

namevarchar(20),key(id) # 表级约束 ---只是一个关键字索引

);create tablekey_test(

idint,

namevarchar(20),key(id, name) # 表级约束---联合约束

);

#index索引测试create tableindex_test(

idint index, # index没有列级约束 # error

namevarchar(20)

);create tableindex_test(

idint,

namevarchar(20),index(id) # 表级约束 ---只是一个关键字索引

);create tableindex_test(

idint,

namevarchar(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 数据(某个结果数据集);

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

视图的作用:

重用sql语句,即多次使用相同语句

数据的安全性:限定特定字段数据

对数据的重构并且不影响其他程序的运行,让数据更加清晰

# 创建一个视图(可以将视图比作望远镜)

# 即实物与望远镜看到的事物是一致的create view view_name as select * fromtable_name;

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

DROP

drop可以删除数据库、数据表、view视图、index索引

drop databasedatabase_name;drop tabletable_name;drop viewview_name;drop index index_name on table_name(column_item1[, column_item2]);

RENAME(重命名)

rename只限于表格操作

# 修改表格名称

renametable old_name to new_name

TRUNCATE

清空表格的数据,释放磁盘空间(自定义的设置会回复原来的设置)

create tabletruncate_test(

idint primary keyauto_increment,

namevarchar(20)

)auto_increment=10000;insert into truncate_test(name) values("aaa");truncate truncate_test; # 原来设置的auto_increment=10000,会改为auto_increment=1

ALTER

alter 完整语法的用法:

# 创建一个测试表格create table test(id int);

1、向表格增加一列:

# 语法:

#alter table table_name addcolumn_name column_type column_constraintsalter table test add name varchar(20) not null;

2、向表格的一个/多个字段增加索引(多个字段即联合索引)

# 语法

#alter table table_name add index[unique_name](column_name1[,column_name2])alter table test add index (id);

3、向表格的一个/多个字段增加主键(多个字段即联合主键)

# 语法:

#alter table table_name add primary key (column_name1[,colum_name2])alter table test add primary key (id);

4、向表格的一个/多个字段增加唯一(多个字段即联合唯一)

# 语法:

#alter table table_name add unique [unique_name] (column_name1[, clumn_name2])alter table test add unique (id);

5、修改/删除表格某个字段的默认值

# 语法:

#alter table table_name alter column_name {set defaulle column_value |drop default}

# 色湖之默认值alter table test alter name set default"root";

# 删除默认值alter table test alter name drop default;

6、修改表格字段

# 语法:

# 修改字段过程中若连同字段名也修改采用change

#alter table table_name change column_old_name column_new_name [constraints]

alter table test change id test_id int primary key;

# 不修改字段名可采用modify

#alter table table_name modify column_name [constraints]

alter table test modify test_id int(10) unsigned primary key;

7、删除字段、主键、索引

# 语法:

# 删除某个字段

#alter table table_name dropcolumn_namealter table test dropname;

# 删除索引

#alter table table_name drop indexindex_name 默认是字段名,也可以查看表结构alter table test drop indexid;

# 删除主键

#alter table table_name drop primary key

alter table test drop primary key;

8、修改表格的名称

# 修改表格的两种方式:

#1、采用rename方式

# renametable table_old_name totable_new_name;

renametable test totest1;

#2、采用alter方式

#alter table table_name rename [as]table_new_namealter table test1 rename test;

9、修改表格的配置

# 语法

# 修改的地方是在 ) 和 ; 之间的配置

# 修改引擎

#alter table table_name engine=InnoDBalter table test engine=InnoDB;

# 修改字符编码

#alter table table_name charset=gbk2313alter table test charset=gbk2312;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值