MySQL

 

2.1.操作数据库

1.创建数据库:create database student

2.删除数据库:drop database if exists  student(数据库名)

3.使用数据库:use student

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             时间戳  ,1970年1月1日到现在的毫秒数   也较为常用

year                        表示年份

NULL

没有值,未知

====注意,不要使用NULL进行运算,结果为NULL

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

Unsigned:

无符号整数

声明该列不能为负数

zerofill:

 0填充的

不足的位数用0来填充    int(3)   5--->005 

自增:

通常理解为自增,自动在上一条记录的基础上+1(默认值为1,可以自己修改)

通常用来设计唯一的主键~index,必须是整数类型

可以自定义设计主键自增的起始值和步长

非空: NULL   not  null

假设设置为not null,如果不给它赋值,就会报错

如果不填写值,默认就是null

默认:default

设置默认的值

sex,默认值为男,如果不指定该列的值,则会有默认的值。

/*每一个表,都必须存在一下五个字段!未来做项目用的,表示一个项目存在的意义!

ID                          主键

`version`               乐观锁

is_delete              伪删除

gmt_create          创建时间

gmt_update         修改时间

*/

2.4创建数据库表

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

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

CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(20) NOT NULL DEFAULT'匿名' COMMENT '姓名',
`password` VARCHAR(30) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME  DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(30) NOT NULL DEFAULT '中国' COMMENT '家庭地址',
`e-mail` VARCHAR(30) NOT NULL DEFAULT '123456@126.com' COMMENT '邮箱',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8


格式:

CREATE TABLE [IF NOT EXISTS] `表名`(

`字段名`  列类型(长度) [属性]  [索引]  [注释],(英文逗号)

`字段名`  列类型(长度) [属性]  [索引]  [注释],(英文逗号)

`字段名`  列类型(长度) [属性]  [索引]  [注释]  最后一行不加逗号

)ENGINE=INNODB DEFAULT CHARSET=UTF8 【表类型  字符集设置   注释】

常用命令:

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

2.5 数据表的类型

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

常规使用操作:

MYISAM:  节约空间,速度较快

INNODB:安全性高,事务的处理,多表多用户操作

在物理空间存在的位置:

所有数据库文件都存在data目录下,一个文件夹对应一个数据库

本质还是文件的存储。

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

INNODB文件只有一个 .*frm文件,以及上级目录下的ibdata1文件

MYISAM对应文件:

.*frm   表结构的定义文件

.*MYD  数据文件(data)

.*MYI   索引文件(index)

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

CHARSET=utf8

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

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

除了在创建表时设置字符集编码为CHARSET=utf8之外,还可以在my.ini中配置默认编码:

charset-set-server=utf8

2.6修改删除表

2.6.1修改表

-- 修改表名 ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE teacher RENAME AS teacher1
-- 添加表的字段 ALTER TABLE 表名 ADD age INT(2)
ALTER TABLE teacher1 ADD age INT(2)

-- 修改表的字段
-- 修改约束  ALTER TABLE 表名 MODIFY 字段名 【列属性】
ALTER TABLE teacher1 MODIFY age VARCHAR(11)    -- 修改约束
-- 字段重命名  ALTER TABLE 表名 CHANGE 旧字段名 新字段名 【列属性】
ALTER TABLE teacher1 CHANGE age age1 INT(2)    -- 字段重命名

change与modify的区别:

change用来字段重命名,不能修改字段类型和约束

modify不能用来字段重命名,只能用来修改字段类型和约束

2.6.2删除表

-- 删除表的字段
-- ALTER TABLE 表名 DROP 字段名
ALTER TABLE teacher1 DROP age
-- 删除表  如果存在再删除
-- DROP TABLE IF EXISTS 表名
DROP TABLE IF EXISTS teacher1 

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

注意点:

1.所有的字段名使用 ` ` 包裹起来

2.单行注释:   -- ;     多行注释 : /*   */

3.sql关键字大小写不敏感,建议小写,大写第一时间反应不过来

4.所有的符号用英文,中文报错

3.数据库管理

3.1 外键(了解)

方法一:

CREATE TABLE `grade`(
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradename` VARCHAR(30) NOT NULL COMMENT '年级名称',
PRIMARY KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

-- 学生表的gradeid字段要去引用grade表的gradeid字段
-- 定义外键key
-- 给这个外键添加约束(执行引用) references 引用

CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(20) NOT NULL DEFAULT'匿名' COMMENT '姓名',
`password` VARCHAR(30) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME  DEFAULT NULL COMMENT '出生日期',
`gradeid` INT(10) NOT NULL COMMENT'学生的年级',
`address` VARCHAR(30) NOT NULL DEFAULT '中国' COMMENT '家庭地址',
`e-mail` VARCHAR(30) NOT NULL DEFAULT '123456@126.com' COMMENT '邮箱',
PRIMARY KEY (`id`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

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

方式二:创建表成功后,添加外键约束

CREATE TABLE `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(20) NOT NULL DEFAULT'匿名' COMMENT '姓名',
`password` VARCHAR(30) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME  DEFAULT NULL COMMENT '出生日期',
`gradeid` INT(10) NOT NULL COMMENT'学生的年级',
`address` VARCHAR(30) NOT NULL DEFAULT '中国' COMMENT '家庭地址',
`e-mail` VARCHAR(30) NOT NULL DEFAULT '123456@126.com' COMMENT '邮箱',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

-- 创建表的时候没有外键  alter关键字添加约束  添加外键
-- ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY 作为外键的列 REFERENCES 哪个表(哪个字段)
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade` (`gradeid`);

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

最佳实践:

数据库就是单纯的表,只用来存储数据,只有行(数据)和列(字段)

我们想使用多张表的数据,想使用外键(程序去实现)

3.2 DML语言(数据操作语言)

1.insert

2.uptate

3.delete

3.3 添加(insert)

insert:

-- 插入语句(添加)
-- INSRET INTO 表名([字段名1,字段名2,...]) VALUES(`值1`),(`值2`),...
INSERT INTO `grade` (`gradename`) VALUES('大一')
-- 由于主键自增我们可以忽略(如果不写表的字段,他就会意义匹配)

INSERT INTO `grade` VALUES(`大三`)  -- 无法匹配
-- 一般写插入语句,一定要数据和字段一一对应!

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

-- 如果没有设置默认值,会报错
INSERT INTO `student` (`name`,`password`,`sex`,`gradeid`)
 VALUES ('张三','111111','男','1'),('李四','222222','女','2')

-- 字段可以省略,但是值要一一对应
INSERT INTO `student` VALUES(5,'王二麻子','aaaaaa','女','1995-10-24',3,'美国','126.com')

语法:

INSRET INTO 表名([`字段名1`,`字段名2`,...]) VALUES(`值1`,`值2`),(`值1`,`值2`)...

例如:

INSERT INTO `student` (`name`,`password`,`sex`,`gradeid`)
 VALUES ('张三','111111','男','1'),('李四','222222','女','2')

注意事项:

1.字段和字段之间使用英文逗号隔开

2.字段可以省略,但是后面的值要一一对应,一个都不能少

INSERT INTO `student` 
VALUES(5,'王二麻子','aaaaaa','女','1995-10-24',3,'美国','126.com')

3.可以同时插入多条数据,values后面的值需要使用英文逗号隔开

VALUES(`值1`,`值2`),(`值1`,`值2`)...

3.4 修改(update)

update 表名(修改谁)  (条件) SET  原来的值=新值

语法:UPDATE 表名  SET  字段1,字段2  字段1= VALUE1,字段2=VALUE2  WHERE  [条件] 

-- 修改学员名字,带条件
UPDATE `student` SET `name`='杨狗' WHERE id=1
UPDATE `student` SET `name`='李腿' WHERE id=2

-- 不指定条件的情况下,会改变所有的表
UPDATE `student` SET `name`='皮卡丘'

-- 修改多个属性
UPDATE `student` SET `name`='杰尼龟',`e-mail`='46546@qq.com' WHERE id=5

条件:where子句   运算符  id等于某个值,大于某个值,在某个区间内....

操作符 含义 范围 结果
= 等于 5=6 false
<>或!= 不等于 5<>6 true
>
<
>=
<=
BETWEEN A AND B 在A和B之间 [2,5]
AND 与  && 5>1 AND 1>2 false
OR 或  || 5>1 AND 1>2 true

通过多个条件定位数据或给列属性设置值

语法:UPDATE 表名  SET  字段1,字段2  字段1= VALUE1,字段2=VALUE2  WHERE  [条件] 

UPDATE `student` SET `name`='长江七号' WHERE `name`='皮卡丘' AND `gradeid`=1

UPDATE `student` SET `birthday`=CURRENT_TIME WHERE `name`='长江七号' AND `sex`='男'

注意点:

1.字段1,字段2是数据库的列属性,尽量戴上 `  `

2.筛选的条件如果没有指定,则会修改所有的列

3.VALUE1,VALUE2是具体的值,也可以是一个变量,如:CURRENT_TIME

UPDATE `student` SET `birthday`=CURRENT_TIME WHERE `name`='长江七号' AND `sex`='男'

4.多个设置的属性之间,使用英文逗号隔开

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值