开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Linux下Mysql数据库浅析(二)

简介:
+关注继续查看

 The world's most popular open source database!

这是mysql官方主页的一个小标题-“世界上最流行的开源数据库软件”,既然mysql这么流行,那我们一定要学好它!现在,继续我们的航程...
 
一,mysql的数据类型:
1,数值型
2,字符型
3,日期时间型
 
下面我们来分析这几种数据类型:
1,数值型
它又可分为整型和近似值型
 1)整型
 有一下五种整型:
 数据类型  有符号表示范围  无符号表示范围  大小
 TINYINT   -128到127         0到255       1 byte
 SMALLINT  -32768到32767     0到65535     2 byte
 MEDIUMINT -8388608到8388607 0到16777215  3 byte
 INT  -2147483648到2147483647 0到4294967295 4 byte
 BIGINT     非常大            非常大      8byte
 
 DECIMAL 这个数值类型支持小数,但是表示的值是精确的    
 2)近似型
 FLOAT(单精度)   占用4 byte
 DOUBLE (双精度) 占用8 byte
 BIT(表示直接把数据存储为二进制位)   占用大小取决于bit大小
 
支持的修饰符: 
 UNSIGNED 修饰符规定字段只保存正值
 ZEROFILL 修饰符规定 0(不是空格)可以用来真补输出的值
 NOT NULL 这个字段的值不能为空
 NULL     这个字段的值可以为空,也是缺省值
 DEFAULT  定义默认的值
 AUTO_INCREMENT 这个字段中的值可以自动增长。用这个修饰的字段必须满足:唯一键或是主键;为整型;值不能为空;是无符号数;
 
2,字符型
数据类型      大小        描述 
CHAR       0-255字节   定长字符串 
VARCHAR    0-255字节   变长字符串
TINYBLOB   0-255字节   不超过 255 个字符的二进制字符串
TINYTEXT   0-255字节   短文本字符串
BLOB     0-65 535字节  二进制形式的长文本数据
TEXT      0-65 535字节  长文本数据
MEDIUMBLOB 0-16777215字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16777215字节 中等长度文本数据
LOGNGBLOB  0-4294967295字节 二进制形式的极大文本数据
LONGTEXT 0-4294967295字节 极大文本数据
 
CHAR类型用于定长字符串,比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补。
VARCHAR类型是一种可变长度的字符串类型,VARCHAR类型把它视为最大值并且只使用存储字符串实际需要的长度(增加一个额外字节来存储字符串本身的长度)来存储值。所以短于指示器长度的VARCHAR类型不会被空格填补,但长于指示器的值仍然会被截短。
TEXT和BLOB都用于存储大容量的数据。而BLOB类型区分大小写,TEXT不区分大小写。大小修饰符不用于各种 BLOB 和 TEXT 子类型。比指定类型支持的最大范围大的值将被自动截短
 
可用的修饰符:
NOT NULL
NULL
DEFAULT
如下这三个修饰符只能用于修饰CHAR,VARCHAR,TEXT,TINYTEXT,MEDIUMTEXT,LONGTEXT:
BINARY 默认字符存储的时候是不区分大小写的,而加上这个关键字后,存储和检索数据区分大小写
CHARACTER SET 定义字符集。不指的话为默认
COLLATION 定义排序规则
 
特殊的两种类型;
ENUM 枚举型
特点:列出的个数最多为65535,但是一次只能选取一个。
例:Weekday ENUM('Mon','Tue','Wed','Tus','Fri','Sat','Sun')
Weekday这个字段中的值只能是定义的列表中的一个
SET 集合型
特点:列出的个数最多为64个,一次可以选取多个
例:Weekday SET('Mon','Tue','Wed','Tus','Fri','Sat','Sun')
Weekday这个字段的值可以是定义的列表中的多个值
 
3,日期型
数据类型   格式      大小    表示范围
DATE     YYYY-MM-DD 3byte 1000-01-01到9999-12-31
TIME     hh:mm:ss   3byte 00:00:00到23:59:59
DATETIME YYYY-MM-DD hh:mm:ss 8byte 1000-01-01 00:00:00到9999-12-31 23:59:59
TIMESTAMP  YYYY-MM-DD hh:mm:ss 4byte 1970年1月1日午夜到2037年12月31日午夜
YEAR(2)  YY         1byte     00到99
YEAR(4)  YYYY       1byte     1901到2155
 
支持的修饰符:
NOT NULL
NULL
DEFAULT
 
以上是mysql数据库中的数据类型的分析,当我们创建表结构的时候,字段要选择合适的数据类型,这样不仅能节省存储空间,也能提升其性能。
例:
mysql> CREATE DATABASE Student;
mysql> USE Student
mysql> CREATE TABLE TB  (
    -> SID INT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE KEY,
    -> Name CHAR( 40) BINARY NOT NULL,
    -> Age TINYINT UNSIGNED NOT NULL,
    -> Gender CHAR(1) NOT NULL DEFAULT 'M' 
    -> );
 
mysql> CREATE TABLE tb3 (
    -> Weekday ENUM('Mon','Tue','Wed','Tus','Fri','Sat','Sun') NOT NULL,
    -> Week SET('Mon','Tue','Wed','Tus','Fri')
    -> );
    
二,mysql的环境变量sql_mode模式:
1,全局变量:设定之后对后来新建的会话有效,但重启mysqld服务器将失效。更改全局变量只有root才有权限
查看所有全局变量:
mysql> SHOW GLOBAL VARIABLES;
查看特定全局变量的值:
mysql> select @@global.variablename;  
查看的是特定用户自定义的全局变量值:
mysql> select @global.variablename;
 
2,会话变量:只对当前的会话有效。普通用户也有权限
查看所有会话变量:
mysql> SHOW SESSION VARIABLES;
查看特定会话变量的值:
mysql> select @@session.variablename; 
查看特定用户自定义的会话变量值:
mysql> select @session.variablename;
 
sql_mode常见的模型:
定义了mysql应该支持的sql语法,数据校验等!当违反了一些数据库中的表中字段定义的策略时,执行什么样操作等。
支持的sql_mode的模型有:
1,ANSI_QUOTES
使用ANSI标准的引号,即“的作用和‘相同,字符串只能用’‘引起来。允许插入非法数据,但会有警告。
2,IGNORE_SPACE
忽略mysql内建函数和’()‘中的空格。允许插入非法数据,但会有警告。
3,STRICT_ALL_TABLES
最严格模式,不允许网表中插入非法数据等。
4,STRICT_TRANS_TABLES
无效数据不允许插入事物中,允许插入到普通表中,但有警告。
5,TRADITIONAL
传统方式,等同也设置了STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER
 
查看sql_mode的值,如果为空使用mysql的默认值(like即相似匹配,支持%,_等通配符):
mysql> SHOW GLOBAL VARIABLES LIKE 'sql_mode';
mysql> SHOW SESSION VARIABLES LIKE 'sql_mode';
mysql> select @@global.sql_mode;
mysql> select @global.sql_mode;
mysql> select @@session.sql_mode;
mysql> select @session.sql_mode;
设置sql_mode的值:
mysql> SET GLOBAL sql_mode=‘modename’;  (全局设置)
mysql> SET SESSION sql_mode=‘modename’; (会话设置)
 
三,mysql中的相关命令用法
1,创建数据库相关命令:
简单创建数据库:
mysql> create database dbname;
加上if not exists关键字表示不存在就创建:
mysql> create database if not exists dbname;
创建数据时设定默认字符集和排序规则:
mysql> create database if not exists dbname character set gbk collate gbk_chinese_ci;
设定默认数据库,在脚本中一般不这样用:
mysql> use dbname
查看当前默认数据库:
mysql> select database();
修改数据库的排序规则:
mysql> alter database db_name collate collate_name;
修改数据库的字符集:
mysql> alter database db_name character set charset_name;
删除数据库:
mysql> drop database if exists db_name;
 
注意:
1),数据库不能进行重命名
2),详细了解命令的使用方法:mysql> help command
 
2,数据库存储引擎相关命令
mysql的存储引擎是插件式的,常用的有MyISAM和InnoDB。
mysql-5.5版本之后,默认的存储因为为InnoDB。
数据库中的每个表可以独立使用一个存储引擎,但是不建议同一个数据库中所使用不同的存储引擎,会带来很多麻烦。
 
查看当前数据库支持存储引擎:
mysql> show engines;(其中带DEFAULT的为默认存储引擎)
各字段的意思:
Engine:存储引擎名字
Support:当前mysql是否支持这个引擎
Comment:描述信息
Transactions:是否支持事物机制
XA:是否支持分布式事物机制
Savepoints:是否支持存储点的保存
 
查看默认存储引擎:
mysql> show global variables like '%engine%';
查看某个表的属性信息:
mysql> show table status like 'table_name'\G
 
修改默认存储引擎:
#vim /etc/my.cnf
在[mysqld]下面添加:
default_storage_engine = name (name为引擎名)
 
使修改生效要重启mysqld服务:
#service mysqld restart
 
3,数据表的相关命令
1)create table命令用法
直接创建:
mysql> create table dbname.tb_name ( 
mysql> name char(20)
mysql> );
 
通过从其它表中检索数据后创建表(复制过来的有数据但不能附带原表中关于字段属性的定义)
mysql> create table test1 select * from test2;
查看表结构:
mysql> desc test1;
 
如下方法可以把表结构复杂过来,但是表中没有数据:
mysql> create table test3 like test2;
mysql> desc test3;
 
2)alter命令用法
主要用于修改表结构;
新增字段:
mysql> alter table test1 add (CID1 SMALLINT UNSIGNED,CID2 INT NOT NULL);
 
修改字段:
添加字段并修改位置:
mysql> alter table test1 modify Name CHAR(10) AFTER CID2;
修改属性:
mysql> alter table test1 modify Name CHAR(10) NOT NULL;
修改字段名称:
mysql> alter table test1 change Name SName CHAR(10) NOT NULL;
删除字段:
mysql> alter table test1 drop SName;
更改表名:
mysql> alter table test1 rename to new_test1;
mysql> rename table new_test1 to test1;
  
3)insert命令的用法
作用是向表中插入数据
方法1:
mysql> insert into test1 (CID1,CID2) VALUES ('1','2');
mysql> insert into test1 (CID1,CID2) VALUES ('1','2'),('10','11');
mysql> insert into test1 values ('20','21'),('30','31');
方法2:
mysql> insert into test1 set CID1='01',CID2='02';
方法3:
以一个表为模板,生成另一个与之相同的表,各字段定义也相同:
mysql> create table test like test1;
mysql> insert into test select * from test1;
 
4)update命令的用法
修改表的数据:
mysql> update test1 set CID1='100' where CID2='2';
以CID1字段的数据进行排序,把排好序的CID2的前2行内容都改为200:(默认为升序)
mysql> update test1 set CID2=200 order by CID1 LIMIT 2;
 
5)delete命令的用法
用于删除表中的记录
删除test1标准中CID1的值小于5的记录:
mysql> delete from test1 where CID1 < 5; 
以CID1字段进行降序排列,把排好序的前2行删除:
mysql> delete from test1 order by CID1 DESC LIMIT 2;
 
6)replace命令的用法
和insert命令的用法相同,只是当往字段中插入数据时,如果本身有数据,replace会覆盖其中的内容,而insert会执行不成功
 
7)truncate命令的用法
用于清空一个表中的数据,并且会重置计数器。
mysql> truncate test1;
应用举例:
如果test1表的CID1设置了auto_increment属性,现在表中只有一条记录且CID1为1;如果我们把这条记录删掉,再插入一条记录,CID1的值为2。如果我们用truncate这个命令清空表,再插入一条新纪录,CID1的值为1。









本文转自 leejia1989 51CTO博客,原文链接:http://blog.51cto.com/leejia/828494,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Linux自动备份压缩MySQL数据库的实用方法
MySQL定期备份是一项重要的工作,但人工操作太繁琐,也难避免有所疏漏,使用下面的方法即可让系统定期备份数据。   ◆1、创建备份文件夹   #cd /www   #makedir backup   ◆2、编写...
702 0
Linux 每天自动备份mysql数据库的方法
Linux 每天自动备份mysql数据库的方法 作者: 字体:[增加 减小] 类型:转载   linux下为了安全有时候需要自动备份mysql数据库,下面是具体的实现步骤。   /usr/bin为mysql安装目录 建备份文件夹: mkdir mysql_data_bak 建脚本文件: touch autobackupmysql.
569 0
Linux自动备份MySQL数据库
  MySQL定期备份是一项重要的工作,但人工操作太繁琐,也难避免有所疏漏,使用下面的方法即可让系统定期备份数据。
520 0
嵌入式(八)——vim使用及配置(附总结及十个Linux炫酷命令)
嵌入式(八)——vim使用及配置(附总结及十个Linux炫酷命令)
0 0
嵌入式(六)——Linux进阶命令
嵌入式(六)——Linux进阶命令
0 0
Linux系统之磁盘管理相关命令的基本使用
Linux系统之磁盘管理相关命令的基本使用
0 0
Linux系统之grep命令基本使用
Linux系统之grep命令基本使用
0 0
Linux系统之hostname相关命令基本使用
Linux系统之hostname相关命令基本使用
0 0
Linux系统之cp命令的基本使用
Linux系统之cp命令的基本使用
0 0
LINUX SHELL命令ls只列出目录名
LINUX SHELL命令ls只列出目录名
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
ECS系统指南之Linux系统诊断
立即下载
Debian GNU/Linux 安全合规之路
立即下载
Decian GNU/Linux安全合规之路
立即下载