Pulpcode

捕获,搅碎,拼接,吞咽

0%

mysql基础知识总结

cookbook

如何添加一个用户,并将数据库中所有表的权限赐予此用户:

1
2
3
CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'test623';

GRANT ALL ON testdb.* TO 'testuser'@'localhost';

关于一些修改表结构的语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 修改一个字段属性
alter table table_name modify column column_name attribute;

-- 修改表名
rename table table_name1 to table_name2;


-- 重命名字段
alter table table_name change column_old_name column_new_name attribute;

-- 在某个字段的后面添加一个新的字段
alter table table_name add new_column_name attribute after old_column_name;

-- 创建一个联合唯一索引
create unique index index_name on table_name(column1, column2);

原理

int(11)与int(3)的区别?

mysql有四种整数类型,分别是:

bigint: 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。

int:从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。

smallint:从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。

tinyint:从 0 到 255 的整型数据。存储大小为 1 字节。

int(M) M指示最大显示宽度。最大有效显示宽度是255。显示宽度与存储大小或类型包含的值的范围无关。

所以int(11)与int(3)的容量是一样的,只不过显示宽度不一样而已。

当然如果你不用zerofill是看不出来效果的,首先需要了解一点的时zerofill会把此字段标记为unsigned的。

举个例子(以下存储的值都是10):

如果现在有一张表,它的id是这样定义的:

id int(3) zerofill,

那么它select的结果是这样的:

010

还有另一张表,它的id这样定义的:

id int zerofill,

那么它select的结果是这样的:

0000000010

那么顺便说一下没有zerofill的情况,如果有一张表的id字段是这样的,无论有没有int(M)的属性:

id int,

它打印出得结果就是:

10