mysql语言定义_MySQL定义语言[DDL]

创建表tablecreate table table_name (

列名 属性,

age int,

...

name varchar(10)

);

整型列tinyint:1字节,取值范围[-128 ~ 127],非负取值范围[0 ~ 255]

smallint:2字节,取值范围[-32768 ~ 32767],非负取值范围[0 ~ 65535]

mediumint:3字节,取值范围[-8388608 ~ 8388607],非负取值范围[0 ~ 16777215]

int:4字节,取值范围[-21亿 ~ 21亿],非负取值范围[0 ~ 42亿]

bigint:8字节

整型例的可选参数【属性】各种整型数据类型默认为带符号的取值范围

unsigned:无符号,列的值从0开始,不为负。

[M] zerofill:适合用于学号,编码等固定宽度的数字,可以用0填充至固定宽度,并且默认决定列为unsigned属性。

如果数字位数超过了[M],并不影响,MySQL会字节存取。alert table table_name add 列名 tinyint(5) zerofill;    添加一个固定宽度为5的列

浮点列与定点列float[M,D]:浮点型,M表示精度,总位数;D表示标度,小数位数;这两个参数可以省略不写,默认为普通浮点数。

double[M,D]:与上相同,只是默认精度更高。

decimal[M,D]:定点型,float和double有精度损失,而decimal没有,更精确。

字符型列

类型宽度可存字符实存字符[i<=M]实占空间利用率

charMMiM<=100%

varcharMMii字符(+1-2)字节<100%char型如果不够M个字符,内部活用空格补齐,取出时再把右侧空格删掉。[这意味着,如果右侧本身有空格,将会丢失],但是char速度更快。

M是字符,是几就表示可以存几个汉字。

text:文本型,可存储约6万字。

blob:用来存储二进制文件,如图片,音频等,由于采用的是二进制形式,不用考虑字符集。

enum:枚举型,是定义好值就在某几个枚举范围内。alert table table_name add 列名 enum("男","女");    //只能选址一个值进行插入操作

alert table table_name add 列名 set("男","女");    //可以选择一个或多个值进行插入操作

日期时间型列类型样式范围

year19951901~2155

date1998-12-311000/01/01~9999/12/31

time12:32:45-838:59:59 ~ 838:59:59

datetime1998-12-31 12:32:45-

timestamp1512394064可不写,系统自动获取

列的默认值因为null查询不便且索引效率不高,所以在实际应用中,应尽量避免列的值为null,如果想避免,声明列not null default "默认值"alert table table_name add 列名 int not null default 1;

主键与自增主键:次列不重复,能够区分每一行。//写法一

create table table_name(

id int primary key,

name char(10)

);

//写法二

create table table_name(

id int,

name char(10),

primary key(id)

);自增:一张表,只能有一个自增列,且此列必须加索引[index/key id]create table table_name(

id int,

name char(10),

index id(id)

);主键且自增create table table_name(

id int primary key auto_increment,

name char(10),

);

列的增删改alert table 表名 add 列名 列类型 列属性;               //添加列,默认在表最后

alert table 表名 add 列名 列类型 列属性 after 列名;     //添加一个新列并放在某列之后

alert table 表名 drop column 列名;                   //删除列

alert table 表名 change 列名 新列名 新列类型;          //修改列名和列类型

alert table 表名 modify 列名 新列类型;                //只能修改列类型

视图create view  视图名 as select 列1, 列2, 列3 from table_name;如果一个查询结果集需要经常被用到,就需要创建视图。

又被称为虚拟表,是sql的查询结果。

作用:权限控制。

比如说某几个列允许用户查询,其他列不允许,可以通过视图开放其中一列或几列起到权限控制的作用。

简化复杂的查询

如果视图的所有列都来自物理表,那么视图中的数据就可以修改;如果视图中存在某一列或几列是经过物理表中的列进行运算得到的,那么视图中这样的列中的数据就不能被修改。

视图的algorithm[视图放在哪?]//指定使用merge算法

create algorithm=merge view  视图名 as select 列1, 列2, 列3 from table_name;

指定使用temptable算法

create algorithm=temptable view  视图名 as select 列1, 列2, 列3 from table_name;

//由MySQL自己决定使用何种算法

create view  视图名 as select 列1, 列2, 列3 from table_name;对于简单查询形成的view,再对view进行查询时,如where,order等等,可以把建视图语句+查视图语句合并成 --> 查物理的语句。这种视图的算法叫merge [合并]

也有可能创建视图的语句本身就比较复杂,很难在和查询视图的语句进行合并,MySQL可以先执行视图的创建语句,把结果集形成内存中的临时表,然后去查询临时表。这种视图的算法叫temptable [临时表]

常用表管理语句show tables;                                //查看所有表,视图也会包含在内。

desc 表名;                                   //查看表详细信息

drop table 表名;                             //删除表

drop view 视图名;                            //删除视图

show create table 表名/视图名;                //查看建表/视图过程

show table status \G;                       //查看所有表详细信息,\G表示竖排显示

show table status where name = '表名' \G;    //查看指定表详细信息

rename table 旧表名 to 新表名;                //改表名

truncate 表名;                               //想当于删除后有重建了这个表

delete from 表名;    //删除表中所有数据,但如果继续插入数据,自增列会在原有基础上继续自增

存储引擎的概念create table table_name(

id int,

name char(10)

)engine innodb charset utf8;数据库对同样的数据有着不同的存储方式和管理方式,在MySQL中称之为数据引擎

在MySQL_5.5.5以前默认引擎是Myisam,从MySQL_5.5.5开始,默认引擎改为Innodb

Myisam数据组织方式:每一个数据库形成一个文件夹,每张表包含3个文件放在该文件夹下table_name.frm        //表结构文件

table_name.MYD      //表数据文件

table_name.MYI        //表索引文件

可以直接把文件夹拷走,就是一个完整的数据库

Myisam不支持事务

Innodb数据组织方式:所有数据放在一个文件内

字符集与乱码问题create table table_name(

id int,

name char(10)

)engine innodb charset utf8;乱码是因为文字本来的的字符集与展示的字符集不一致导致

校对集:就是排序规则

一套字符集可以有几套校对集

17b039667887d3eb1823f523159ef315.pngcharacter_set_client = 'utf8'           //设置客户端发送与可接收字符集

character_set_connection = 'utf8'       //设置解释字符集

character_set_results = 'utf8'          //设置数据库返回与可接收字符集

set names utf8;                         //就是将以上三个变量同时设为utf8字符集解释器可以将不同编码进行翻译

如果客户端和MySQL使用的是不同的字符集,就会出现乱码

连接器使用GBK或者UTF8都可以,但是不可以使用编码范围比较小的字符集,比如ASCII,那样会造成数据丢失

谁能连接数据库谁就是客户端,如PHP和MySQL的控制窗口就是两个不同的客户端

保证HTML文件,数据库,处理脚本(如PHP),查询语句前的声明保持一致,就可以避免乱码

索引的概念key                //普通索引,纯粹为了加快查询速度

unique key         //唯一所以,一是为了加快查询速度,二是为了约束数据 [不能重复]

primary key        //主键索引,不需要起名,因为一张表就一个

fulltext           //全文索引,在中文环境下,几乎无效create table table_name(

id int,

name char(10),

key name(name),

unique id(id)

);索引是数据的目录,能快速定位行数据的位置,索引提高了查询速度,但是影响了增删改的速度,并非加的越多越好,一般在查询频率比较高的列上加,而且在重复度的列上加效果更好

索引长度:建索引时,可以只索引列的前一部分内容,比如前10个字符create table table_name(

id int,

name char(10),

key name(name(5))

);多列索引:就是把2列或多列的值,看成一个整体然后索引。create table table_name(

xing char(5),

ming char(10),

key xm(xing,ming)

);

insert into table_name values ('朱','元璋');                     //插入一条数据

select * from table_name where xing = '朱' and ming = '元璋';    //索引生效

select * from table_name where xing = '朱';                     //索引生效

select * from table_name where ming = '元璋';                    //索引失效索引是左前缀发挥作用

冗余索引:就是在某个列上,可能存在多个索引create table table_name(

xing char(5),

ming char(10),

key xm(xing,ming),

key ming(ming)

);

索引的操作语法show index from 表名; || show create table 表名;                     //查看索引

alter table 表名 drop index 索引名;  ||  drop index 索引名 on 表名;    //删除索引

alter table 表名 add 索引名(列名);                                    //添加索引

alter table 表名 add primary key (列名);                             //添加主键索引

alter table 表名 drop primary key;                                   //删除主键所以

事务的概念//事务执行成功

start transaction

update 表名 set money+500 where id=2;

update 表名 set money-500 where id=1;

commit;

//事务执行失败,进行回滚

start transaction

update 表名 set money+500 where id=2;

update 表名 set money-500 where id=1;

rollback;比如转账就可以看作一个事务,包含A扣款,B收款两个部分,只有两部分都成功,才能说一个事务完成

事务具有以下四个特点隔离性:用户看不到事务的中间态

原子性:不论事务中间过程过么复杂,最后结果要么是事务执行之前的状态,要么是事务执行成功的状态

一致性:事务前后的数据保持守恒

持久性:事务一旦执行成功,就不能rollback

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值