MySQL学习02

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语法

select [all | distinct]
{* | table.* | [table.field1[as alias1][table.field2[as alias2][....]]}
from table_name [as table_alias]
   [left | right | inner join table_name2]  ---联合查询
   [where ...]  ----指定结果查询
   [group by ...] ---指定结果按照哪些字段来分组
   [having ...] ----过滤分组的记录必须满足的次要条件
   [order by ...] ---指定查询记录按一个或者多个条件排序
   [limit {[offset,] row_count | row _countOFFSET offset}];

--  查询
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查询语句中嵌套一个查询语句

8、聚合函数

count(*) count(1) count(列名)

count(列名):会忽略null值

count(1) 比cout()快,count(1)一行当做一个字段,count()要查所以字段

MAX MIN AVG SUM等

posted @ 2022-11-09 09:28  dyaobing  阅读(16)  评论(0)    收藏  举报