一、创建表的完整语法
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);
解释:
类型:使用限制字段必须以什么样的数据类型传值
约束条件:约束条件是在类型之外添加一种额外的限制
注意:
1、在同一张表中,字段名是不能相同
2、宽度和约束条件可选,字段名和类型是必须的
3、最后一个字段后不加逗号
二 基本数据类型之整形
1、作用:id号,各种号码,年龄等级
2、分类:
tinyint()
int()
bigint()
3、测试:默认整形都是有符号的
对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制所以在创建表时,如果字段采用的是整型类型,完全无需指定显示宽度,默认的显示宽度,足够显示完整当初存放的数据
显示时,不够8位用0填充,如果超出8位则正常显示
create table t1(x int(8),unsigned zerofill)
SQL mode
show variables like "%mode%"; 查看SQL模式
no_engine_substitution 非严格模式
set global sql_mode="strict_trans_tables";改严格模式(session当前链接)
浮点型
作用:存储身高、体重、薪资
分类:
float()
double()
decimal
测试:
相同点
1、对于三者来说,都能存放30位小数,
不同点
1、精度的排序从低到高:float,double,decimal
2、float 与 double 类型能存放的整数位比decimal更多
create table t9(x float(255,30));
create table t10(x double(255,30));
create table t11(x decimal(65,30));
insert into t9 values(1.111111111111111111111111111111);
insert into t10 values(1.111111111111111111111111111111);
insert into t11 values(1.111111111111111111111111111111);
mysql> select * from t9;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
1 row in set (0.00 sec)
mysql> select * from t10;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
1 row in set (0.00 sec)
mysql> select * from t11;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+
1 row in set (0.00 sec)
字符类型
1、作用:姓名,地址,描述类的信息
2、分类:
char 定长
varchar 变长
3、测试:字符的宽度限制单位是字符个数
create table t12(x,char(4));#超出4个字符则报错,不够4个字符则用空格补全4个字符
create talbe t13(y varchar(4));#超出4个字符则报错,不够4个字符那么字符有几个就存几个
改模式:
set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
select char_length(x) from t12;
select char_length(y) from t13;
针对char类型,mysql 在存储时会将数据用空格补全存放在硬盘中
但会在读出结果时自动去掉末尾的空格,因为末尾的空格在以下场景中是无用
select * from t14 where name='lxx':name字段明确地等于一个值,该值后填充空格是没用
select * from t14 where name like 'lxx';#name字段模糊匹配一个值,该值后填充空格是有用的
对比char 与varchar
name char(5)
缺点:浪费空间
优点:存取速度都快
name varchar(5)
缺点:存取速度都慢
优点:节省空间
日期类型
1、作用:时间相关
2、分类:
date: 1986-11-06
time:11:11:11
datetime: 1986-11-06 11:11:11
year:1999
枚举与集合
枚举enum,多选一
集合set ,多选多
约束条件
not null +defult
不能为空与默认值连用
create table t15(
id int,
name char(16) not null,
sex enum('male','female','other') not null default "male"
);
unique:限制字段值唯一
单列唯一
create table t16(
id int unique,
name char(16)
);
联合唯一
create table server(
id int unique,
ip char(15),
port int,
unique(ip,port));
primary key :单单从约束角度去看,primary key 就等同于not null unique
强调:
1、一张表中必须有,并且只能有一个主键
查找顺序从上到下找到一个不为空且唯一的字段,如果没有就把一个隐藏的7个bytes的字段当主键
2、一张表中都应该有一个id字段,而且应该把id字段做成主键
联合主键
primary(ip,port)
auto_increment 注意点:
1、通常与primary key 联用,而且通常是给id字段加
2、auto_incremnt 只能给被定义成key(unique key,primary key)的字段加