1、创建数据库表
DROP TABLE IF EXISTS student;
CREATE TABLE 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 '出生日期',
address VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
email VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(id)
) ENGINE=INNODB DEFAULT CHARSET=utf8 ----必须要加utf8,否则为数据库默认编码,不支持中文
SHOW CREATE DATABASE school; ---查看建表语句
SHOW CREATE TABLE student; ---查看student表的定义语句
DESC student; ---显示表结构
数据库引擎:
INNODB 默认使用:安全性高,支持事务处理,多标多用户操作
MyISAM 早些年使用:节约空间,速度快
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 较小 | 较大,约为2倍 |
表在物理空间存在的位置
所有数据库文件都存在D:\install\mysql-5.7.19\data目录下,本质还是文件存储
- InnoDB在数据库表中只有一个*.frm,已经上级目录下的ibdata1文件;
- MyISAM对应文件*.frm(标结构定义文件)、 .MYD(数据文件data)、 .MYI(索引文件index)
2、修改删除表
-- 修改表名 ALTER TABLE 旧的表名 RENAME AS 新表名
ALTER TABLE student RENAME AS student1;
-- 增加字段 ALTER TABLE 表名 ADD 字段名 列属性;
ALTER TABLE student1 ADD age INT(11);
-- 修改表字段
ALTER TABLE student1 MODIFY age VARCHAR(11) -- 修改属性
ALTER TABLE student1 CHANGE age age1 INT(1) -- 字段重命名
-- 删除字段
ALTER TABLE student1 DROP age1;
-- 删除表
ALTER TABLE IF EXISTS student1;
3、外键(不可使用)
4、DML语言
操作符:等于(=), 不等于(<> 或者!=), 范围(between ... and ...)闭合区间,
-- 插入语句
insert into 表名([字段名1, 字段名2, 字段名3]) values ('值1', '值2', '值3', ...), (...)
-- 修改
update student set name='xxx' where id=#{}
-- 删除
delete from student where id=#{}
truncate table 'student' ---完全清空一个数据表,表的结构和索引约束不变, 自增会归0
delete from 'student' ---也是删除表数据,但是自增不会归0
delete问题:
- InnoDB 用delete后重启数据库,自增就会用1开始了
- MyISAM 用delete后重启数据后自增还是从原来的开始,因为自增是存在文件中的
5、DQL--数据库查询
-- 查询
select * from student
-- 别名
select '表字段' as xxx from student
-- concat 拼接函数
select concat(a, b) as 新名称 from student;
5.1、去重 distinct:
select distinct '字段名' from '表名'
模糊查询:%任意个字符, _代表一个字符
like : a like b
in : a in (a1, a2, a3...)
5.2、连表查询 join
select s.xxx, xxx, xxxx
from student as s
inner join result as r
on s.id = r.id
where xxx is null
Inner join | 如果表中至少有一个匹配就返回行 查交叉行 |
---|---|
left join | 会返回左边的数据即使没有匹配 |
right join | 会返回右边的数据即使没有匹配 |
5.3、 自连接:把一张表当做两张表查询
6、分页和排序
排序: order by 排序字段 排序方式(asc, desc)
分页:limit 起始,结束
7、子查询
本质:where查询语句中嵌套一个查询语句
标签:02,COMMENT,--,学习,DEFAULT,student,MySQL,TABLE,ALTER From: https://www.cnblogs.com/bingo-0427/p/16872500.html