一、对库的操作
创建库: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’‘69’,则相当于插入20002069;如果插入‘70’‘99’,则相当于插入19701999。第二种情况下插入的如果是‘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
通常用于自动存储包含当前日期和时间的时间戳,并可在需要执行大量数据库事务和需要建立一个调试和审查用途的审计跟踪的应用程序中发挥良好作用。
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(
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)
);
副表
Create table ‘学生表’(
Id int auto_increment primary key,
Name varchar(20),
‘班级_name’varchar(20),
‘班级_number’ int,
Foreign key (‘班级_name’,’班级_number’)references ‘班级表’(name,number)
);
删除外键约束
Alter table ‘学生表’ drop foreign key id;
增加外键约束
Alter table ‘学生表’add foreign key(‘班级_name’,’班级_number’);
唯一约束unique
唯一约束是指定table的列或列组合不能重复,保证数据的唯一性。
唯一约束不允许出现重复的值,但是可以为多个null。
同一个表可以有多个唯一约束,多个列组合的约束。
在创建唯一约束时,如果不给唯一约束名称,就默认和列名相同。
唯一约束不仅可以在一个表内创建,而且可以同时多表创建组合唯一约束。
示例
Create table temp(
Id int not null,
Name varchar(20),
Password varchar(10),
Unique(name,passwoed)
);
非空约束 not null 与 默认值 default
非空约束用于确保当前列的值不为空值,非空约束只能出现在表对象的列上。
Null类型特征:
所有的类型的值都可以是null,包括int、float 等数据类型
删除表:drop table 表名
Drop table if exists 表名
Drop tables (表1,表2,...)
Drop tables 语句可以同时删除多个表,但用户必须有该命令权限。
表被删除时,所有的表数据和表定义会被取消,且不可找回,所以使用本语句要小心
参数 if exists 用于在删除前判断表是否存在,加上该参数后,在删除表的时候,如果表不存在,SQL语句可以顺利执行,但会发出警告(warning)
修改表:
修改表名称:alter table 表名 renane to 新表名;
修改表结构 增加字段123:alter table 表名 add column 123 int null after 456;
修改表结构 删除字段:alter table 表名 drop columu 字段名;
修改表结构 修改字段类型:alter table 表名 change column 字段名 想要的字段数据类型 想要的约束类型;
修改表结构 修改字段名 alter table 表名 想要修改的字段 新字段名 新字段的数据类型