标签:zmq2 asd zll style pat hbm clj tcap ane
约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。、
约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。
在MySQL中,通常有这几种约束:
约束类型: | 主键 | 默认值 | 唯一 | 外键 | 非空 |
---|---|---|---|---|---|
关键字: | PRIMARY KEY | DEFAULT | UNIQUE | FOREIGN KEY | NOT NULL |
1 DROP DATABASE <数据库名>
主键 (PRIMARY KEY)是用于约束表中的一行,作为这一行的唯一标识符,在一张表中通过主键就能准确定位到一行,因此主键十分重要。主键不能有重复且不能为空。
1 Id int(10)primary key 2 constraint <主键名> primary key (主键) eg constraint <app_pk> primary key (name) 3 constraint <主键名> primary key (主键,主键) eg constraint <app_pk> primary key (id,name) 4 复合主键。主键不仅可以是表中的一列,也可以由表中的两列或多列来共同标识
默认值约束 (DEFAULT) 规定,当有 DEFAULT 约束的列,插入数据为空时,将使用默认值。
1 people_num int(10) default ‘10‘, people_num有DEFAULT约束,默认值为10
DEFAULT 约束只会在使用 INSERT 语句时体现出来,INSERT语句中,如果被 DEFAULT 约束的位置没有值,那么这个位置将会被 DEFAULT 的值填充,如语句:
1 # 正常插入数据 2 INSERT INTO department(dpt_name,people_num) VALUES(‘dpt1‘,11); 3 4 #插入新的数据,people_num 为空,使用默认值 5 INSERT INTO department(dpt_name) VALUES(‘dpt2‘);
唯一约束 (UNIQUE) 比较简单,它规定一张表中指定的一列的值必须不能有重复值,即这一列每个值都是唯一的。
1 unique (phone), unique约束,phone的值唯一
当 INSERT 语句新插入的数据和已有数据重复的时候,如果有 UNIQUE约束,则 INSERT 失败,比如:
1 INSERT INTO people VALUES(01,110110); 2 INSERT INTO people VALUES(02,110110,);
外键 (FOREIGN KEY) 既能确保数据完整性,也能表现表之间的关系。
一个表可以有多个外键,每个外键必须 REFERENCES (参考) 另一个表的主键,被外键约束的列,取值必须在它参考的列中有对应值。
在 INSERT 时,如果被外键约束的值没有在参考列中有对应,则INSERT 失败:
1 INSERT INTO abc VALUES(01,110111);
可见之后将 110111 改为110110,则插入成功:
非空约束 (NOT NULL),听名字就能理解,被非空约束的列,在插入值时必须非空。
1 age int(10), 没有非空约束 2 phone int(12) not NULL, 有非空约束
在MySQL中违反非空约束,不会报错,只会有警告,比如以下语句:
#INSERT 成功 age 为空,因为没有非空约束,表中显示 NULL
INSERT INTO pp(id ,phone) VALUES(01,110);
#警告 phone 被非空约束,值为空,表中显示0
INSERT INTO pp(id ,age) VALUES(02,110);
结果如图,出现警告,但还是插入数据成功,(5.5.50版本)
,5.6
版本以上的 MySQL 会报错,禁止插入不符合非空约束的数据:
此时 pp表的内容为:
在数据库操作语句中,使用最频繁,也被认为最重要的是 SELECT 查询语句。前面用到了 SELECT * FROM table_name;
这条语句用于查看一张表中的所有内容。
而 SELECT 与各种限制条件关键词搭配使用,具有各种丰富的功能,这次实验就进行详细介绍。
SELECT 语句的基本格式为:
1 SELECT 要查询的列名 FROM 表名字 WHERE 限制条件;
如果要查询表的所有内容,则把 要查询的列名 用一个星号 *
号表示,代表要查询表中所有的列。
有时只需要查看某个表的指定的列,比如要查看people 表的 name 和 age:
1 SELECT name,age FROM people;
SELECT 语句常常会有 WHERE 限制条件,用于达到更加精确的查询。WHERE限制条件可以有数学符号 (=,<,>,>=,<=
) ,刚才我们查询了 name 和 age,现在稍作修改:
1 SELECT name,age FROM people WHERE age>25;
筛选出 age 大于 25 的结果。
或者查找一个名字为 Mary 的人的 name,age 和 phone:
1 SELECT name,age,phone FROM people WHERE name=‘Mary‘;
从这两个单词就能够理解它们的作用。WHERE 后面可以有不止一条限制,而根据条件之间的逻辑关系,可以用 OR(或) 和 AND(且) 连接:
1 #筛选出 age 小于 25,或 age 大于 30 2 SELECT name,age FROM people WHERE age<25 OR age>30;
1 #筛选出 age 大于 25,且 age 小于 30 2 SELECT name,age FROM people WHERE age>25 AND age<30;
而刚才的限制条件 age>25 AND age<30 ,如果需要包含25和30这两个数字的话,可以替换为 age BETWEEN 25 AND 30 :
关键词IN和NOT IN的作用和它们的名字一样明显,用于筛选“在”或“不在”某个范围内的结果,比如说我们要查询在dpt3或dpt4的人:
1 SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt IN (‘dpt3‘,‘dpt4‘);
而NOT IN的效果则是,如下面这条命令,查询出了不在dpt1也不在dpt3的人:
1 SELECT name,age,phone,in_dpt FROM employee WHERE in_dpt NOT IN (‘dpt1‘,‘dpt3‘);
关键字 LIKE 在SQL语句中和通配符一起使用,通配符代表未知字符。SQL中的通配符是 _
和 %
。其中 _
代表一个未指定字符,%
代表不定个未指定字符。
比如,要只记得电话号码前四位数为1101,而后两位忘记了,则可以用两个 _
通配符代替:
1 SELECT name,age,phone FROM employee WHERE phone LIKE ‘1101__‘;
另一种情况,比如只记名字的首字母,又不知道名字长度,则用 %
通配符代替不定个字符:
1 SELECT name,age,phone FROM employee WHERE name LIKE ‘J%‘;
这样就查找出了首字母为 J 的人。
有时可能需要对结果按某一列来排序,这就要用到 ORDER BY 排序关键词。默认情况下,ORDER BY的结果是升序排列,而使用关键词ASC和DESC可指定升序或降序排序。
比如,我们按salary降序排列,SQL语句为:
1 SELECT name,age,salary,phone FROM employee ORDER BY salary DESC;
SQL 允许对表中的数据进行计算。对此,SQL 有 5 个内置函数,这些函数都对 SELECT 的结果做操作:
函数名: | COUNT | SUM | AVG | MAX | MIN |
---|---|---|---|---|---|
作用: | 计数 | 求和 | 求平均值 | 最大值 | 最小值 |
其中 COUNT 函数可用于任何数据类型(因为它只是计数),而 SUM 、AVG 函数都只能对数字类数据类型做计算,MAX 和 MIN 可用于数值、字符串或是日期时间数据类型。
具体举例,比如计算出salary的最大、最小值,用这样的一条语句:
1 SELECT MAX(salary) AS max_salary,MIN(salary) FROM employee;
使用AS关键词可以给值重命名
上面讨论的 SELECT 语句都仅涉及一个表中的数据,然而有时必须处理多个表才能获得所需的信息。例如:想要知道名为 "Tom" 的员工所在部门做了几个工程。员工信息储存在 employee 表中,但工程信息储存在project 表中。
对于这样的情况,我们可以用子查询:
1 SELECT of_dpt,COUNT(proj_name) AS count_project FROM project 2 WHERE of_dpt IN 3 (SELECT in_dpt FROM employee WHERE name=‘Tom‘);
子查询还可以扩展到3层、4层或更多层。
在处理多个表时,子查询只有在结果来自一个表时才有用。但如果需要显示两个表或多个表中的数据,这时就必须使用连接 (join) 操作。
连接的基本思想是把两个或多个表当作一个新的表来操作,如下:
1 SELECT id,name,people_num 2 FROM employee,department 3 WHERE employee.in_dpt = department.dpt_name 4 ORDER BY id;
另一个连接语句格式是使用 JOIN ON 语法,刚才的语句等同于:
1 SELECT id,name,people_num 2 FROM employee JOIN department 3 ON employee.in_dpt = department.dpt_name 4 ORDER BY id;
结果也与刚才的语句相同。
标签:zmq2 asd zll style pat hbm clj tcap ane
原文地址:http://www.cnblogs.com/ljmzzyk/p/7440211.html