一、数据类型
1、数值类型
下表显示了需要的每个整数类型的存储和范围
类型 | 存储(字节) | 有符号数值取值范围 | 无符号数值取值范围 |
---|---|---|---|
TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 |
MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
INT | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
BIGINT | 8 | -2^63 ~ 2^63-1 | 0 ~ 2^64-1 |
id int(11), 中的
11
表示的是显示宽度(Display Width),而不是值的范围。显示宽度是指当数值的位数少于显示宽度时,在显示数值时会在前面填充空格以达到指定的宽度。如果数值的位数超过显示宽度,则会显示全部数值,忽略这个宽度设置。
2、日期和时间类型
3、字符串类型
类型名称 | 说明 | 存储需求 |
---|---|---|
CHAR(n) | 固定长度非二进制字符串 | M 字节,1<=M<=255 |
VARCHAR(n) | 变长非二进制字符串 | L+1字节,在此,L< = M和 1<=M<=255 |
TINYTEXT | 非常小的非二进制字符串 | L+1字节,在此,L<2^8 |
TEXT | 小的非二进制字符串 | L+2字节,在此,L<2^16 |
MEDIUMTEXT | 中等大小的非二进制字符串 | L+3字节,在此,L<2^24 |
LONGTEXT | 大的非二进制字符串 | L+4字节,在此,L<2^32 |
ENUM | 枚举类型,只能有一个枚举字符串值 | 1或2个字节,取决于枚举值的数目 (最大值为65535) |
SET | 一个设置,字符串对象可以有零个或 多个SET成员 | 1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员) |
char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
注意,char(n)是固定长度的数据类型,varchar(n)是可变长度数据类型
二、数据约束
主键 primary key:
主键具有唯一标识性即设定了主键的列的值必须是唯一的并且非空。常用做列表里id的标识约束,类型为int unsigned
-- 在创建表时创建主键
CREATE TABLE students (
id INT NOT NULL,
name VARCHAR(50) NOT NULL,
age INT,
PRIMARY KEY (id)
);
-- 使用多列做复合主键
CREATE TABLE orders (
order_id INT NOT NULL,
customer_id INT NOT NULL,
order_date DATE,
PRIMARY KEY (order_id, customer_id) --order_id和customer_id两列做复合主键
);
-- 在表创建后添加主键
ALTER TABLE students
ADD PRIMARY KEY (id);
非空:
即此字段不能设置为空
create table t1(
name varchar(10) not null
);
唯一标识unique:
即此字段不能出现重复的值
create table t1(
name char(10) primary key,
grade int unique
);
默认default :
不填写,字段对应默认值,填写的话已填写的为准
外键 foreign key:
主键保证了表中每一行数据的唯一性,而外键保证了表与表之间的数据关联
-- 表不存在时,在表里面创建
CREATE TABLE 子表 (
列名 数据类型,
...
FOREIGN KEY (外键列名) REFERENCES 父(主)表(父表列名)
);
--例
create table employees (
id int PRIMARY KEY,
name varchar(100),
department_id int,
foreign key (department_id) references departments(id)
);
-- 表存在时
ALTER TABLE 子表
ADD CONSTRAINT 外键约束名
FOREIGN KEY (外键列名) REFERENCES 父表(父表列名);
-- 例
alter table employees
add constraint fk_department
foreign key (department_id) references departments(id);
自增长:
auto_increment 每新增一条记录,id主动加一
-- 在创建时前设置
create table tab1(
id int auto_increment,
name varchar(10) not null,
primary key(id)
)
--表存在后创建
alter table tab1 modify column id auto_increment;