MySQL数据管理(管理集体的数据,而不是表结构)
1. 外键
删除被引用的表前需要删除主表
创建带外键的表
CREATE TABLE IF NOT EXISTS `grade`(
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
PRIMARY KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学生id',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`gradeid` INT(10) NOT NULL COMMENT '年级',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` 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 IF NOT EXISTS `grade`(
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
PRIMARY KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学生id',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`gradeid` INT(10) NOT NULL COMMENT '年级',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 添加外键约束
ALTER TABLE`student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`);
-- ALTER TABLE`表名`
ADD CONSTRAINT `约束名` FOREIGN KEY (`属性名`) REFERENCES `关联的表`(`属性名`);
以上操作都是物理外键,数据库级别的外键,不建议使用。
实践经验:
- 数据库是单纯的表,只用来存数据,只有数字和字段。
- 想使用多个表数据,使用外键应该用程序实现。
2. DML语言
DML:数据操作语言
- insert
- alter
- delete
3. 添加
插入语句(添加)
INSERT INTO `grade`(`gradeid`,`gradename`) VALUES(1,'大四');
-- insert into 表名([字段1,字段2,字段3]) values('值1','值2','值3',...)
-- 添加自增属性的键可以省略,如果不写表的字段,默认一一匹配。
-- 插入多个字段: insert into 表名(字段1,字段2,字段3,...) values('值1','值2','值3',...), ('值1','值2','值3',...) ...
4. 修改
修改语句(更新)
UPDATE `student` SET `name`='NAME' WHERE id = 1;
-- 修改一个属性 UPDATE `表名` SET `column_name`='value' WHERE [条件];
-- 修改多个属性 UPDATE `表名` SET `column1`='value1'[`column2`='value2'] WHERE [条件];
-- 多个条件 通过条件和关系运算符
where
字句(具体看后面查询)
操作符 含义 =
等于 <>
或者!=
不等于 >
大于 <
小于 <= 大于等于 >= 小于等于 between and
在某个范围 and 与 or 或
5. 删除
删除命令
DELETE FROM `student` WHERE id = 1;
-- DELETE FROM `表名` WHERE [条件];
TRUNCATE 命令
TRUNCATE `student`;
-- TRUNCATE `表名`; 类似DELETE FROM `表名`
TRUNCATE、DELETE之间的区别
DELETE不会影响自增,TRUNCATE自增归零
DELETE在删除数据库重启之后
- InnoDB 自增从1开始,存在内存里面的
- MyISAM 继续上一个自增量,存在文件里面
网友评论