MySQL数据库笔记

1、连接数据库

命令行连接

mysql -uroot -proot --连接数据库
--另一种情况
mysql -uroot -p
Enter password: *****

------------------------------------------
update mysql.user set authentication_string=password(123456) where user=‘root’ and Host = ‘localhost’;
--进入界面后更改root密码
flush privileges; --刷新权限
--所有的语句都使用;结尾

------------------------------------------
show databases; --查询所有的数据库
use school;  --切换数据库use 数据库名

show tables; --查询数据库中所有的表
databases student; --显示数据库中所有表的信息
create database westos; --创建一个数据库

exit;--退出连接
-- 单行注释;
/* 多行注释*/

DDL:数据库定义语言
DML:数据库操作语言
DQL:数据库查询语言
DCL:数据库控制语言

2、操作数据库

操作数据库>操作数据库中的表>操作数据库中表的数据
MySQL关键字不区分大小写

2.1、操作数据库

1、创建数据库

create database if not exists wesbos;

2、删除数据库

drop database if   exists wesbos;

3、使用数据库

use school;

4、查看数据库

show databases;

2.2、数据库的列类型

数值

  • tinyint=十分小的数据=1字符
  • smallint=较小数据=2字节
  • mediumint=中等大小数据=3字节
  • int=标准整数=4字节
  • bigint=较大的数据=8字节
  • float=浮点数=4字节
  • double=双精度浮点数=8字节
  • decimal=字符型形式的浮点数= 金融计算的时候,一般使用的是decimal

字符串

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

日期

  • data YYYY-MM-DD
  • time HH:mm:ss
  • datatime YYYY-MM-DD HH:mm:ss
  • timestamp 时间戳,19701.1到现在的毫秒数,较为常用
  • year 年份表示

NULL

  • 没有值,未知
  • 注意,不要使用NULL运算,结果一定为NULL。

2.3、数据库的字段属性

Unsigned:

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

zerofill:

  • 0填充的
  • 不足的位数,使用0来进行填充 int(3),5—005;

非空

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

默认

  • 设置默认的值!
  • sex,默认设置为 男 ,如果不只能该列为男,那么会有默认值男!

拓展 未来做项目用
每一个表都必须有以下五个字段
id 主键
version 乐观锁
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间

2.4、创建数据库表(重点)

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

-- 注意:使用英文的(),表明和字段名称用``括起来
-- AUTO_INCREMENT 自增
-- 字符串使用单引号括起来
-- 所有的语句后面加 , (英文的),最后一个可以不用加
-- PRIMARY KEY 主键,一般一个表有一个唯一的主题。

CREATE DATABASE school;

USE school;
CREATE TABLE IF NOT EXISTS `student`(
	`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
	`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
	`password` VARCHAR(16) 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;

格式

create table [if not exists] `表名`(
	`字段名` 列类型 [属性] [索引] [注释],
	`字段名` 列类型 [属性] [索引] [注释],
	...
	`字段名` 列类型 [属性] [索引] [注释]
)[表明类型][字符集设置][注释];

常用命令

show create database school; -- 查看创建数据库的语句
show create table student; -- 查看数据库表的语句
desc student; -- 查看表的结构

2.5、数据库的类型

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

常规操作:

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

在物理空间存在的位置

所有的数据都存在data目录下

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

  • INNODB 在数据库中只有一个*.frm文件,以及上级目录下的ibdata1文件。
  • MYISAM 对应文件
    • *.frm 表结构的定义文件
    • *.MYD 数据文件(data)
    • *.MYI 索引文件(index)

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

charset=utf8;

不设置的话,回事MySQL默认的字符集编码,Latin1,不支持中文。
在my.ini中配置默认的编码

character-set-server=utf8

2.6、修改删除表

  • 修改
-- 创建一个teacher表
CREATE TABLE IF NOT EXISTS `teacher`(
	`id` INT(15) NOT NULL AUTO_INCREMENT COMMENT '职工号',
	`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
	`age` INT(3) NOT NULL DEFAULT '0' COMMENT '年龄',
	PRIMARY KEY (`id`) 
)ENGINE=INNODB DEFAULT CHARSET=utf8;

-- 修改表名:alter table 表名 rename as 新表名;
ALTER TABLE teacher RENAME AS teacher1;
-- 增加表的字段:alter table 表名 add 字段名 列属性;
ALTER TABLE teacher1 ADD age INT(11);

-- 修改表的字段 (重命名,修改约束)
ALTER TABLE teacher1 MODIFY age VARCHAR(11);
ALTER TABLE teacher1 CHANGE age age1 INT(2);

-- 删除表的字段: alter table 表名 drop 字段名
ALTER TABLE teacher1 DROP age1 ;
  • 删除表
-- 删除表
DROP TABLE IF EXISTS teacher1;

所有的创建和删除表一定要加上判断
注意点:
1、`` 字段名,使用这个包裹。
2、注释 - -,/* */。
3、sql关键字对大小写不敏感,建议大家小写。
4、所有的符号字符使用英文。

3、MySQL数据库管理

3.1、外键(了解即可)

  • 第一种方式:创建表的时候,添加外键约束
-- 创建一个年纪表
CREATE TABLE IF NOT EXISTS `grade` (
	`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
	`gradename` VARCHAR(30) NOT NULL COMMENT'年级名称',
	PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-- 创建一个学生表
CREATE TABLE IF NOT EXISTS `student`(
	`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
	`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT'姓名',
	`password` VARCHAR(16) NOT NULL DEFAULT '123456' COMMENT '密码',
	`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT'性别',
	`birthday` DATETIME DEFAULT NULL COMMENT'出生日期',
	`gradeid` INT(10) NOT NULL COMMENT'年级id',
	`address` VARCHAR(100) DEFAULT NULL COMMENT'家庭住址',
	`email`VARCHAR(50) DEFAULT NULL COMMENT'邮箱',
	PRIMARY KEY(`id`),
	-- 学生表的gradeid定义为外键key
	KEY `FK_gradeid` (`gradeid`),
	--给这个外键添加约束(执行引用) references 引用
	CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

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

  • 第二种方式:表创建成功后,添加外键约束
alter table `student`
add constraint `FK_gradeid` foreign key (`gradeid`) references `grade` (`gradeid`);

以上的操纵都是物理外键,数据库级别的外键,不建议使用(避免数据库过多造成困扰)

最佳实践

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

3.2、DML语言(全部记住)

数据库的意义: 数据存储,数据管理
DML语言:数据操作语言

  • insert
  • update
  • delete

3.3、添加

  • insert
-- 插入语句
-- insert  into 表名([字段名1,字段名2,字段名3])values (`值1`),(`值2`),(`值3`,...)
INSERT INTO `grade`(`gradename`) VALUES ('大四');

-- 由于自增,主键可以省略(但如果不写字段表,那就是一一匹配)
INSERT INTO `grade` VALUES ('大三'); -- 代码错误,执行不成功

-- 一般写插入语句,字段名和插入的数据要一一对应

-- 插入多个字段
INSERT INTO `grade` (`gradename`) VALUES('大二'),('大一');

INSERT INTO `student`(`name`) VALUES('张三');
INSERT INTO `student`(`name`,`password`,`sex`) VALUES('张三','aaaaa','男');
INSERT INTO `student`(`name`,`password`,`sex`) 
VALUES('李四','a1234','男'),('王五','aaaaa','女');

注意
1、字段和字段之间用英文的,隔开。
2、字段是可以省略的,但是后面的值一定要一一对应起来,不能少
3、可以同时插入多条数据,values后面的值需要使用,values(),(),··········

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值