数据类型
类型名称 | 大小 | 数据类型 |
---|---|---|
tinyint | 1Byte | 整数型 |
int 或 intger | 4Bytes | 整数型 |
bigint | 8Bytes | 整数型 |
float | 4Bytes | 浮点型 |
double | 8Bytes | 浮点型 |
char | 0-255Bytes | 字符串类型 |
varchar | 0-65535Bytes | 字符串类型 |
date | 3Bytes | 日期和时间类型 |
time | 3Bytes | 日期和时间类型 |
datetime | 8Bytes | 日期和时间类型 |
因为我们用的是UTF-8的编码,一个汉字占3字节,一个字母占2字节。
SQL语言
(1)数据定义语言(Data Definition Language DDL):DROP(删除)、CREATE(创建)、 ALTER(设置选项)等语句。
(2)数据操作语言(Data Manipulation Language DML):INSERT(插入)、UPDATE(修
改)、DELETE(删除)语句。
(3)数据查询语言(Data Query Language DQL):SELECT语句。
(4)数据控制语言(Data Control Language DCL):GRANT、REVOKE、COMMIT、 ROLLBACK等
语句。
SQL语言中不区分大小写,所有语句以英文分号“ ; “结束,建表时以英文逗号分隔” , “
数据库操作(SQL语句的使用)
对库的操作
显示所有的库
show databases;
创建库
create database datebase_name;
查看库定义
show create database myabits;
删除库
drop database database_name;
对表的操作
对表的操作前一定要先使用库,在库下才可以进行对表的操作。
使用库
use database;
创建表
create table table_name(
字段1 类型 约束条件 默认值,
字段2 类型 约束条件 默认值,
字段3 类型 约束条件 默认值
);
使用CREATE TABLE创建表时,必须指定以下信息:
(1)要创建的表的名称,不区分大小写,不能使用SQL语言中的关键 字,如DROP、ALTER、 INSERT等。
(2)数据表中每一列(字段)的名称和数据类型,如果创建多列,就要用逗号隔开,最后一列字段 不需要标点符号。
查看表结构
desc table_name
约束条件
五类完整性约束
NOT NULL 非空
UNIQUE 唯一
PRIMARY KEY 主键
FOREIGN KEY 外键
CHECKED 检查(mysql不支持的)
主键约束
主键,又称主码,是表中一列或多列的组合。主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空。主键能够唯一地标 识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以 加快数据库查询的速度。主键和记录之间的关系如同身份证和人之间的关 系,它们之间是一一对应的。主键分为两种类型:单字段主键和多字段联合主键。(即主键具有标识性,且默认非空且唯一)
例: 我们运用以上知识创建一个以company为数据库的employee表,需要统计员工的id、name、sex、salary、phone、birth。
create database company;
use company;
create table emploee(
id int primary key,
name varchar(30) not null,
sex char(3) default'男',
salary float,
phone varchar(50) unique,
birth date
);
注意:一张表只有一个primary key(主键),varchar、char需要定义数据的空间大小。
修改表结构
1、修改表名
ALTER TABLE <旧表名> RENAME TO <新表名>;
例:将表名employee改为emp
alter table employee rename to emp;
2、修改字段数据类型
ALTER TABLE <表名> MODIFY <字段名> <数据类型>
例:将emp表下的name改为varchar(30)
alter table emp modfiy name varchat(30);
3、修改字段名
ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;
例:将emp表下的sex改为emp_sex
alter table emp change sex emp_sex char(3);
4、添加字段
ALTER TABLE <表名> ADD <新字段名> <新字段类型> <约束条件> [FIRST|AFTER]已存在字
段名;
例:在emp表中添加address字段
在emp表中添加address字段至首列
在emp表中添加address字段在phone列后
alter table emp add address varchar(50) not null;
alter table emp add address varchar(50) not null first;
alter table emp add address varchar(50) not null after phone;
注意:添加的字段必须是表中不存在的字段。
5、删除字段
ALTER TABLE <表名> DROP <字段名> ;
例:删除emp表中的address字段
alter table emp drop address;
6、修改字段所在的位置
ALTER TABLE <表名> MODIFY <字段1> <数据类型> FIRST|AFTER <字段2>;
例:将emp表中的birth放置name后
alter table emp modfiy birth date after name;
7、更改表的存储引擎(不常用)
ALTER TABLE <表名> ENGINE=<更改后的存储引擎名>;
例:
ALTER TABLE tb_deptment3 ENGINE=MyISAM;
建表时的数据类型选择
1、整数和浮点数
如果不需要小数部分,就使用整数来保存数据;如果需要表示小数部分,就使用浮点数类型。对于浮点数据列,存入的数值会对该列定义的小数位进行四舍五入。例如,假设列的值的范围为1~99999,若使用整数,则 MEDIUMINT UNSIGNED是最好的类型;若需要存储小数,则使用FLOAT 类型
浮点类型包括FLOAT和DOUBLE类型。DOUBLE类型精度比FLOAT类型高,因此要求存
储精度较高时应选择DOUBLE类型
2、浮点数和定点数
浮点数FLOAT、DOUBLE相对于定点数DECIMAL的优势是:在长度一定的情况下,浮点数能表示更大的数据范围。由于浮点数容易产生误差,因 此对精确度要求比较高时,建议使用DECIMAL来存储。DECIMAL在MySQL中是以字符串存储的,用于定义货币等对精确度要求较高的数据。 在数据迁移中,float(M,D)是非标准SQL定义,数据库迁移可能会出现问题,最好不要这样使用。另外,两个浮点数进行减法和比较运算时也容易出 问题,因此在进行计算的时候,一定要小心。进行数值比较时,最好使用DECIMAL类型
3、日期和时间类型
MySQL对于不同种类的日期和时间有很多数据类型,比如YEAR和TIME。如果只需要记录年份,则使用YEAR类型即可;如果只记录时间,则使用TIME类型。
如果同时需要记录日期和时间,则可以使用TIMESTAMP或者DATETIME类型。由于TIMESTAMP列的取值范围小于DATETIME的取值范围,因此存储范围较大的日期最好使用DATETIME。
TIMESTAMP也有一个DATETIME不具备的属性。默认的情况下,当插入一条记录但并没有指定TIMESTAMP这个列值时,MySQL会把TIMESTAMP列设为当前的时间。因此当需要插入记录的同时插入当前时间时,使用TIMESTAMP是方便的。另外,TIMESTAMP在空间上比 DATETIME更有效。
4、CHAR与VARCHAR之间的特点与选择
CHAR和VARCHAR的区别如下:
CHAR是固定长度字符,VARCHAR是可变长度字符。
CHAR会自动补空格,VARCHAR不自动补。
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名> 1
ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept; 1
ALTER TABLE <表名> ENGINE=<更改后的存储引擎名>; 1
ALTER TABLE tb_deptment3 ENGINE=MyISAM; 1
DROP TABLE [IF EXISTS]表1, 表2,…表n; 1
CHAR是固定长度,所以它的处理速度比VARCHAR的速度要快,但是它的缺点是浪费存
储空间,所以对存储不大但在速度上有要求的可以使用CHAR类型,反之可以使用
VARCHAR类型来实现。