NULL,not null属性空约束
------------------
mysql的NULL不是数据,也不是类型!只是标识属性!
用于说明某个字段,是否可以为null(是否可以什么都不存)
NULL采用关键NULL表示!(不是字符串)
是:NULL,而不是:‘NULL’
属性:
null 表示可以为空
![](EE7DA428DF45B34C95D0683D23422349.png)
not null,表示不能为空
![](20DFE699E303D932D932290C7E09FAC8.png)
如果,在添加数据时 ,没有指定值,也可能会是NULL!
default属性,默认值约束
---------------
采用 default 关键字,来限定一个字段的默认值,在没有指定字段数据时,采用默认值!
![](B045B38AE7B37A6A50EFD6C83881D93D.png)
![](F8AC7C0D29C6359C2A39775623CC21E7.png)
default 与 null 的处理关系!
如果此时,该字段被指定了一个null:
不能使用默认值,允许为null则为null,不允许则插入失败!
![](F95937B86A37BBE9E1C16C3C63191494.png)
如果一个字段没有指定默认值,那么默认为NULL
![](998766A78B1F5B5CE0B9203D2D914813.png)
此时:如果在定义该字段时,不允许为NULL,则插入时,必须保证该字段有值才可以!
(另外一个选择是增加默认值)
![](235CDA0580D3CEFBEC827685EFC996B6.png)
默认值,存在一些特殊的标记关键字:
default,用在值中的关键字!
![](AE63A4BCBDB165B3D39143F7FEB498B3.png)
current\_timestamp,用在第一个时间戳类型的字段上,表示当前的时间!
![](09AA747E7021206B63D5E9DC90F17B8A.png)
典型在很多表上增加一个 update\_time 将其默认值设置成 current\_timestamp。就可以记录下当前记录的最后操作时间!
主键约束/唯一约束,primary unique
------------------------
站在约束的角度,限制的,该字段,值要唯一!
但是 主键 与 唯一 不是一个概念:
都是索引的一种!
主键:
可以唯一标识记录的字段,称之为主键!
唯一:
保证在某个字段上的数据是唯一的,可以设置成唯一约束!
但是,一个表,只能有一个主键!
典型的,在创建表时,主动增加一个 非实体的自然属性,充当主键,采用整型,运算速度快!
![](2B34C659B0830A003C4F62EC83BA0838.png)
其他的唯一字段,建立唯一约束!
建立:
两种方案:
![](B6227DAA1CAA0316911F9167B2AFA476.png)
一旦创建了主键:
默认就是不能为空:
![](51F4F5ED7A94EF15A59C48CAB9BF726F.png)
唯一,使用 unique key 来创建!
![](B08A42F38C41A5378D9E556BCD56ADB4.png)
![](C99B33C903D1F275128EC7DF92BE7DD4.png)
一个表可以有多个唯一,但是只能有一个主键!
注意:主键或者是唯一,都可以由 多个字段组成!
![](https://leanote.com/api/file/getImage?fileId=58557d62ab64416d7600c483)
因此,主键 与 字段的概念:字段来充当主键,不是字段就是主键!(称之为复合主键)
尽量采用 id 一个来作为主键!
![](8781961E7F7A6F37B230EFF084EDFA65.png)
### 如果管理的主键/唯一呢
删除主键:
alter table表名 drop primary key;
![](8BC0D03DB046F20EBB7EADB834752075.png)
添加主键
alter table 表名 add primary key(‘字段列表’);
![](61EE0F40969DA696AF423D5C60C3CD34.png)
删除唯一
alter table 表名 drop index index\_name;
索引的名字,可以通过 show create table 看到!
![](3B19C04FAF3601CC8ACA89951B1E6D77.png)
![](18AD22E0CC3F502A0D8F21B7879FC898.png)
增加唯一
alter table 表名 add unique key 索引名字 (字段列表)
![](3A7A10C92F5D49B9E447B0B8A45CCBD6.png)
自动增长,auto\_increment
--------------------
用于主键,只有一个字段主键,才能使用auto\_increment!
可以,从1开始,逐一递增的数值!
目的是保证唯一,计算方面!
![](B46B3BDF1457BC87B3F4C87E221A0FE7.png)
典型的,从1 开始,没有负数,可以采用 无符号 unsigned整型!
![](C237982CF7E2DC966A0ABD1956CF156F.png)
![](3CF67B279D0B459652230C4917364AE9.png)
注意: unsigned,不是列属性,是类型的一部分!(包括zerofill)因此位置上与类型在一起!
![](3C9E1DFA02AFA9C9C89F99CED092EB2A.png)
comment,注释
----------
![](CDC64BBEC545916E17486979A6DA28D9.png)
外键!
预习
==
1, 范式
2, 表实体之间的关系
3, 外键约束
4,语句(查询语句)
作业
==
1 说说那些地方可以设置编码
2 增加对 库的管理(删,增加)
增加 对 表的管理(增加,改名,删除)
增加 对 字段的管理(增加,删除)
增加 对 数据的管理 (增加,删除,编辑)
位,bit,比特,计算机可以处理的最小单元
字节,Bytes 存储的最基本单位。KB 千字节, MB,兆字节,GB,1024\*MB,TB,1024\*GB。一个字节 8 个位。 1Byte = 8 bit.
字符,char,一个显示逻辑上的单位,一个图形就是一个字符。
字,双字节
双字,4字节。
4, 编程,定义一个函数
参数为 table\_name 表名,要求大家返回一个数组,内容是当前表的结构信息!只需要字段名,如果有主键,则在返回其主键(不考虑符合主键)
f1(stu)
array(‘id’, ‘name’, ‘pk’=\>’id’)
5,建立一个学生信息表!尽可能利用多种类型!
编码:
建表,建库,建字段 设置(数据库中的数据的编码)
PHP作为mysql服务器的客户端,设置的客户端编码和连接编码(set names)
设置php返回给浏览器数据的编码,(Content-Type,header(),\<meta\>)
PHP文件本身保存的编码( 文件编码,通过文本编辑器设置)
[浏览器查看时,可以强制指定编码]