1.创建表
create table if not exists student(
id int(4) not null auto_increment comment '学号',
name varchar(30) not null defalut '匿名' comment '姓名',
primary key(id)
)engine=innodb default charset=utf8;
not exists 是否存在
not null 不为空
auto_increment 自动增长
comment 列注释
defalut 默认值
primary key 主键
engine=innodb 默认引擎
2.数据库引擎
INNODB 默认使用
MYISAM 早些年使用
MYSIAM | INNODB |
---|---|
不支持事务 | 支持事务 |
数据行锁定不支持 | 支持数据行锁定 |
不支持外键约束 | 支持外键约束 |
全文索引支持 | 不支持全文索引 |
表空间较小 | 较大,为2倍 |
常规使用:
MYSIAM:节约空间,速度较快
INNODB:安全性较高,事务的处理,多表多用户操作
所有的数据文件都存在data目录下
MYSQL引擎在物理文件上的区别:
1.INNODB在数据库表中只有*.frm文件 and 上级目录下的ibdata1文件
2.MYSIAM对应的文件
1.frm -表结构的定义文件
2..MYD 数据文件(data)
3.*.MYI 索引文件(index)
设置数据库表的字符集编码
charset=utf8
不设置的话,会是mysql默认的字符集编码~(不支持中文)
默认为latin1
1.修改默认编码
在my.ini中character-set-server=utf8
外键
创建表的时候没有外键关系
alter table student
add constraint fk_gradeid foregin key (gradeid) references grade (gradeid)
不建议多个表的数据库的添加外键
最佳实践:
- 数据库就是单纯的表,只能用来存数据,只有行(数据)和列(字段)
- 我们想使用多张表的数据,想使用外键(程序去实现)
delete删除问题:重启数据库,现象:
- InnoDB 自增列会重1开始(存在内存中,断电即失)
- MySiam 继续从上一个自增量开始(存在文件中,不会丢失)
去重 distinct
select distinct stuno from result
select version()–查询版本号
select @@auto_increment_increment --查询自增步数
MD5加密
事务
要么都成功,要么都失败
acid
原子性
一致性
持久性
隔离性
set autocommit=0;--关闭自动提交
start transaction --开始事务
update accout set money=money-500 where name ='A'
update accout set money=money+500 where name ='B'
commit;--提交,就被持久化了
rollback;--回滚
set autocommit=1;--恢复默认值
索引的分类
索引是帮助mysql高效获取数据的数据结构。提取句子主干,就可以 得到索引的本质:索引是数据结构
1、索引的分类
- 主键索引 (primarykey)
唯一标识,主键不可重复 - 唯一索引(unique key)
避免重复列出现,唯一索引可以重复,多个列都可以标识 唯一索引 - 常规索引(key/index)
默认的,index key关键字来设置 - 全文索引(fulltext)
在特定的数据库引擎才有,MySIAM
快速定位
------------索引的使用------------------------
1.在创建表的使用给字段增加索引
2 创建完成之后,增加索引
–显示所有的索引
show index from table'表名'
–增加一个索引–
alter table '表名' add fulltext index '索引名字'('列名');
create index '索引名字' on '表名' '字段'
索引原则:
- 索引不是越多越好
- 不要对经常变动的数据加索引
- 小数据量的表不需要加索引
- 索引一般加在常用来查询的字段上
索引的数据结构
Hash类型的索引,
btree:innodb 的默认的数据结构