注意
💥💥用sqlyog来操纵Mysql数据库。
- 表名和字段最好用``隔开
- 字符串使用’'括起来
- comment是注释,要写。
- auto_increment是自增,可以自己设置初始值和步长。
DDL
创建
create table if not exists `student`(
`id` int(4) not null auto_increment comment '学号',
sex varchar(2) not null default '女' comment '性别',
....
primary key(`id`)
)engine=innodb default charset=utf8;
格式
create table[if not exists] `表名`(
`字段名` 列属性 [属性] [索引] [注释],
`字段名` 列属性 [属性] [索引] [注释],
.....
字段名` 列属性 [属性] [索引] [注释]
)[引擎] [默认字符集]
show create [表|数据库] [名]
查看建表/库定义语句。
数据表的类型
数据库引擎:
- innodb 默认使用
- myisam 早些年使用
myisam | innodb | |
---|---|---|
事务支持 | ❌ | 👌 |
数据行锁定 | ❌ | 👌 |
外键约束 | ❌ | 👌 |
全文索引 | 👌 | ❌ |
表空间的大小 | 较小 | 较大,约为2倍 |
- myisam 节约空间,速度快
- innodb 安全性高,书屋处理,多表多用户操作
物理储存位置·
所有数据库文件都在data目录下,一个文件夹就是一个数据库
本质还是文件储存
MySQL不同引擎的物理储存差别
- innodb在数据库表中只有一个*.frm文件,以及上级目录的ibdata1文件。
- myisam对应文件
- *.frm 表结构的定义文件
- *.myd 数据文件
- *.myi 索引文件
修改
alter修改操作:
--修改表名 : ALTER TABLE 旧表名RENAME AS新表名
ALTER TABLE teacher RENAME AS teacher1
--增加表的字段: ALTER TABLE表名ADD字段名列属性
ALTER TABLE teacher1 ADD age INT(11)
--修改表的字段 (重命名,修改约束!)
-- ALTER TABLE表名 MODIFY字段名列属性[]
ALTER TABLE teacher1 MODIFY age VARCHAR(11)--修改约束
-- ALTER TABLE 表名 CHANGE 旧名字新名字列属性[]
ALTER TABLE teacher1 CHANGE age age1 INT(1) -- 字段重名名
删除表的字段:
-- ALTER TABLE 表名 DROP 字段名
ALTER TABLE teacher1 DROP age1
删除
drop table if exists 表名;
所有创建和删除尽量加上判断。
不建议使用外码[foreign key],在应用层实现即可。
DDL和DML的区别:
DDL(数据定义语言)=====>对于表的数据结构进行操作
- alter
- create
- drop
DML(数据操纵语言)======>对于表中的数据进行操作
DML
- insert 数据字段一一对应
insert into 表名(`字段名`,...) values('值1',....),('值1',....);
- update-------更新
update 表名 set column=value where [条件]
- delete-------删除
delete from 表明 [where];
- truncate--------清除
truncate `表名`;
delete和truncate的区别
- truncate和delete都可以删除数据,不会影响表的数据结构
- delete不会影响自增量,truncate会将自增量重置。
- truncate不会影响事务
delete删除的问题,重启数据库(net start mysql)(net stop mysql):
- 在innodb中 自增列会从1开始(存在内存中,断电即失)
- 在myisam中 继续从上一个自增量开始(存在文件中,不会丢失)
DQL
详细的sql语句在我下面的博客中: