MySQL

1、连接数据库

musql -uroot -p123456  --连接数据库
------------------------------------------------------------------------------
update mysql.user set authentication_string = password('123456') where user = 
'root' and Host = 'localhost';	--修改用户密码
flush privileges;	--刷新权限

show databases;		--查看所有数据库
use school	--切换数据库

show tables;	--查看所有的表
describe student;	--查看表的内容

create database westos;		--创建数据库

exit;	--退出连接
-- 单行注释(SQL本来的注释)
/*(SQL的多行注释)*/

数据库xxx语言

DDL 定义

DML 操作

DQL 查询

DCL 控制

2、操作数据库

操作数据库>操作数据库中的表>操作数据表中的数据

mysql关键字不区分大小写

2.1、操作数据库(了解)

1、创建数据库

create database [if not exists] westos

2、删除数据库

drop database [if exists] westos

3、使用数据库

use westos

4、查看所有的数据库

show databases

Tip:当使用字段与系统字段冲突时,用``标明

2.2、数据库的列类型

数值

  • tinyint 十分小的数据 1个字节

  • smallint 较小的数据 2个字节

  • mediumint 中等大小的数据 3个字节

  • **int 标准整数 4个字节 **

  • bigint 较大的数据 8个字节

  • float 浮点数 4个字节

  • double 浮点数 8个字节

  • decimal 字符串形式的浮点数 一般用于金融计算

字符串

  • char 字符串大小固定的0~255
  • varchar 可变字符串 0~65535 String
  • tinytext 微型文本 2^8-1
  • text 文本串 2^16-1 保存大文本

时间日期

java.util.Date

  • date YYY-MM-DD, 日期格式
  • time HH:mm:ss 时间格式
  • datetime YYY-MM-DD HH:mm:ss 最常用的时间格式
  • timestamp 时间戳 1970.1.1到现在的毫秒数!较为常用!
  • year 年份表示

null

  • 没有值
  • 注意不要使用null进行运算,结果为null

2.3、数据库的字段属性(重点)

Unsigned:

  • 无符号的整数
  • 声明了该列不能声明为负数

Zerofill

  • 0填充的
  • 不足的位数用0来填充

自增

  • 通常理解为自增,默认在上一条记录上+1
  • 通常用来设计唯一的主键~index,必须是整数类型
  • 可以自定义设计主键自增的起始值和步长

非空

  • 假设为not null ,如果不给他赋值,就会报错
  • null,如果不填写值,默认就是null

2.4、创建数据库表

MySQL.md

-- 目标:创建一个school数据库
-- 创建学生表(列,字段),使用SQL创建
-- 学号int 登录密码varchar(20),姓名,性别varchar(2),出生日期(datetime),家庭住址,email

-- 注意点:使用英文括号,表的名称和字段尽量使用``括起来
-- AUTO_INCREMENT 自增
-- 字符串使用''单引号阔起来
-- 所有语句后面加英文的,最后一个不用加
-- PRIMARY KEY主键,一般一个表只有一个主键

CREATE TABLE IF NOT EXISTS `student`(
    `id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '学生学号',
    `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '登录密码',
    `name` VARCHAR(10) NOT NULL DEFAULT '匿名' 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 

格式

CREATE TABLE [IF NOT EXISTS] `表名`(
    `字段名` 列类型 [属性] [索引] [注释],
    `字段名` 列类型 [属性] [索引] [注释],
    `字段名` 列类型 [属性] [索引] [注释],
    .........
    PRIMARY KEY(`字段名`)
)[表类型][字符集设置][注释]

常用命令

SHOW CREATE DATABASE `school`	-- 创建数据库语句
SHOW CREATE TABLE `student`	-- 查看创建表语句
DESC `student`	-- 显示表的结构

2.5、数据表的类型

-- 关于数据库引擎
/*
INNODB 默认使用
MYISAM 早些年使用的
*/
MYISAMINNODB
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引支持不支持
表空间的大小较小较大,约为2倍

常规使用操作:

  • MYISAM 节约空间,速度较快
  • INNODB 安全性高,事务的处理,多表多用户操作

在物理空间存在的位置

所有数据库存放在data文件夹下

本质还是文件存储!

MySQL引擎在物理文件上的区别

  • InnoDB 在数据库表中只有一个*.frm文件,和上级目录的ibdata1文件

  • MYISAM *.frm 表结构定义文件

    ​ *.MYD 数据文件 (data)

    ​ *.MYI 索引文件 (Index)

设置数据库表的字符集编码

CHARSET=utf8

不设置的话,会是mysql默认的字符集编码~(不支持中文)

MySQL的默认编码是Lanin1,不支持中文

可以在my.ini中配置默认的编码

character-set-server=utf8

2.6、修改删除表

修改(修改字段名语句,修改字段名的同时可以修改约束

-- 修改表名 : ALTER TABLE 旧表名 RENAME AS 新表明
ALTER TABLE teacher RENAME AS teacher01
-- 增加表的字段: ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE teacher1 ADD age INT(11)


-- 修改表的字段 (重命名,修改约束!)
-- ALTER TABLE 表名 MODIFY 字段名 列属性[]
ALTER TABLE teacher01 MODIFY id VARCHAR(20)  --修改约束
-- ALTER TABLE 表名 CHANGE 旧名字 新名字 列属性[]
ALTER TABLE teacher01 CHANGE name name01 VARCHAR(10)  -- 修改字段名


-- 删除表的字段:ALTER TABLE 表名 DROP 字段名
ALTER TABLE teacher01 DROP name01

删除

-- 删除表(如果表存在再删除)
DROP TABLE IF EXISTS teacher01

所有的创建和删除操作尽量加上判断,以免报错~

3、MySQL数据管理

3.1、外键(了解即可)

在这里插入图片描述

删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)

在这里插入图片描述

以上的操作都是物理外键,数据库级别的外键,我们不建议使用!(避免数据库过多造成困扰,这里了解即可)

最佳实践

  • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
  • 我们想使用多张表的数据,想使用外键(程序去实现)

3.2、DML语言(全部记住)

3.3、 添加

在这里插入图片描述

语法:insert into 表名 ([字段名1,字段名2]) values (‘值1’),(‘值2’)

注意事项:

  1. 字段和字段之间用英文逗号隔开
  2. 字段可以是省略的,但是后面的值必须一一对应,不能少
  3. 可以同时插入多条数据,VALUES后面的值,需要使用,隔开即可

3.4、修改

update 修改谁(条件) set原来的值 = 新值

-- 修改学员名字,带了简介
UPDATE `student` SET `name`='Bastien' WHERE `id`=1

-- 不指定条件,会改动所有表!
UPDATE `student` SET `name`='张三'

-- 修改多个属性,逗号隔开
UPDATE `student` SET `name`='Bastien',`sex`='男' WHERE `id`=2

-- 语法:
-- update 表名 set colnum_name = 'value',colnum01_name = 'value' where [条件]

条件:where 子句 运算符 id等于某个值,大于某个值

操作符等于范围结果
=等于5=6false
<>或!=不等于5<>6true
>
<
<=
>=
BETWEEN … AND …某个范围内[2,5][2,5]
AND&& 条件
OR|| 条件
-- 通过多个条件定位数据
update `student` set `name` = 'Bastien' where `id`=1 and `sex`='女'

语法:update 表名 set colnum_name = ‘value’,colnum01_name = ‘value’ where [条件]

注意:

  • colnum_name 是数据库的列,要带上``
  • 条件,筛选的条件,如果没有指定,则会修改所有的列
  • value,是一个具体的值,也可以是一个变量
UPDATE `student` SET `birthday` = CURRENT_TIME WHERE `name`='Bastien' AND 
`sex`='女'

3.5、删除

delete 命令

语法:delete from 表名 [where 条件]

-- 删除数据 (避免这样写,会全部删除)
DELETE FROM `student`

-- 添加条件
DELETE FROM `student` WHERE `id`=1

TRUNCATE 命令

作用:完全清空一个数据库表,表的结构和索引都不会变

-- 清空student表
TRUNCATE `student`

delete 和 truncate 的区别

  • 相同点:都能删除数据,都不会删除表结构
  • 不同:
    • truncate 重新设置自增列,计数器回归零
    • truncate 不会影响事务
-- 测试delete  和 truncate  的区别
CREATE TABLE IF NOT EXISTS `test`(
	`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT '自增增量',
	`name` VARCHAR(20) NOT NULL COMMENT '测试名字',
	PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `test`(`name`) VALUES ('张三'),('李四'),('王五');

TRUNCATE `test`;	-- 不会影响自增

INSERT INTO `test`(`name`) VALUES ('张三'),('李四'),('王五');

DELETE FROM `test`;		--自增会归零

INSERT INTO `test`(`name`) VALUES ('张三'),('李四'),('王五');

了解即可:DELETE删除的问题,重启数据库,现象

  • InnoDB 自增列会从1开始 (存在内存当中的,断电即失)
  • MySAM 继续从上一个自增量开始(存在文件中的,不会丢失)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值