如tinyint(3)中的3代表宽度,只有在有zerofill时才起作用。
tinyint signed : -128 ~ 127
tinyint unsigned : 0 ~ 255
(1):宽度,当你添加 zerofill时这个宽度才起作用,例子:
ad_type tinyint(3) unsigned zerofill not null default ‘0’,
1 --> 001
12 --> 012
123 --> 123
tinyint(2)
1 --> 01
12 --> 12
123 --> 123
tinyint(1)
1 --> 1
12 --> 12
123 ---> 123
注意这个宽度只有在有zerofill时才有效。
只有InnoDB支持外键
MyISAM不支持 : 不会出现语法错误,但没有任何实际的效果
日志系统:
create table user
(
idint unsigned not null,
usernamevarchar(100) not null,
primary key (id)
)engine=InnoDB;
create table blog
(
idint unsigned not null,
titlevarchar(100) not null,
user_idint unsigned not null comment ”发表日志的用户ID”,
keyuser_id(user_id),
foreign key (user_id) references user(id) on UPDATE RESTRICT
)engine=InnoDB;
RESTRICT :限制主表数据的删除:
CASCADE : 从表的数据也跟着删除
SET NULL : 设置值为NULL
NO ACTION : 什么也不做
注意:如果不是innodb引擎,那么这个语法不会出错,但是没有任何实际效果。
tinyint signed -128~127
tinyint unsigned 0~255
smallint signed -32768~32767
smallint unsigned 0~65535
mediumint signed -200多万~200多万
mediumint unsigned 0 ~ 400多万
int signed -20多亿~20多亿
int unsigned 0 ~ 40多
Char(255) : 255 个字符 a中国(3个字符)
Varchar : 65535个字节
Utf8:汉字=3个字节 所以varchar最多能存 65535/3个汉字
gbk/gb2312:汉字=2个字节所以最多能存 65535/2个汉字
Text : 65535 个字符
char(15)(15个字符)与varchar(15)(15个字节)有什么区别
Char(15) : abc --> 占用15个硬盘位置 --> 速度快
Varchar(15) : abc\0 --> 占用4个硬盘位置。 --> 更节省硬盘空间
性能:char >varchar > text
只有InnoDB引擎支持:
意思:多个SQL语句,要不都成功,否则就都失败。保持一致性。
典型应用:
转账:
1.我A用户减去100元
UPDATE user SET account=account-100 WHERE id=1;
2.给B用户加上100元
UPDATE user SET account=account+100 WHERE id=2;
共享锁: 其他人可以读数据,但不能修改 lock table 表名 read
排它锁: 其他不能读也不能写 lock table 表名 write
释放表:unlocktables;
注意:MYSQL的锁的阻塞的。
文件锁:
写PHP代码可以多个进程安全的同时操作一个文件。
MyISAM
全文索引(不支持中文)要使用sphinx(全文索引引擎)
表级锁定
一张表生成三个文件(表结构文件.MYF,表索引文件.MYI,表中数据文件.MYD)
InnoDB(更占空间)
行级锁定
支持事务、外键
一张表一个文件(也可以设置为两个文件,把索引单独拿出来一个文件)
什么时候是表锁:在事务如果要操作多张表中的多条记录时。
Myisam引擎和innodb引擎哪个更强空间:InnoDB更占空间。
Heap/memeroy:内存表(表在内存中,重启之后数据就丢失,因为中内存中所以操作速度非常快!)