软件测试基础——MySQL建库、建表SQL语句
⼀、对库的操作
创建库:create database 库名 ;
创建指定字符集的库:create database 库名 charset=utf8;
创建指定字符集并带校验规则的库:create database 库名 charset=utf8 collate utf_general_ci;
删除库:drop database 库名;
字符集类型这⾥就不具体讲解了,有兴趣的可以上⽹查询
⼆、对表的操作
创建表:create table 表名 (字段名 类型(长度)约束类型);
1、类型
整数类型(tinyint,smallint,mediumint,int,bigint)
原本我是把资料整理到Word⽂档中的,由于不知道如何创建表格只好把,整理类型的分类表格截图作为图⽚进⾏上传,哎,我也是被逼的。
整数类型有可选的 unsigned 属性,表⽰不允许负值,这⼤致可以使正数的上限提⾼⼀倍。主键⾃增 id 适合设置为 unsigned 属性的 int 类型。
MySQL 可以为整数类型指定宽度,例如 int(11),对⼤多数应⽤是没有意义的:它不会限制值的合法范围,只是规定了 MySQL 的⼀些交互⼯具(例如 MySQL 命令⾏客户端)⽤来显⽰字符的个数。对于存储和计算来说,int(1) 和 int(20) 是相同的。
实数类型:(float,dauble,decimal)
float,double属于浮点类型(近似值),decimal属于定点类型(精确值)
MYSQL浮点型和定点型可以⽤类型名称后加(M,D)来表⽰,M表⽰该值的总长度,D表⽰⼩数点后⾯的长度
因为需要额外的空间和计算开销,所以应该尽量只在对⼩数进⾏精确计算时才使⽤decimal--例如存储财务数据。但在数据量⽐较⼤的时候,可以考虑使⽤bigint代替decimal,将需要存储的货币单位根据最⼩的位数乘以相应的倍数即可
unsigned(⽆符号类型),⾮负限定。⽐如说unsigned int就是⽆符号整数的意思,⼀般有符号的最⾼位是符号位,表⽰数据的正负,不表⽰⼤⼩,⽽⽆符号的最⾼位是表⽰数据的⼤⼩
数据类型的每⼀种(char除外)都分为:⽆符号(unsigned)和有符号(signed)两种类型,默认情况下都是有符号的类型,char在默认情况下总是⽆符号的。在除char以外的数据类型中,如果需要声明五符号类型的话就需要在类型前加上unsigned。
⽆符号类型和有符号类型的区别就是⽆符号类型能保存2倍于有符号的正整数数据。
字符串类型:(char,varchar,tinyblob,tinytext,blob,text,mediumblob,
mediumtext,longblob,longtext)
Char和varchar类型
Varchar类型⽤于存储可变长字符串,是最常见的字符串数据类型
Varchar需要1或2个额外字节记录字符串长度,如果列的最长长度⼩于等于255字节,则只⽤1个字节表⽰,否则使⽤2个字节
Char类型是定长的,⽐如char(m),每个数据都占⽤m个字节,如果某个数据长度⼩于m,mysql就会在数据后⾯⽤空格字符补⾜。
Char存储会删除数据的末尾空格;varchar不会。⽐如存储数据为‘123 ’char类型存储为‘123’⽽varchar为‘123 ’
Blob和text类型
Blob和text都是为了存储很⼤的数据⽽设计的字符串数据类型,分别采⽤⼆进制和字符⽅式存储
与其他类型不同,mysql把每个blob和text值当做⼀个独⽴的对象处理
Blob和text家族之间仅有的不同是blob类型存储的是⼆进制数据,没有排序规则或字符集,⽽text类型有字符集和排序规则
Memory引擎不⽀持blob和text类型
Enum类型和Set类型
Set类型:集合,列可赋予多个集合成员。其值来⾃创建表时规定的允许的串集中选择,可包括串集中任意或所有成员,每个值成员之间以逗号隔开。
Enum类型:枚举,列可赋予某个枚举成员。其值来⾃创建表时规定的允许的枚举中选择,只能选择其中之⼀
MySQL在内部会将每个值在列表中中的位置保存为整数,并且在表的.frm⽂件中保存“数字-字符串”映射关系的“查表”,如果使⽤数字作为枚举常量,这种双重性很容易导致混乱,例如enum(‘1’,‘2’,‘3’)尽量避免这么做!!枚举
字段是按 照内部存储的整数⽽不是定义的字符串进⾏排序的
⽇期和时间类型(date,time,year,datetime,timestamp)
给YEAR类型赋值可以有三种⽅法。
第⼀种是直接插⼊4位字符串或者4位数字。
第⼆种是插⼊2位字符串,这种情况下如果插⼊‘00’2069;如果插⼊‘70’1999。第⼆种情况下插⼊的如果是‘0’,则与插⼊‘00’效果相同,都是表⽰2000年。
第三种是插⼊2位数字,它与第⼆种(插⼊两位字符串)不同之处仅在于:如果插⼊的是⼀位数字0,
则表⽰的是0000,⽽不是2000年。所以在给YEAR类型赋值时,⼀定要分清0和‘0’,虽然两者相差个引号,但实际效果确实相差了2000年。
DATE
MySQL是以YYYY-MM-DD格式来显⽰DATE类型的值,插⼊数据时,数据可以保持这种格式。另外,MySQL还⽀持⼀些不严格的语法格式,分隔符“-”可以⽤“@”、“.”等众多符号来替代。在插⼊数据时,也可以使⽤“YY-MM-DD”格式,YY转化成对应的年份的规则与YEAR类型类似。如果我们想插⼊当前系统的时间,则可以插⼊CURRENT_DATE或者NOW()。
允许使⽤字符串或数字把值赋给DATE列。
TIME
TIME类型表⽰为“时:分:秒”,尽管⼩时范围⼀般是0~23,但是为了表⽰某些特殊时间间隔,MySQL将TIME的⼩时范围扩⼤了,⽽且⽀持负值。对TIME类型赋值,标准格式是"HH:MM:SS",但不⼀定⾮要是这种格式。如果插⼊的是"D HH:MM:SS"格式,则类似插⼊
了"(D*24+HH):MM:SS"。⽐如插⼊"2 23:50:50",相当于插⼊了"71:50:50"。如果插⼊的是"HH:MM"或"SS"格式,则效果是其他未被表⽰位的值赋为零值。⽐如插⼊"30",相当于插⼊了"00:
00:30";如果插⼊"11:25",相当于插⼊了"11:25:00"。
另外也可以插⼊‘D HH’和‘D HH:MM’,效果按上⾯的例⼦可以推理出来了吧。 在MySQl中,对于'HHMMSS'格式,系统能够⾃动转化为标准格式。如果我们想插⼊当前系统的时间,则可以插⼊CURRENT_TIME或者NOW()。
TIME类型允许使⽤字符串或数字把值赋给TIME列,只占3个字节,如果只是存储时间数据,它最合适了。
需要注意的是,没有冒号分隔符的 TIME 类型值,将会被 MySQL 理解为持续的时间,⽽不是时间戳。
DATETIME
‘69’,则相当于插⼊2000‘99’,则相当于插⼊1970
通常⽤于⾃动存储包含当前⽇期和时间的时间戳,并可在需要执⾏⼤量数据库事务和需要建⽴⼀个调试和审查⽤途的审计跟踪的应⽤程序中发挥良好作⽤。
TIMESTAMP
通常⽤于⾃动存储包含当前⽇期和时间的时间戳,并可在需要执⾏⼤量数据库事务和需要建⽴⼀个调试和审查⽤途的审计跟踪的应⽤程序中发挥良好作⽤。
TIMESTAMP的取值范围⽐较⼩,没有DATETIME的取值范围⼤,因此输⼊值时⼀定要保证在TIMESTAMP的范围之内。它的插⼊也与插⼊其他⽇期和时间数据类型类似。
那么TIMESTAMP类型如何插⼊当前时间?第⼀,可以使⽤CURRENT_TIMESTAMP;第⼆,输⼊NULL,系统⾃动输⼊当前的TIMESTAMP;第三,⽆任何输⼊,系统⾃动输⼊当前的TIMESTAMP。
另外有很特殊的⼀点:TIMESTAMP的数值是与时区相关.
MySQL以YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD或YYMMDD格式来显⽰TIMESTAMP值,取决于是否M是14(或省略)、12、8或6,但是允许你使⽤字符串或数字把值赋给TIMESTAMP列。⼀个TIMESTAMP列对于记录⼀个INSERT或UPDATE操作的⽇期和时间是有⽤的,因为如果你不⾃⼰给它赋值,它⾃动地被设置为最近操作的⽇期和时间。你以可以通过赋给它⼀个NULL值设置它为当前的⽇期和时间
约束类型
主键约束 primary key
主键约束相当于‘唯⼀约束’+‘⾮空约束’的组合,主键约束列不允许重复,也不允许出现空值。
每个表最多只允许⼀个主键,建⽴主键约束可以在列级别创建,也可以在表级别创建。
当创建主键的约束时,系统默认会在所在的列和列组合上建⽴对应的唯⼀索引。
基本模式:
create tabie student(mysql创建表数据类型
id int primary key,
name varchar(20)
);
组合模式
create table student(
id int
name varchar(20)
site varchar(20)
primary key(id,name)
);
删除主键约束
alter table temp drop primary key;
添加主键约束
alter table temp add primary key(id,name);
修改主键约束
alter table temp modify id int primary key;
外键约束foreign key
外键约束是保证⼀个⼀个或两个表之间的参照完整性,外键是构建于⼀个表的两个字段或是两个表的两个字段之间的参照关系主表主键为副表外键
基本模式
主表
create tabie‘ 学⽣表’(
id int primary key,
name varchar(20)
);
副表
Create table ‘成绩表’(
Id int,
‘成绩’ float(4,1),
‘学科_id’ int,
froeign key (id) references ‘学⽣表’(id)
);
多列外键组合,必须⽤表级别约束语法
主表
Create table ‘班级表’(
Id int,
Name varchar(20),
Number int,
Primary key (name,number)
);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论