具体数据类型见这篇博客
CREATE TABLE[IF NOT EXISTS] tbl_name(字段名称字段类型[完整性约束条件])ENGINE=引擎名称 CHARSET='编码方式”
create table t1(id tinyint); # 创建 tinyint类型 tinyint 范围-128-128
create table t2(x tinyint unsigned); # 创建无符号整数
对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制,所以在创建表时,如果字段采用的是整型类型,完全无需指定显示宽度, 默认的显示宽度,足够显示完整当初存放的数据
字段限制特点(5,3)前一位表示所有的位数,后一位表示小数个数
create table t10(name char(4)) # 超出四个字符报错,不够四个字符空格补全
create table t11(name varchar(4)) # 超出四个字符报错,不够四个有几个就存几个
分类
date:2019-05-01
time:11:11:11
Datetime: 2019-01-02 11:11:11
Year:2019
create table student(
id int,
name char(16),
born_year year,
birth date,
study_time time,
reg_time datetime
);
?
create table user(
id int,
name char(16),
gender enum('male','female','others')
);
插入下面数据时第一句就会报错因为XXX不在创建的枚举类型中
insert into user values(1,'小明','xxx') # 报错
insert into user values(2,'二明','female') # 正确!
create table teacher(
id int,
name char(16),
gender enum('male','female','others'),
hobby set('read','sleep','run','singing')
);
插入的时候只要是插入的数据在集合中就可以,值可以没有(MySQL80),可以是一个,也可以全都是。
insert into teacher values(1,'小明','male','read,sleep')
有时候插入数据的时候,要限制不为空,但是这个时候没有插入值,我们可以设置默认值,让默认值去填充没有插入的数据
create table student2(
id int,
name char(16) not null,
gender enum('male','female','others') default 'male'
);
当设置字段的默认值的时候,不写数据也不会出错
insert into student2(id,name) values(1,'小明')
mysql> select * from student2;
+------+--------+--------+
| id | name | gender |
+------+--------+--------+
| 1 | 小明 | male |
+------+--------+--------+
create table user1(
id int unique,
name char(16)
);
insert into user1 values(1,'小明'),(1,'小蓝') # 报错
insert into user1 values(1,'小明'),(2,'小蓝') # 成功
将多个字段设置为唯一,只有当多个字段的值出现重复时才会出现错误。
create table server(
id int,
ip char(16),
port int,
unique(ip,port)
)
insert into server values(1,'127.0.0.1',8080); # 成功
insert into server values(2,'127.0.0.1',8080); # 报错
insert into server values(1,'127.0.0.1',8081); # 报错
单从约束角度来说primary key就等价于not null unique,指定not null 和unique两个字段的时候也会将字段设置为主键。
除了约束之外,它还是innodb引擎组织数据的依据,提升查询效率。
一张表中必须有且只有一个主键,如果你没有设置主键,那么会从上到下搜索直到遇到一个非空且唯一的字段自动将其设置为主键。
如果表里面没有指定任何的可以设置为主键的字段,那么innodb会采用自己默认的一个隐藏字段作为主键,隐藏意味着你在查询的时候无法根据这个主键字段加速查询了
索引:类似于书的目录,没有主键就相当于一页一页翻着查
一张表中通常都应该有一个id字段,并且通常将改id字段作成主键
create table t12(
id int primary key,
name char(16),
age int not null unique,
addr char(16) not null unique
)engine=innodb;
desc t12;
-- 将ID字段设置为主键
mysql> desc t12;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | char(16) | YES | | NULL | |
| age | int(11) | NO | UNI | NULL | |
| addr | char(16) | NO | UNI | NULL | |
+-------+----------+------+-----+---------+-------+
多个字段联合起来作为表的一个主键,本质还是一个主键
create table t18(
ip char(16),
port int,
primary key(ip,port)
);
mysql> desc t18;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| ip | char(16) | NO | PRI | NULL | |
| port | int(11) | NO | PRI | NULL | |
+-------+----------+------+-----+---------+-------+
原文:https://www.cnblogs.com/ruhai/p/10882946.html