MySQL数据管理
1 外键(了解即可)
方式一: 在创建表的时候增加约束(麻烦)
CREATE TABLE `grade`(
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT 'gradeid',
`gradename` VARCHAR(50) NOT NULL COMMENT 'grade name',
PRIMARY KEY(`gradeid`)
)ENGINE = INNODB DEFAULT CHARSET=utf8
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`gradeid` INT(10) NOT 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
在student表中引用grade表中的gradeid
方式二:如果创建表的时候没有外键关系,可以手动添加约束:
alter table `student`
add constraint `FK_gradeid` foreign key(`gradeid`) references `grade`(`gradeid`)
以上操作都是物理外键,数据库级别的外键,不建议使用(避免数据库过多造成困扰)
外键问题建议应用层解决
====
2 DML语言
数据存储,数据管理
DML语言: 数据操作语言
- insert:
- update:
- delete:
3 添加
插入语句:
insert into 表名([字段名1,字段2,字段3]) values(`值1`),(`值2`),(`值3`),...
insert into `grade`(`gradename`) values(`大一`)
insert into `grade`(`gradename`) values(`大二`),(大三)
insert into `student`(`name`,`pwd`,`sex`) values('zhangsan','111111','male')
insert into `student`(`name`,`pwd`,`sex`)
values('lili','111111','female'),
('xiaoming','111111','male'),
('john','213414','male')
注意:
- 字段和字段之间使用英文逗号隔开
- 字段是可以省略的,但是后面的值必须要一一对应,不能省略,如:
insert into `student` values(11,'lisi','aaaaaa','male','1900-01-01',1,'Harbin','email')
- 可以同时插入多条数据,values后面的值需要使用逗号隔开即可
4 修改
--修改学生名字
/*语法:
update 表名 set colnum_name=value,[colnum_name=value,...] where [条件]
*/
update `student` set `name`='halo' where id = 1
--修改多个属性,用逗号隔开:
update `student` set `name`='halo',`email`='1234555@163.com' where id = 1
条件:where
子句,运算符id等于某个值,或大于某个值,或在某个区间内修改
操作符 | 含义 | 范围 | 结果 |
---|---|---|---|
= | 等于 | 5=6 | false |
<>或!= | 不等于 | 5<>6 | true |
> | |||
< | |||
>= | |||
<= | |||
between…and… | 在某个范围内 | [2,5] | |
and | 与,&& | 5>1 and 1>2 | false |
or | 或,|| | 5>1 or 1>2 | true |
注意:
- colnum_name 是数据库的列,尽量带上``
- 如果没有指定筛选的条件,则回修改所有的列
- value 是一个具体的值,也可以是一个变量,如:
update `student` set `birthday`=current_time where `id`=1 and sex='male'
5 删除
delete
命令:
语法:
delete from 表明 [where] 条件
如果没有条件回删除表内的所有数据
truncate
命令: 完全清空一个数据表,表的结构和索引约束不会变
语法:truncate
表名
truncate `student`
delete
和truncate
的区别
相同点:都能删除数据,都不会删除表的结构
不同点:
truncate
重新设置 自增列 计数器会归零,如果用delete删除,则自增不会变,重新插入数据时自增会从原来的地方开始truncate
不会影响事务
delete删除的问题
delete删除之后,如果数据库engine是innoDB,那么重启数据库后,自增列会重1开始(存在内存中,断点消失);
如果数据库engine是MyISAM,重启数据库后,自增列会继续从上一个子增量开始(存在文件中,不会丢失)