linux mysql database exists,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。

下一篇我们将继续深入的探讨mysql,继续....

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值