要求:1、父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
2、数据表的存储引擎只能为InnoDB。
3、外键列和参照列必须具有相似的数据类型。其中数字的长度或是否有符号位等属性必须相同;而字符长度可以不同。
4、外键列和参照列必须创建索引,如果外键列不存在索引的话,MySql将自动创建索引
约束分为表级约束和列级约束:
表级约束:可同时对两个或两个以上的字段使用
列级约束:只能对一个字段使用
约束按照功能分:
NOT NULL(非空约束)
PRIMARY KEY(主键约束)
UNIQUE KEY(唯一约束)
DEFAULT KEY(默认约束)
FOREIGN KEY(外键约束)
1、插入记录:
INSERT [INTO] tbl_name [(col_name,....)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...(可以一次性写入多条记录)
INSERT [INTO] tbl_name SET col_name={exp | DEFAULT},...(可以使用子查询,只能一次插一条记录)
INSERT [INTO] tbl_name [(col_name,...)] SELECT ...(将查询结果插入到指定数据表)
2、更新记录:
单表更新:UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1 | DEFAULT} [,col_name2 | DEFAULT]... [WHERE where_condition] (若不加WHERE,则所有数据全部更新)
3、删除记录:
单表删除:DELETE FROM tbl_name [WHERE where_condition]
4、查找记录:
SELECT select_expr [,select_expr ....]
[
FROM table_references
[WHERE where_condition]
[GRDEP BY {col_name | expr | position} [ASC | DESC],...]
[HAVING where_condtion]
[ORDER BY {col_name | expr | position} [ASC | DESC],...
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
]
查询表达式:每一个表达式表示想要的一列,必须有至少一个。
多个列之间以英文分隔。
星号(*)表示所有列,table_name.*可以表示命名表的所有列。
查询表达式可以使用[AS] alias_name为其赋予别名。
别名可用于GROUP BY,ORDRE BY或HAVING子句。
SELECT语句中字段出现的顺序将影响结果集中字段的顺序;
SELECT中的别名也将影响结果集中字段的名称
查询表达式的别名中AS可以写也可以不写,但一般要将AS写上
WHERE 条件表达式:对记录进行过滤,如果没有指定WHERE子句,则显示所有记录。
在WHERE表达式中,可以使用MySql支持的函数或运算符。
GROUP BY(查询结果分组):[GROUP BY {col_name | position} [ASC | DESC],...]
ASC:升序(默认) DESC:降序
HAVING(分组条件):[HAVING where_condition]
ORDER BY(对查询结构进行排序):[ORDER BY {col_name | expr | position} [ASC | DESC],...]
LIMIT(限制查询结果返回的数量):[LIMIT {[offset,] row_count | row_count OFFSET offset}]