mysql学习笔记

今天开始学习mysql数据库了,也是第一次在这里写技术笔记,相信好记忆不如烂笔头,就以此来见证自己的成长吧!

首先安装mysql服务器的过程这里就不啰嗦啦,相信大家都懂的,直接进入主题吧,欢迎那些也是刚开始学习mysql数据库的来一起探讨,是高手的话就发表下意见咯,小弟在这里虚心请教!

一、入门语句:

首先打开运行对话框-->输入cmd-->回车

1.连接到mysql服务器:

mysql -h localhost -u 用户名(通常都是root) -p 密码;

如果不写 -h localhost,默认是连接到本地的mysql服务器,比如在我的电脑:

mysql -u root -p mysql;

2.查看所有的数据库

show databases;

3.选择使用哪个数据库

use databaseName;  --这条语句比较特殊,可以不写分号

比如我有一个数据库名字是test,则use test;

4.查看某个数据库下的所有表

show tables;

5.查看表结构

desc(全称description) 表名;

6.建库语句

create database 数据库名;

7.建表语句

注意:建表之前必须先选择使用某个数据库,use test,

create table 表名(

  列名 数据类型,   --多个列用逗号隔开

  ......

)

其实建表就是声明列的过程。

8.重命名表

rename table oldName(原来的表名) to newName(新的表名);

注意:不能给数据库重命名的。

9.设置字符集

set names gbk;

 

二、详解列类型之三大列类型

    1.数值型(整型列,浮点型列)

    2.字符型列

    3.日期/时间类型

整型列存储范围与所占空间

类型
 
字节 有符号 无符号
tinyint 1 8 -2^7-2^7-1 0-2^8-1
smallint 2 16 -2^15-2^15-1 0-2^16-1
mediumint 3 24 -2^23-2^23-1 0-2^24-1

int

bigint

4

8

32

64

 

-2^31-2^31-1

-2^63-2^63-1

 

0-2^32-1

0-2^64-1

tinyint类型分析:

默认是有符号的,存储-128-127;

比如:我们有一列age年龄列,年龄适合用tinyint类型,但年龄又不能为负数,这时候我们就要声明为unsigned无符号类型,如:

create table student(

id int,

age tinyint unsigned

)

整型列的可选属性

tinyint(M) unsigned zerofill;

M:宽度(在零填充的时候才有意义),不会影响存储范围

unsigned:无符号类型(非负),会影响存储范围

zerofill:0填充,默认无符号

zerofill详解:

比如:我们往student表新增一列

alter table student add age2 tinyint(5) unsigned(可写可不写) zerofill;

然后我们再往student表插入一行数据时:

insert into student(id,age2) values(1,255);

表里显示的数据会是

id  age2

1   00255

位数不够时,用0来填充就是这个意思。

另外,smallint,mediumint,int,bigint用法也是大同小异,此处就不多说了。

 

浮点型与定点型:

float(M,D),decimal(M,D)

M:代表精度,即总位数(不包含小数点)

D:代表标度,即小数位数

比如float(6,2),代表的取值范围为-9999.99-9999.99

注意:和整型有一点不同的是float的M是影响它的取值范围的,而整型则不会。

float和decimal的区别在于:decimal表达的值更精确,比如我们创建一张商品表:

create table goods(

   id int primary key auto_increment,

   floatprice float(9,2) not null default 0.00,

   decimalprice decimal(9,2) not null default 0.00);

然后插入一行数据:

insert into (name,floatprice,decimalprice) values('法拉利',1234567.23,1234567.23);

goods最终显示的结果是:

id   name   floatprice   decimalprice

1    法拉利  1234567.25   1234567.23

由此可见它们谁更加精确了。

 

字符型:

char(M),varchar(M)

类型 宽度 可存字符 实存字符(i<=M) 实占空间 利用率
char M M(0-255字节) i M i/M<=100%
varchar M M(0-65535字节) i i字符+(1-2个字节) i/(i+1-2)<100%

char和varchar的主要区别:

1.char:定长,M个字符,如果存的小于M个字符,实占M个字符,如果不够M个字符,内部会用空格来补全;

  如果某列尾部值存在空格,用char的话会造成空格的丢失:

  比如我们创建一张学生表:

  create table stu(

    id int primary key auto_increment,

    name char(8) not null default '',

    waihao varchar(8) not null default '');

insert into stu(name,waihao) values('lisi  ','lisi  ');

这里某人的姓名就是lisi+两个空格

然后我们查询的时候

select concat(name,'!'),concat(waihao,'!') from stu;这里用concat是为了让大家看出效果

结果为:

id      name      waihao

1       lisi!      lisi  !

可见,char类型的name列的空格丢失了,为什么呢?

因为char类型,我们这里定义了8个字符,我们实际存储的lisi+加两个空格只有六个字符,它内部会再用2个空格再帮我们补全8个字符,而当我们查询的时候,它会把后面的空格全部去掉,这样就造成我们空格的丢失了。

  varchar:变长,M个字符,如果存的小于M个字符,设为N,N<=M,实占N个字符

2.它们的利用率

3.速度上char会比较快

 

char和varchar的选择原则,以下三方面来考虑:

1.空间利用率,比如四字成语表,就可以用char(4),可以保证空间百分百利用;

  而像个人简介,微博这种就应该用varchar;

2.速度上,比如用户名,如果用char,可能会浪费几个字节空间,但从速度上来考虑,当用户注册量非常大的时候,还是选择用char比较好。

 

最后还有一个text类型的,它是文本类型,可以存储比较大的文本段,搜索速度稍慢,因此如果不是特别大的内容,建议用char,varchar来代替;

text还有一个要注意的:不能给text类型的字段加默认值。

 

三、日期/时间类型

1.year

1个字节,表示1901-2155年,[0000,表示错误时的选择]

如果输入两位,'00-69',则表示的是2000-2069年;'70-99',则表示的是1970-1999年;

如果嫌记得麻烦,就四位一起输咯。

2.date

典型格式:1990-09-14;

表示的范围:1000-01-01 到 9999-12-31

3.time

典型格式:hh:mm:ss

表示的范围:-859:59:59->859:59:59

4.datetime

典型格式:yyyy-mm-dd hh:mm:ss

表示的范围:1000-01-01 00:00:00->9999-12-31 23:59:59

5.时间戳

1970-01-01 00:00:00到当前的秒数;

一般存注册时间,商品的发布时间并不是用datetime类型来存储,而是用时间戳,

因为datetime虽然直观,但计算不方便。

而用int类型来存储时间戳,方便计算,对于显示来说也方便格式化。

posted on 2012-06-21 22:27  郑志伟  阅读(849)  评论(1编辑  收藏  举报

导航