一、基本操作
SHOW DATABASES  -- 查看所有数据库
USE school -- 切换数据库
SHOW TABLES -- 查看数据库内所有表
DESCRIBE student -- 显示数据库表中所有信息
CREATE DATABASE westos; -- 新建数据库
EXIT -- 退出连接
-- 单行注释
/*
  多行注释
*/
-- 删除
DROP DATABASE IF EXISTS westos -- 删除数据库,如果该数据库存在
-- 建立
CREATE DATABASE IF NOT EXISTS westos -- 建立数据库,如果数据库不存在
-- 关键字使用飘```
USE `westos`
-- 查看数据库
SHOW DATABASES -- 查看所有数据库 涉及到多个数据库时database后加s
数据库××语言
DDL 定义
DML 操作
DQL 查询
DCL 控制
二、需要记忆的列类型
数值
- 
tinyint 十分小的数据 1个字节
 - 
smallint 较小的数据 2个字节
 - 
mediumint 中等大小的数据 3个字节
 - 
int 标准的整数 4个字节
 - 
bigint 较大的数据 8个字节
 - 
float 浮点数 4个字节
 - 
double 浮点数 8个字节(存在精度问题)
 - 
decimal 字符串形式的浮点数 金融计算
 
字符串
- 
char 字符串固定大小 0-255
 - 
varchar 可变字符串 0-65535(常用的变量)
 - 
tinytext 微型文本 2^8-1
 - 
text 文本串 2^16-1(保存大文本)
 
时间日期
- 
date YYYY-MM-DD,日期
 - 
time HH:MM:SS,时间格式
 - 
datetime YYYY-MM-DD HH:MM:SS 最常用的时间格式
 - 
timestamp 时间戳,1970.1.1到现在的毫秒数
 - 
year 年份表示
 
null
- 
没有值,未知
 - 
注意,不要使用null进行运算,结果为null
 
三、数据库的字段属性(重点)
unsigned:
- 
无符号的整数
 - 
声明了该列不能声明为负数
 
zerofill:
- 
0填充
 - 
不足的位数,使用0来填充,int(3),5->005
 
自增
- 
通常理解为自增,自动再上一条记录的基础上+1(默认)
 - 
通常用来设计唯一的主键 index,必须时整数类型
 - 
可以自定义设置主键自增的起始值和步长(高级->自动增量,默认为1)
 
非空
NULL nut null
- 
设置为not null时,不给它赋值,就会报错
 - 
null,如果不填写值,默认为null
 
默认
- 
设置默认值
 - 
sex,默认值为男,如果不指定该列的值,则有默认值
 
(拓展)
每个表,都必须存在一下五个字段做项目时表示一个记录的健壮性和安全性
- 
id 主键
 - 
version 乐观锁
 - 
is_delete 伪删除
 - 
gmt_create 创建时间
 - 
gmt_update 修改时间
 
四、创建数据库
- 
列名``
 - 
类型 int(), varchar(), datetime()
 - 
是否为空 not null
 - 
默认值 default'默认内容'
 - 
自加(主键或其它)auto_increment
 - 
注释 comment'注释内容'
 - 
设置引擎 engine
 - 
设置编码 charset
 
-- 创建数据库
CREATE TABLE IF NOT EXISTS `student`(
    `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
    -- 1.类型为int类型展示4位 2.设置不为空 3.设置自增 4.设置注释,使用单引号 5.所有语句最后加,最后一句不用加
    `name` VARCHAR(30) NOT NULL DEFAULT'匿名' COMMENT'姓名',
    -- 1.类型为varchar类型30位 2.设置不为空 3.设置默认值'匿名' 4.设置注释
    `pwd`VARCHAR(20) NOT NULL DEFAULT'123456' COMMENT'密码',
    -- 1.类型为varchar类型20位 2.设置不为空 3.设置默认值'123456' 4.设置注释
    `sex`VARCHAR(2) NOT NULL DEFAULT'男' COMMENT'性别',
    `birthday` DATETIME DEFAULT NULL COMMENT'出生日期',
    -- 1.类型为datetime时间类型 2.设置默认值NULL 3.设置注释
    `address` VARCHAR(100) DEFAULT NULL COMMENT'家庭住址',
    -- 1.类型为varchar类型100位 2.设置默认值NULL 3.设置注释
    `email` VARCHAR(50) DEFAULT NULL COMMENT'邮箱',
    -- 1.类型为varchar类型50位 2.设置默认值NULL 3.设置注释
    PRIMARY KEY(`id`)
    -- 设置主键,一般一个表只有一个放到最后
)ENGINE=INNODB CHARSET=utf8
-- 1.设置引擎innodb 2.设置编码utf8
五、数据表类型
关于数据库引擎
- 
innodb 默认使用
 - 
myisam 早些年使用
 
区别:
| myisam | innodb | |
|---|---|---|
| 事物支持 | 不支持 | 支持 | 
| 数据行锁定 | 不支持 | 支持 | 
| 外键 | 不支持 | 支持 | 
| 全文索引 | 支持 | 不支持 | 
| 表空间大小 | 较小 | 较大,约为两倍 | 
常规使用操作:
- 
myisam:节约空间,速度快
 - 
innodb:安全性高,事物的处理,多表多用户操作
 
在物理空间存在的位置
所有的数据库文件都存在data目录下
本质还是文件的存储
MySQL引擎在物理文件上的区别
- 
innodb 在数据库表中只有一个*.frm文件,以及上级目录下的ibdata1文件
 - 
myisam对应文件
- 
*.frm 表结构的定义文件
 - 
*.MYD 数据文件 (data)
 - 
*.MYI 索引文件(index)、
 
 - 
 
设置数据库表的字符集编码
charset=utf8
不设置的话,会是mysql默认的字符集编码(不支持中文)
MySQL默认的编码是latin1,不支持中文
在my.ini中配置默认的编码
character-set-server=utf8
六、修改删除表
- 
修改
-- 修改表名字
ALTER TABLE student RENAME AS students
-- 添加表字段
ALTER TABLE students ADD `age` INT(11) NOT NULL DEFAULT'27' COMMENT'年龄'
-- 查看表
SHOW KEYS FROM `school`.`students`
-- 修改表字段(重命名,修改约束)modify:修改
ALTER TABLE students MODIFY age VARCHAR(11) -- 修改类型
ALTER TABLE students CHANGE age1 age VARCHAR(11) -- 修改字段名 要加上类型 - 
删除
-- 删除表的字段
ALTER TABLE students DROP age
-- 删除表(如果存在便删除)
drop table if exists students - 
所有的创建删除操作尽量加上判断,以免报错
 - 
注意点:
- 
字段名使用``包裹
 - 
注释 -- /**/
 - 
sql关键字大小写不敏感,建议小写
 
 - 
 
七、DML语言(重点 背)
P13
数据库意义:数据存储,数据管理
DML语言:数据操作语言
- 
insert
 - 
update
 - 
delete
 
- 
添加
-- 添加 插入语句
-- insert into `表名` (`列名`) values(`内容`)
INSERT INTO`teacher`(`gradename`) VALUES('大四')
-- 插入多个字段
INSERT INTO `students`(`name`) VALUES('xd')
INSERT INTO `students`(`name`, `pwd`, `sex`, `birthday`) VALUES('xd','111111','男','2001.02.10')
INSERT INTO `students`(`name`, `pwd`, `sex`, `birthday`,`address`,`email`)
VALUES('xd1','111111','男','2001.02.10','1','2'),
('xd2','1sdf111','男','2001.03.10','1','2'),
('xd3','1111asdfa11','男','2001.04.10','1','2'),
('xd4','1111af','男','2001.05.10','1','2'),
('xd5','11afadf','男','2001.06.10','1','2')
INSERT INTO `students`
VALUES
(19,'xd1','111111','男','2001.02.10','1','2'),
(20,'xd2','1sdf111','男','2001.03.10','1','2') 
- 
修改
update set where
-- 修改
-- update `表名` set `列名`='修改后的值' where 条件
-- id=1的name修改为'xxdd'
UPDATE`students` SET `name`='xxdd' WHERE id = 1
-- 修改多个属性,用逗号隔开
UPDATE `students` SET `name`='xxxddd',`email`='111111@.com' WHERE id = 1 
- 
删除
delete
不建议
-- 删除
-- delete from
DELETE FROM `students` WHERE id=1truncate
清空一张表,表的结构和索引约束不会变
truncate `students` 
八、DQL查询数据(重点)
DQL
(data query language:数据查询语言)
select
- 
查询
-- 查询全部学生
SELECT * FROM `student`
-- 查询指定字段
SELECT `studentno`,`loginpwd` FROM`student`
-- 查询指定字段 使用AS为结果起名字
SELECT `studentno` AS '学号',`loginpwd`AS'密码' FROM`student`
-- 函数 concat(a,b) 拼接字符串
SELECT CONCAT('姓名:',`studentname`) AS '新名字' FROM student - 
表达式
-- 去重 select distinct 重复的数据只显示一条
SELECT DISTINCT `loginpwd` FROM student
-- 查看系统版本(函数)
SELECT VERSION()
-- 用来计算(表达式)
SELECT 100*3-1 AS 计算结果
-- 查询自增步长(变量)
SELECT @@auto_increment_increment
-- 加一
SELECT `studentno`,`loginpwd`+1 AS '加一分后' FROM `student`
UPDATE `student` SET `loginpwd`='61' WHERE `studentno` = 1,
UPDATE `student` SET `loginpwd`=62 WHERE `studentno` = 2
UPDATE `student` SET `loginpwd`=63 WHERE `studentno` = 3
UPDATE `student` SET `loginpwd`=64 WHERE `studentno` = 4
UPDATE `student` SET `loginpwd`=65 WHERE `studentno` = 5
UPDATE `student` SET `loginpwd`=66 WHERE `studentno` = 6
UPDATE `student` SET `loginpwd`=67 WHERE `studentno` = 7
UPDATE `student` SET `loginpwd`=68 WHERE `studentno` = 8
-- 查询指定区间
SELECT `studentno`,`loginpwd`FROM student
WHERE `loginpwd`>62 AND `loginpwd`<67
-- 模糊查询
SELECT `studentno`,`loginpwd`FROM student
WHERE `loginpwd` BETWEEN 62 AND 67
-- 查询姓刘的同学
UPDATE `student` SET `studentname`='刘一' WHERE`studentno` = 5
UPDATE `student` SET `studentname`='刘二' WHERE`studentno` = 6
UPDATE `student` SET `studentname`='刘一二' WHERE`studentno` = 7
UPDATE `student` SET `studentname`='刘一二三' WHERE`studentno` = 8
SELECT `studentno`,`studentname` FROM student
WHERE `studentname` LIKE'刘%'
SELECT `studentno`,`studentname` FROM student
WHERE `studentname` LIKE'刘_'
SELECT `studentno`,`studentname` FROM student
WHERE `studentname` LIKE'刘__' - 
联表查询
-- 联表查询
SELECT s.`studentno`,s.`studentname`,r.`studentresult`
FROM student AS s
INNER JOIN result AS r
WHERE s.studentno = r.studentno - 
分页和排序
 
- 
升序
SELECT *FROM `student`
ORDER BY `studentno` ASC 
- 
降序
SELECT *FROM `student`
ORDER BY `studentno` DESC 
- 
分页(limit)
- 
缓解数据库压力
 
LIMIT 0,5每页五行,从第一页开始
 - 
 
- 
子查询
本质:在where语句中嵌套一个子查询语句
where(sclect * from)
 
九、聚合函数
常用函数暂不记录
| 函数名称 | 描述 | 
|---|---|
| count() | 计数 | 
| sum() | 求和 | 
| avg() | 平均值 | 
| max() | 最大值 | 
| min() | 最小值 | 
- 
count()
三种
SELECT COUNT(`studentno`) FROM student -- count(字段),会忽略所有的null值
SELECT COUNT(*) FROM student -- count(*),不会忽略null值,本质,计算行数
SELECT COUNT(1) FROM student -- count(*),不会忽略null值,本质,计算行数 
                    
                
                
            
        
浙公网安备 33010602011771号