MySQL数据管理
外键
- 方式一:创建表的时候增加约束(较为麻烦);
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
-- 创建年纪表
CREATE TABLE `grade`(
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年纪id',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 学生表的gradeid字段要去引用年级的gradeid
-- 定义外键 key
-- 给这个外键添加约束(执行引用) REFERENCES(引用)
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`password` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`familyAddress` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
- 方式二:创建表成功之后,添加外键约束;
-- 创建年纪表
CREATE TABLE `grade`(
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年纪id',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 学生表的gradeid字段要去引用年级的gradeid
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`gradeid` INT(10) NOT NULL COMMENT '学生的年级',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`password` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`familyAddress` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 创建表的时候没有外键关系
-- ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY(作为外键的列) REFERENCES 那个表(那个字段)
ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid`
FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
注意:删除有外键关系的表的时候,必须要先删除引用别人的表,在删除被引用的表;
以上的操作都是物理外键,数据库级别的外键,不建议使用!(避免数据库过多造成干扰)。
- 数据库就是单纯的表,只用开存数据,只有行(数据)和列(字段);
- 我们想使用多张表的数据,想使用外键(用程序进行实现);
DML语言:数据操作语言
数据库意义:数据存储,数据管理;
Insert → 添加/插入语句
- 插入单行语句
-- 插入语句(添加)
INSERT INTO `grade`(`gradename`) VALUES ('大四');
-- 由于主键自增,可以省略主键
-- 如果不写字段,表会进行一一匹配
-- 一般写插入语句,我们一定要数据和字段一一对应
INSERT INTO `grade` VALUES (2,'大三');
- 插入多行数据
-- 插入多行数据
INSERT INTO `grade`(`gradename`) VALUES ('大二'),('大一')
-- 插入多个字段
INSERT INTO `student`(`name`,`password`,`sex`) VALUES ('张三','aaaaa','男'),('李四','bbbbbb','女')
语法:INSERT INTO 表名('字段1','字段2','字段3') VALUSE ('值1','值2','值3'),('值1','值2','值3')
。
注意事项:
1. 字段和字段之间使用英文逗号隔开;
2. 字段是可以省略的,但是后面的值必须要和创建的表的列一一对应,不能少;
INSERT INTO `student` VALUES (4,'王五','123456','男','1998-09-17','北京','7987@qq.com')
3. 可以同时插入多条数据,VALUES 后面的值需要使用逗号隔开VALUES ('',''),('',''),...
;
update → 修改语句
update 修改谁 (条件) set 原来的值 = 新值;
- 修改单条数据
-- 修改学员名字
UPDATE `student` SET `name`='郭陈' WHERE id=1;
-- 不指定条件的情况下,会改动所有的行的数据
UPDATE `student` SET `name`='chen';
语法:UPDATE 表名 SET column_name=value [WHERE 条件];
- 修改多条数据
-- 修改多个属性,逗号隔开
UPDATE `student` SET `name`='陈',email='1533022@163.com' WHERE id=1;
语法:UPDATE 表名 SET column_name=value,[column=value,......] [WHERE 条件];
注意:
- column_name 是数据库的列,尽量带上``
- 条件,筛选的条件,如果没有指定,则会修改所有的列;
- value,是一个具体的值,也可以是一个变量;
- 多个设置的属性之间,使用英文逗号隔开;
- 条件:where 子句 运算符,例如:id等于某个值,大于某个值,在某个区间…
操作符 | 含义 | 示例 |
---|---|---|
= | 等于 | WHERE id=1; |
<>或!= | 不等于 | WHERE id <> 2; |
> | 大于 | WHERE id > 3; |
< | 小于 | WHERE id < 3; |
>= | 大于等于 | WHERE id >= 3; |
<= | 小于等于 | WHERE id <=3; |
BETWEEN … AND … | 在某个区间 ,闭合区间 | WHERE id BETWEEN 2 AND 5; |
AND | 可以多个条件(无上限),相当于&& | WHERE name='chen' AND age=18; |
OR | 或者,相当于 || | WHERE name='chen' OR email='153@163.com' |
UPDATE `student` SET `name`='chen',email='1533022@163.com' WHERE `name`='陈' AND `sex`='男';
delete → 删除语句
delete 命令
语法:DELETE FROM 表名 [WHERE 条件];
-- 删除数据(避免这样写,会删除整个表中数据)
DELETE FROM `student`
-- 删除指定数据
DELETE FROM `student` WHERE `name`='陈';
TRUNCATE 命令,清空表
语法:TRUNCATE 表名;
-- 清空表
TRUNCATE `student`
DELETE 和 TRUNCATE 区别
- 相同点:都能删除数据,都不会删除表结构;
- 不同:
- TRUNCATE 重新设置,自增列 计数器都会归零,DELETE 不会清空自增量;
- TRUNCATE 不会影响事务;
持续更新,如果错误,欢迎大家指出…