主键和外键<面试题>
主键:能够唯一标识信息表中的一条数据的字段/字段组
#ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY 表名(主键字段名);
ALTER TABLE school_stu
ADD CONSTRAINT pk_stu_stuId
PRIMARY KEY school_stu(stuId);
外键<面试题>
外键:在一张表中的某个字段引用的数据来自另一张表的某个字段的信息。
主表:它的主键一般是需要被从表引用 从表:在其中拥有外键 可以引用主表的主键信息
grade主表 student从表
实现物理外键 通过SQL语句将外键绑定好 可以保证数据一致性
ALTER TABLE school_stu
ADD CONSTRAINT fk_stu_grade
FOREIGN KEY (gradeId)
REFERENCES grade(gradeId);
为了能够方便我们进行数据表操作 在实际项目中一般不设置物理外键 而设置逻辑外键
– CUD SQL
DDL 数据定义语言 CREATE DROP …
[DML] 数据操作语言 增删改
DQL 数据查询语言
DCL 数据控制语言
数据添加 INSERT
INSERT INTO 表名[(要添加值的字段列表)] VALUES(字段值列表<必须按照前面的顺序赋值>);
INSERT INTO school_stu (stuId,stuName,stuPwd) VALUES(2,‘石浩然’,‘root’);
如果你省略了字段列表 则需要将所有字段进行赋值 且严格按照顺序
INSERT INTO school_stu VALUES(3,‘呵呵’,‘hehe’,‘女’,2,‘12312’,‘x’,‘x’,‘xxx’,‘2019-05-23’);
如果有些字段有默认(主键有自动递增) 则可以使用null来表示 / 你不需要去给此字段赋值
INSERT INTO school_stu (stuId,stuName) VALUES(null,‘我是测试的’);
同时添加多条数据
INSERT INTO school_stu(stuName) VALUES(‘陈旭’),(‘李天一’),(‘努力过’);
添加多条数据(了解)
INSERT INTO school_stu(stuName)
SELECT ‘呵呵1’ UNION
SELECT ‘呵呵2’ UNION
SELECT ‘呵呵3’
将school_stu的id和名称 赋值到stu表中的对应列
必须保证要添加数据的表提前存在!!!!
INSERT INTO stu(stuId,stuName)
SELECT stuId,stuName FROM school_stu;
将school_stu的id和名称 赋值到一张新表newstu中
CREATE TABLE newstu(
SELECT stuId,stuName FROM school_stu
);
数据修改 UPDATE
修改语句
UPDATE 表名 SET 字段名 = 字段值,… [where条件语句]
如果不添加条件 则默认为全表更新
UPDATE school_stu SET stuName = ‘李天二’
WHERE 在哪/哪里?
WHERE 后可接一系列的判断条件 id = xxx and xxx = xx or xxx = xx and not xxx
UPDATE school_stu SET stuName = ‘李易峰’ WHERE stuId = 7;
UPDATE school_stu SET stuName = ‘李元霸’ WHERE gender = ‘男’
年级升级
UPDATE school_stu SET gradeId = gradeId + 1,phone = ‘13838384383’ WHERE stuId = 1;
数据删除 DELETE
DELETE FROM 表名 [where 条件]
DELETE FROM school_stu WHERE stuName = ‘李元霸’ AND gender = ‘男’;
TRUNCATE 可以进行数据删除
TRUNCATE TABLE school_stu;
标题<面试题>DELETE TRUNCATE的区别
相同点:都可以进行数据删除(全表删除)
不同点:DELETE可以进行条件删除 TRUNCATE只能进行全表删除
不同点:DELETE会保留自增序列 TRUNCATE除了表结构 其他数据全部清空 不会保留自增序列
不同点(先了解):TRUNCATE会结束事务 而DELETE不会影响到事务