java从入门到弃坑数据库二

xiaoxiao2021-02-28  108

1.数据约束:给表添加数据约束,从而约束用户操作数据的行为。

2.默认值约束:当被约束的字段没有值插入时,会自动分配一个默认值。

CREATE TABLE student( NAME VARCHAR(20), gender VARCHAR(2)DEFAULT '男' ); INSERT INTO student(NAME) VALUES('jack'); INSERT INTO student(NAME,gender) VALUES('van',NULL); SELECT*FROM student;

只要插入数据,哪怕数据为空,也会覆盖该默认值。

3.非空约束:要求被约束的字段一定要有值,不能为null,不能不插入。

CREATE TABLE student( NAME VARCHAR(20)NOT NULL, gender VARCHAR(2) );

4.唯一约束:被约束的字段不能插入重复的值,但是可以插入多个null,所以该约束不能约束null

CREATE TABLE student( id INT UNIQUE , NAME VARCHAR(20) ); INSERT INTO student VALUES(1,'asd'); INSERT INTO student VALUES(NULL,'sdf'); INSERT INTO student VALUES(NULL,'qwe'); SELECT * FROM student;

5.主键约束:被约束的字段唯一+非空。因此一般给每张表添加一个id字段设置成主键作为记录的唯一性。

CREATE TABLE student( id INT UNIQUE , NAME VARCHAR(20) ); INSERT INTO student VALUES(1,'asd'); INSERT INTO student VALUES(NULL,'sdf'); INSERT INTO student VALUES(NULL,'qwe'); SELECT * FROM student;

6.自增长约束:初始值为0,每次新添加一条数据,被约束的字段自加1.

CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) );

一般设置id为自增长,就不用我们手动进行输入。

7.数据删除:TRUNCATE TABLE student;  该指令会删除表中数据,并使系统的自增长值置零,不会删除该表。

8.外键约束:有时根据需要,我们在创建表时会出现数据冗余的情况,即相对较长的数据在表中频繁出现,此时可以

                     用第二张表来关联第一张表中的数据,这时就需要用到外键约束。

CREATE TABLE employee( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), idDept INT ,-- 与部门相连的部门id CONSTRAINT employee_dept_fk FOREIGN KEY(idDept) REFERENCES dept(id) -- 创建外键: 外键名称 外键字段 参考 ); -- 创建部门表 约束员工的表 CREATE TABLE dept( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) );-- 创建时先创建主表(部门表),在创建附表(员工表)

约束情况:A:向附表中插入主表不存在的数据时,外键报错。

                  B:附表中修改为主表不存在数据时,外键报错。

                  C:在附表中有关联主表数据的情况下删除主表数据时,外键报错。

对应操作:A:插入数据时先插入主表数据,在插入附表数据。

                  B:修改数据时先修改主表数据,在修改附表数据。

                  C:删除数据时先删除附表数据,再删除主表数据。

9.级练技术:在拥有外键的情况下,可以使我们在修改或删除主表数据的情况下,同时影响附表的数据。

CREATE TABLE employee( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), idDept INT , CONSTRAINT employee_dept_fk FOREIGN KEY(idDept) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE -- ON UPDATE CASCADE(修改级联) ON DELETE CASCADE(删除级联) );

10.数据库设计:第一范式:要求表的每个字段必须时独立的不可分割的一个单元,即不能把多个字段的内容放在一个

                                             字段中合并。                           第二范式:在第一范式的基础上,要求表的除主键以外的字段都和主键有依赖关系,即一张表只能表

                                            示一个意思。

                          第三范式:在第二范式的基础上,要求表的除主键外的字段都只能和主键有直接决定的依赖关系。

11.多表查询:交叉连接查询:因为没有足够的连接条件而产生笛卡尔乘积。

                                                SELECT dept.name,employee.name FROM dept,employee;

                       内连接查询:SELECT dept.name,employee.name FROM dept,employee WHERE

                                            employee.idDept=dept.id;

                       左外连接查询:左表数据全显示,右表数据满足就显示,不满足显示null。

                                SELECT d.name,e.name FROM dept d LEFT OUTER JOIN employee e ON d.id=e.idDept; 

                       右外连接查询:右表数据全部显示,左表满足连接就显示。

                                SELECT d.name,e.name FROM employee e RIGHT OUTER JOIN dept d ON d.id=e.idDept;                        自连接查询:SELECT e.name AS '员工',b.name AS '上司' FROM employee e LEFT OUTER JOIN

                                             employee b ON e.bossId=b.id;

12.Mysql存储过程:

创建存储过程

-- 定义结束符号

DELIMITER 结束符号

CREATE PROCEDURE 存储过程名称 (形式参数列表)

BEGIN

         多个sql语句

END 结束符号

 

-- 调用存储过程

CALL 存储过程名称(实际参数列表);

 

参数类型:

IN 输入参数,可以携带数据到存储过程中

OUT: 输出参数,可以携带数据到存储过程外面。

INOUT: 输入输出参数。

13. 带有输入参数的存储过程:      

DELIMITER $-- 输入id查看员工信息 CREATE PROCEDURE pro_testid(IN ide INT) BEGIN SELECT * FROM employee WHERE id=ide; END $ CALL pro_testid(2);

14. 带有输出参数的存储过程:

DELIMITER $ -- 输出信息 CREATE PROCEDURE pro_testout(OUT n VARCHAR(30)) BEGIN SET n='long may the sunshine'; END $ -- 可以用SET @n 改变会话变量的值 -- 定义会话变量接收输出参数 CALL pro_testout(@n); SELECT @n;

15.存储过程的语句:

         条件判断语句:

DELIMITER $ CREATE PROCEDURE pro_testByIf(IN num INT,OUT str VARCHAR(20)) BEGIN IF num=1 THEN SET str = '星期一'; ELSEIF num= 2 THEN SET str ='星期二'; ELSEIF num=3 THEN SET str = '星期三'; ELSE SET str = '错误参数'; END IF; END $

           循环语句:

DELIMITER $ CREATE PROCEDURE pro_testwhile(IN num INT,OUT SUM INT) BEGIN DECLARE i INT DEFAULT 1; -- 定义局部变量 DECLARE result INT DEFAULT 0; WHILE i<num DO SET result=result+i; SET i=i+1; END WHILE; SET SUM=result; END $ -- 调用方法求和 CALL pro_testwhile(153,@n); SELECT @n;

16.触发器(不是数电= =):当往员工表插入,删除,修改一条数据时,同时往日志表记录下来,就要使用触发器

-- 创建员工日志表 CREATE TABLE emp_log( id INT PRIMARY KEY AUTO_INCREMENT, DO VARCHAR(50) ); -- 创建增加触发器 CREATE TRIGGER tri_empadd AFTER INSERT ON employee FOR EACH ROW INSERT INTO emp_log(DO)VALUES('增加了一条数据'); -- 创建修改触发器 CREATE TRIGGER tri_empupd AFTER UPDATE ON employee FOR EACH ROW INSERT INTO emp_log(DO)VALUES('修改了一条数据'); -- 创建删除触发器 CREATE TRIGGER tri_empdel AFTER DELETE ON employee FOR EACH ROW INSERT INTO emp_log(DO)VALUES('删除了一条数据'); INSERT INTO employee(NAME,idDept)VALUES('qwe',3); UPDATE employee SET NAME='saber'WHERE id=2; DELETE FROM employee WHERE id =5; SELECT *FROM employee; SELECT *FROM emp_log;

      

转载请注明原文地址: https://www.6miu.com/read-49660.html

最新回复(0)