一、外键约束
1、当一张表中需要引用另一张表中的主键时,就需要使用外键。
2、关联主键的方式有两种。第一种是在建表的时候添加外键约束(不建议);第二种方式是通过ALTER语句添加外键约束。
(1)方式一
过于复杂,操作意义不大
(2)方式二
如下例子所示:将students表的gradeid字段与grade表的gradeid进行约束;
ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);
3、有外键约束的表,不能直接删除。
4、上述两种方式建立的都是物理外键,是属于数据库级别的外键,一般不建议使用。
5、工程中使用外键的方式。
数据库只作为存数据库的载体,当需要使用外键的时候,就通过程序实现。这样可以避免约束过多带来耦合的问题。
二、 DML语言
1、数据库的意义:数据存储、数据管理
2、DML语言:数据库操作语言。包括:
- insert(插入)
- update(修改)
- delete(删除)
3、insert语句
(1)单行插入
注意:插入的字段用 ` ` 引用起来,values中的值用 ' ' 引用起来;
INSERT INTO `newstaff` (`name`,`speak`,`email`) VALUES ('qq','en','qqq@qq.com');
(2)多行插入
多行插入即在values中用括号和逗号将每条数据引用起来;
INSERT INTO `newstaff` (`name`,`speak`,`email`) VALUES ('qq','en','qqq@qq.com'),('bb','en','bb@bbb.com');
注意:字段名如果省略,则values中的值必须一一对应!
4、update语句
(1)带条件修改
注意:where的条件语句可以使用:>、<、<>(不等于)或!=、=、between..and ..、AND、OR等操作符。
UPDATE `newstaff` SET NAME='马云' WHERE id='1';
(2)不带条件的修改
如果不带条件则代表将数据库中所有的值都进行修改。一般不要这样操作。
UPDATE `newstaff` SET `name`='马云';
(3)修改多个值。即通过逗号分隔多个需要修改的字段。
UPDATE `newstaff` SET `name`='马云',`email`='qqq.@163.com' WHERE id='1';
(4)value可以是个具体的值,也可以是一个变量。
UPDATE `newstaff` SET `name`=DATETIME,`email`='qqq.@163.com' WHERE id='1';
5、delete语句
(1)delete语法
DELETE FROM `newstaff` WHERE id='1';
(2)truncate删除
TRUNCATE `newstaff`;
delete和truncate的区别:
- delete清空表的时候,不会将自增计数变量清零,即意味着表中下一个插入的数据,会在清零之前的数据基础上自增;
- truncate清空表的时候,会将自增计数变量清零,即清空之后重新计数;
(3)delete的特点
- 当表的引擎是InnoDB时,如果使用delete清零,当mysql重启之后,计数变量依然会清零,这是因为InnoDB的计数变量是存在内存中的;
- 当表的引擎是MyISAM时,使用delete清零,不管mysql是否重启,计数变量都不会清零,这是因为MyISAM的计数变量是存在硬盘中的;
三、DQL语言
1、DQL即查询语句
2、简单的指定查询
select `studenteNo`,`studentName` FROM student where id='1';
3、别名查询
select `studenteNo` as 学号,`studentName` as 学生姓名 FROM student as s where i=10;
4、使用函数查询
select concat('姓名',`studenteNo`) as 新名字 FROM student;
函数concat(a,b)作用:将字段b的值拼接到字符a后面,作为结果返回。
5、去重查询
select distinct `studentNo` from result;
将返回的`studentNo`的数据进行去重;
6、查询数据库版本信息
select version();
7、数学计算
将计算结果加1,并作为计算结果。
select `studentNo`,`studentReult`+1 as '提分后' from result;
select语句可以进行数学计算;
select 100*3-1 as 计算结果;
8、where查询的特殊用法
(1)BETWEEN ... AND....
查询分数在50到100之间的的学号;
select studentNo from result where score between 50 and 100;
(2)where语句支持逻辑运算符,包括“与”、‘或’、‘非’
(3)模糊查询
- like
查询名字以“李”开头的学生名字。%表示若干个字符,_表示一个字符。
select `studentsName` from students where `studentsName` like '李%';
- in
select `studentsName` from students where `studentsName` in ('小明','小华','小鹏);
- null和not null
#本章使用的sql语句
1、添加外键
ALTER TABLE `当前表名`
ADD CONSTRAINT `FK_当前表需要添加约束的字段名` FOREIGN KEY(`当前表需要添加约束的字段名`) REFERENCES `被引用表名`(被引用字段名);
2、insert 语句
(1)单行插入
insert into 表名([字段名1,字段名2]) values('值1','值2');
[]代表可选项,实际写的是去掉[];可以不写,如果不写则代表按照字段顺序逐个写入values中的值;
(2)多行插入
insert into 表名([字段名1,字段名2]) values('值1','值2'),('值1','值2');
注意:使用 () 和 , 将多笔记录进行区分
3、update语句
(1)带条件修改
update `表名` set `字段名`=`修改之后的值` where 条件;
(2)不带条件修改
update `表名` set `字段名`=`修改之后的值`;
4、delete语句
(1)delete from `表名` [条件]; --不会清空计数变量
(2)truncate `表名`; --会清空计数变量
5、select语句
(1)别名查询
select `studenteNo` as 学号,`studentName` as 学生姓名 FROM student as s where i=10;
(2)使用函数查询
select concat('姓名',`studenteNo`) as 新名字 FROM student;
(3)去重查询
select distinct `studentNo` from result;
(4)查询数据库版本
select version();
(5)between and 查询;
select studentNo from result where score between 50 and 100;
(6)like查询
select `studentsName` from students where `studentsName` like '李%'; --将所有以李开头的名字都查出来;
select `studentsName` from students where `studentsName` like '李_'; --将所有以李开头的二字名字都查出来;
(7)in查询
select `studentsName` from students where `studentsName` in ('小明','小华','小鹏);
(8)null和not null