上文已描述查询全表语句,回顾一下
SELECT * FROM my_contacts;
我们想知道,没有赋值的列显示什么?从结果中可以看到,显示NULL,它的含义是什么?
它不等于0,0是字符。NULL代表未定义的值。不等于0,也不是空字符串变量。有些列不允许为空,只要使用NOT NULL设置就可以实现了。
CREATE TABLE my_contacts
(
last_name VARCHAR(30) NOT NULL,
first_name VARCHAR(20) NOT NULL
);
让我们考虑我们之前建表时的情况,哪些列是不应该空的
CREATE TABLE my_contacts
(
last_name VARCHAR(30) NOT NULL,
first_name VARCHAR(20) NOT NULL,
email VARCHAR(50) NOT NULL,
gender CHAR(1),
birthday DATE,
profession VARCHAR(50),
location VARCHAR(50),
status VARCHAR(20) NOT NULL,
interests VARCHAR(100),
seeking VARCHAR(100)
);
这样我们设置了4个不能为空的列字段,可以延伸下,我们在一张学生表中,通常姓名、学号可以为空吗?如果有一项身份证号的话,是不是也应该设置为NOT NULL囔?对,这就是对列字段的属性进行定义,或者叫做约束。
用DEFAULT填补空白
如果某些列有某个特定的值,我们可以把特定值指定为DEFAULT默认值。只要没有指定特定值,在DEFAULT关键字后的值会在每次新增记录时自动填充,作为默认值。
CREATE TABLE doughnut_list
(
doughnut_name VARCHAR(10) NOT NULL,
doughnut_type VARCHAR(6) NOT NULL,
doughnut_cost DEC(3,2) NOT NULL DEFAULT 1.00
)
如果插入的doughnut_cost的值不填的话,就会显示1.00
小结
- CREATE DATABASE
- USE DATABASE
- CREATE TABLE
- NULL与NOT NULL
- DEFAULT
- DROP TABLE
- DESC
- INSERT
SELECT * from my_contacts;
当我们需要查找的不是整个表单,而是我们要找的某一条数据时,该怎么做囔?如果表非常长,我们自己找起来就很慢了,也很可能出错。有没有可能只找我想找的人囔?比如我知道他或她的名字,邮箱,或者是其他条件囔。这时可以使用WHERE子句检查查找列中的每个值是否等于要查找的条件。例如first_name是否等与Anne就可以用WHERE=‘Anne’,如果符合返回整行数据,不符合则不返回。
SELECT * FROM my_contacts WHERE first_name = 'Anne';
这里(*)告诉RDBMS返回表中所有列。当然,如果不想显示所有列,还可以使用其他方法,之后的内容会介绍。
这里Anne带引号,那么哪些数据类型需要引号囔?
单引号 | 不用引号 |
CHAR | DEC |
VARCHAR | INT |
DATE | |
DATETIME,TIME,TIMESTAMP | |
BLOB |