Fork me on GitHub

MySQL启动&MySQL中的数据类型

MySQL命令行启动连接及退出

启动(重启、关闭)mysql

  • windows: net start(restart、stop) mysql
  • linux: server start(restart、stop) mysql

连接mysql服务器

mysql -hIP地址 -u用户名 -p密码 -p3306

1
2
3
4
-h 主机,如果使用本机的mysql可省略
-u 后面加上用户名
-p(第一个) 后面加上密码,若省略密码,则会在敲完回车后让你输入
-p3306 端口,默认为3306,可省略

断开连接

1
2
3
1、quit
2、exit
3、\q

MySQL中的数值类型

整数类型

整数类型 字节 最小值 最大值
tinyint 1 有符号: -128 有符号:127
    无符号:0 无符号:255
smallint 2 有符号:-32768 有符号:32767
    无符号:0 无符号:65535
mediumint 3 有符号:-8388608 有符号:8388607
    无符号:0 无符号:1677215
int、integer 4 有符号:-2147483648 有符号:2147483647
    无符号:0 无符号:4294967295
bigint 8 有符号:-9223372036854775808 有符号:9223372036854775807
    无符号:0 无符号:18446744073709551615

注: 如果值超过类型范围,会发生”out of range”错误提示,整数类型默认有符号,若需要无符号则需要加上unsigned定义,如:tinyint unsigned

显示宽度

整形支持显示宽度,即最小显示位数,比如int(11)表示最少使用11位数字表示这个数,如果位数不够,需使用zerofill,即使用0来做前导。若数字位数超过显示宽度,则显示本身。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
create table stu(
id int(5),
age int(5) zerofill   # 显示宽度为5
);

#插入测试数据
insert into stu values (1,23),(2,123456);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> select * from stu;
+------+--------+
| id   | age    |
+------+--------+
|    1 |  00023 |
|    2 | 123456 |    #超过显示宽度5就显示值本身
+------+--------+

浮点数类型

浮点数类型 字节 最小值 最大值
FLOAT 4 ±1.175494351E-38 ±3.402823466E+38
DOUBLE 8 ±2.2250738585072014E-308 ±1.7976931348623157E+308

定点数类型

定点数类型 字节 描述
dec(M,D), decimal(M,D) M+2 最大取值范围与 DOUBLE 相同,给定 DECIMAL 的有效取值范围由 M 和 D决定

位类型

位类型 字节 最小值 最大值
bit(M) 1~8 BIT(1) BIT(64)

MySQL中的字符类型

数据类型 字节 描述及储存需求
char(M) M M为0~255之间的整数
varchar(M) 值的长度+1 M 为 0~65535 之间的整数
tinytext 值的长度+2 允许长度 0~255 字节
text 值的长度+2 允许长度0~65535字节
mediumtext 值的长度+3 允许长度0~167772150字节
longtext 值的长度+4 允许长度0~4294967295字节
1
CHAR和VARCHAR很类似,都用来保存MySQL中较短的字符串。二者的主要区别在于存储方式的不同CHAR列的长度固定为创建表时声明的长度,长度可以为从0~255的任何值;而VARCHAR列中的值为可变长字符串,长度可以指定为0~255或者65535之间的值。在检索的时候CHAR列删除了尾部的空格,而 VARCHAR 则保留这些空格。

举个栗子:

1
2
3
4
5
6
7
char(10)和varchar(10)

	相同点:都是不能超过10个字符
	不同点:char你输入5个字符,它还是占用了10个字符
		varchar你输入5个字符,他会返还多余的空间
		char的最大长度是255
		varchar的理论长度是65535
1
2
3
4
5
6
7
8
9
10
11
12
create table test(
  name varchar(32766)
  )charset=gbk;


#utf8在创建的时候报错了,最多支持21845个字符,因为utf8一个汉字要使用3个字符

create table test(
  name varchar(65535)
  )charset=gbk

#utf8在创建的时候报错了,最多支持32767个字符,因为gbk一个汉字要使用2个字符

MySQL中的枚举类型

枚举类型简单来说,插入数据时就是从你创建时所枚举的值的集合中选取一个值插入,插入其他值报错,可直接输入值插入,也可以使用下标插入

注:如插入的为字母,不区分大小写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
create table test(
name varchar(32),
sex enum('男','女','保密')
);

insert into test values('王小明','男');
#插入正常
insert into test values('李晓磊','man');
#插入报错
insert into test values('王小虎',1);
#插入成功

枚举型的优点:
1.限制值
2.节省空间
3.运行效率高

MySQL中的set类型

set类型与enum类型十分类似,也是椅子字符串对象,里面可以包含0~64个对象。

Set 和 ENUM 除了存储之外,最主要的区别在于 Set 类型一次可以选取多个成员,而 ENUM 则只能选一个。

1
2
3
4
5
6
7
8
9
10
create table test2(
name varchar(32),
hobby set('吃','睡觉','喝水','鉴黄') 
); 

insert into test2 values('唐马儒','吃,睡觉,鉴黄');  
# 插入成功

insert into test2 values('唐马儒2','吃,睡觉,看书');
# 插入失败

MySQL中的时间类型

日期和时间类型 字节 最小值 最大值
data 4 1000-01-01 9999-12-31
time 3 -838:59:59 838:59:59
datatime 8 1000-01-01 00:00:00 9999-12-31 23:59:59
year 1 1901 2155
timestamp 4 19700101080001 2038 年的某个时刻
  • data: 仅表示时间的日期部分,如:2008-08-08
  • time: 表示时间部分,也表示时间间隔,如:11:11:11
  • datatime: datatime时data与time的组合,如: 2008-08-08 11:11:11
  • year: 占用一个字节,最多只能是255个数,以1900年为基数,范围1900+1 ~ 1900+255
  • timestamp: 时间戳,从1970年1月1日 00:00:00秒的格林威治时间开始计算,在python中是特殊类型,但在mysql中显示为datatime格式
1
2
3
4
5
timestamp在格式上和datetime是一样的,它们的区别在于:

datetime 从1到9999,而timestamp从1970年~2038年.

timestamp占用4个字节,到2038年超过4个字节的长度了.

注: 如需要插入当前时间,可以使用now()进行插入

MySQL中的布尔类型

mysql不支持布尔型,所以用1和0代替.

1
2
3
4
5
6
7
8
9
10
11
create table test8(
num boolean
);

insert into test8 values(True);
insert into test8 values(1);
insert into test8 values(False);
insert into test8 values(0);
insert into test8 values('A');#错误

布尔型的使用是比较少的,可以用tinyint代替,或者用enum代替