目标
1)数据约束
2)数据库设计(表约束)
3)存储过程
4)触发器
5)mysql权限问题
1.SQL语句分类:
DDL:数据库定义语言
create/drop/alter
DML:数据库操作语言
insert/delete/update/truncate
DQL: 数据库查询语言
select/show
2.数据约束,也叫表的约束
什么是数据约束?
对用户操作表的数据进行约束。
常见约束:
1)默认值;DEFAULT
作用:当用户对使用默认值得字段不插入值得时候,就会使用默认值。
语法: DEFAULT
2)非空;NOT NULL
作用:限制字段必须赋值。
语法: NOT NULL
CREATE TABLE student(
id INT,
NAME VARCHAR(20),
gender VARCHAR(2) NOT NULL -- 非空
)
INSERT INTO student(id, NAME, gender) VALUES(1, "李四", NULL) -- 系统会自己加一个空字符串。在工具中可以使用NULL值,如果是在terminal就不会越过,会报错。
非空字段必须赋值,非空字段不能赋NULL值。
3)唯一;UNIQUE
作用:限制有值得情况下唯一性,可有有多个NULL值。
4)主键;PRIMARY KEY
作用:非空+唯一。
设计表的时候,主键一定要是非业务含义的。
5)自增长;AUTO_INCREMENT
作用:自动递增。自增长的字段可以不赋值。
例子: id INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT,
— 从1开始
注意:ZEROFILL
, 零填充。(就是从0001)开始,如果没有ZEROFILL,那么就从1开始。
注意:
DELETE FROM studen
; — 不影响自增长约束。
TRUNCATE TABLE student;
— 可以影响自增长约束
6)外键;“
作用:约束两张表的数据。
3.关联查询
交叉连接查询,不推荐,会产生笛卡尔成绩现象。
SELECT empName,deptName FROM employee,dept;
内连接查询
需求:查询员工及所在部门(显示员工姓名,部门名称)
夺标查询规则:
1)确定查询哪些表
2)确定查询哪些字段
3)标语表之间连接条件
eg:
SELECT empName, deptName -- 2) 确定查询哪些字段
FROM employee,dept -- 1) 确定查询哪些表
WHERE employee.deptId=dept.id -- 3) 表与表之间连接条件(规律:了解条件数量是连接数量-1)
-- 内连接另外一种语法
SELECT empName, deptName
FROM employee
INNER JOIN dept -- 内连接的表
ON employee.deptId=dept.id;
-- 使用别名
-- 内连接另外一种语法
SELECT empName, deptName
FROM employee AS e -- 可以省略 AS
INNER JOIN dept AS d -- 内连接的表
ON e.deptId=d.id;
左外连接查询:使用左边表的数据去匹配右边表的数据,如果符合连接条件的结果则显示,如果不符合,就不显示。注意:左外连接:左边的数据一定会完整显示,右边的如果没有就显示NULL。
左外连接就是左连接。
SELECT d.deptName, e.empName
FROM dept d
LEFT OUTER JOIN employee e -- 左外连接
ON d.id=deptId;
右外连接查询:
右外连接就是右连接。
使用右边表的数据去匹配左边表的连接数据,如果符合连接条件的结果。