MySQL数据库(基础部分CRUD)

一、SQL语句分类

1.DDL:数据定义语句(如:create)

2.DML:数据操作语句(如:insert,update,delete)

3.DQL:数据查询语句(如:select)

4.DCL:数据控制语句(如:用户权限:grand revoke)

二、对数据库操作

1.创建数据库

#创建一个名为db3的数据库
CREATE DATABASE db3;

#删除一个名为db3的数据库
DROP DATABASE db3;

#创建一个名为db4的数据库并设置其编码格式为utf-8编码(数据库中,-省略)
CREATE DATABASE db4 CHARACTER SET utf8;

#创建一个名为db5的数据库并设置其编码格式为utf-8编码且区分大小写,使用COLLATE关键字
CREATE DATABASE db5 CHARACTER SET utf8 COLLATE utf8_bin;

2.查看、删除数据库

#查看所有数据库,使用可以看到所有数据库的名称
SHOW DATABASES;

#查看具体某一个数据库,可以看到编码格式
SHOW CREATE DATABASE db5;

#删除数据库,只有该数据库存在才能成功删除
DROP DATABASE db5;

3.备份恢复数据库

#备份数据库,使用mysqldump指令,注意:!!在DOS下执行,即使用命令控制符!!
#格式为 mysqldump -u 用户名 -p 数据库名(多个数据库用空格隔开) > 路径(e:\\sql1.sql)意味着放在e盘的sql1.sql文件中
mysqldump -u root -p db1 > e:\\base.sql


#恢复数据库
#方法一:使用source指令,指定对应sql文件,同样在命令控制符下执行(注意:进入 Mysql 命令行再执行)
source e:\\base.sql
#进入sql命令行的指令
mysql -hlocalhost -uroot -p
#方法二:直接将sql文件中的内容复制进来,执行即可

三、创建表

 1.创建基础表结构,包含数据列,编码格式,编码规则以及存储引擎

#创建表data01,要求有id,uname,password,birthday四列数据
#设置表的编码格式为utf-8编码,且区分大小写,引擎使用INNODB
CREATE TABLE data01(
	id INT,
	uname VARCHAR(255),
	`password` VARCHAR(255),
	birthday DATE
)CHARACTER SET utf8,COLLATE utf8_bin,ENGINE INNODB

#删除表data01
DROP TABLE data01

#查询表data01中的所有数据
SELECT * FROM data01

2.常用数据类型

#有,无符号的整型数据(TINYINT 占一个字节)
CREATE TABLE data02(
	id TINYINT,
	id1 TINYINT UNSIGNED
)

#尝试给表data02添加数据
INSERT INTO data02 VALUES (128,256)
#添加的数据大于该数据类型的最大存储值,就会添加失败
INSERT INTO data02 VALUES (127,255)

 3.bit的使用

#bit(m)的使用,bit(m)是位类型添加,可以指定位数,位数m范围为1~64
CREATE TABLE data03(
	id bit(8)#如果为8,那么可以存储0~255的数据
)

#第三句会添加失败
INSERT INTO data03 VALUES (255)
INSERT INTO data03 VALUES (1)
INSERT INTO data03 VALUES (256)
INSERT INTO data03 VALUES (123)

#显示结果会转为二进制数
SELECT * FROM data03

 4.浮点数的使用

#浮点数的使用
#FLOAT是单精度浮点数,占用四个字节,double是双精度浮点数,占用8个字节
#DECIMAL(M,N)是类似于bit(m)的浮点数,其中M表示位数,N表示小数点后位数且可以四舍五入
CREATE TABLE data04(
	num01 FLOAT,
	num02 DOUBLE,
	num03 DECIMAL(8,4)
)

SELECT * FROM data04

INSERT INTO data04 VALUES(10,20.99999,17.56723)
INSERT INTO data04 VALUES(10,20.99999,17.56726)

5.字符串的使用

-- CHAR(size)
-- 固定长度字符串 最大 255 字符
-- VARCHAR(size) 0~65535 字节
-- 可变长度字符串 最大 65532 字节 【utf8 编码最大 21844 字符 1-3 个字节用于记录大小】
-- 如果表的编码是 utf8 varchar(size) size = (65535-3) / 3 = 21844
-- 如果表的编码是 gbk varchar(size) size = (65535-3) / 2 = 32766

#细节一:char(M)M表示字符数,而非字节数
#细节二:char()定义以后,长度不会变,无论存入什么样的字符,占用的内存已经固定
        varchar()定义的是最大长度,如果存入的字符长度小于定义的,那么存储的时候会按照存入字符长度存储
#细节三:对于定长数据,如邮编,手机号,推荐使用char
        其他的推荐使用varchar
        因为char的查询速度更快
#细节四:在存储文本时也可以使用TEXT类型,可存储2^16字节,或者更大的MEDIUMTEXT2^24和LONGTEXT2^32

CREATE TABLE t10 (
`name` VARCHAR(32766),
`password` CHAR(255)) CHARSET gbk;

6.日期类型的使用

#日期的使用
#DATE为日期类,DATETIME为更加精确的日期与时间,TIMESTAMP为时间戳,可以自动记录insert与update的时间
#使用NOT NULL DEFAULE 意味着如果传参为null时,会默认赋一个值,该值为CURRENT_TIMESTAMP
#使用ON UPDATE CURRENT_TIMESTAMP即在每次进行uodate与insert操作时都会更新时间戳
CREATE TABLE data05(
	`date` DATE,
	todaytime DATETIME,
	login_time TIMESTAMP -- 时间戳
		NOT NULL DEFAULT CURRENT_TIMESTAMP -- 为空默认当前时间戳
		ON UPDATE CURRENT_TIMESTAMP	-- 每次操作数据时更新时间戳
)

SELECT * FROM data05

INSERT INTO data05 VALUES('2022-11-11','2022-11-11 10:10:10',null)
INSERT INTO data05(`date`,todaytime) VALUES ('2022-11-11','2022-11-11 10:10:10')

7.创建表的练习

#创建表的练习
CREATE TABLE data06(
	id INT,
	`name` VARCHAR(32),
	sex CHAR(1),
	birthday DATE,
	entry_date DATETIME,
	job VARCHAR(32),
	Salary FLOAT,
	resume TEXT
)

SELECT * FROM data06

8.修改表

#修改表
#添加表中的列
ALTER TABLE data06 ADD `password` VARCHAR(32)

#查看表的结构
DESC data06

#修改表中的列
ALTER TABLE data06 MODIFY `password` VARCHAR(10)

#删除表中的列
ALTER TABLE data06 DROP sex

#修改表名
RENAME TABLE data06 TO data07

#修改列名
ALTER TABLE data07 CHANGE `password` word VARCHAR(32)

DESC data07

四、INSERT语句

#创建雇员表,表中包含雇员id,姓名,生日
CREATE TABLE emp(
	id INT,
	ename VARCHAR(32),
	birthday DATE
)CHARACTER SET utf8

#加入数据
INSERT INTO emp VALUES (1,'a','2002-3-9');
INSERT INTO emp VALUES (2,'b','2002-10-24');
INSERT INTO emp(id,ename) VALUES(3,'c');
INSERT INTO emp(id,ename) VALUES(4,'d');

SELECT * FROM emp

细节一:日期类的添加时要放入单引号之中

细节二:列可以插入null值,前提是该字段可以为空

细节三:可以使用如下语句插入多条数据

INSERT INTO `goods` (id, goods_name, price)
VALUES(50, '三星手机', 2300),(60, '海尔手机', 1800)

细节四:可以使用默认值

即NOT NULL DEFAULT

五、update语句

#修改emp表中所有员工的id为16,不加where会默认修改所有信息
UPDATE emp SET id = 16

#修改指定的条件
UPDATE emp SET birthday = '2002-9-24' WHERE ename = 'b'
UPDATE emp SET id = id + 10 WHERE ename = 'a'

#如果修改多个字段,使用逗号隔开
UPDATE emp SET id = id + 1,ename = 'e' WHERE ename = 'a'

六、Delete语句

#delete语句,delete语句只能删除一整行,要想删除单个数据,可以使用update置空
DELETE FROM emp WHERE ename = 'a'

#删除表中所有数据
DELETE FROM emp 

#删除表
DROP TABLE emp

七、Select语句

1.基本使用

#创建一个学生表来统计分数
CREATE TABLE student (
	sname VARCHAR(5),
	math INT,
	chinese INT,
	english INT
)CHARACTER SET utf8 COLLATE utf8_bin

ALTER TABLE student MODIFY english INT

SELECT * FROM student
DESC student

INSERT INTO student VALUES('小红',79,80,50);
INSERT INTO student VALUES('小蓝',95,100,95);
INSERT INTO student VALUES('小罗',45,34,63);
INSERT INTO student VALUES('小胡',91,70,90);
INSERT INTO student VALUES('小伶',97,89,99);

#查询学生的总分
SELECT sname,(math + chinese + english) FROM student

#使用AS关键字修改别名
SELECT sname AS '姓名',(math + chinese + english) AS '总分' FROM student

#进行修改统计
SELECT sname,math+100 AS '数学' FROM student

2.where的运算符

#查询总分在200到300之间的学生
SELECT * FROM student WHERE (math + chinese + english) BETWEEN 200 AND 300
#按判断符查询
SELECT * FROM student WHERE math > 90
#in()显示在In中的值,即会找到math = 79,math = 100的行
SELECT * FROM student WHERE math in(79,100)
#模糊查询,使用LIKE关键字
SELECT * FROM student WHERE sname LIKE '小%'
SELECT * FROM student WHERE sname NOT LIKE '%罗'
#IS NULL 判断是否为空
SELECT * FROM student WHERE sname IS NULL
#and,or,not类似于与或非

3.查询练习

SELECT * FROM student WHERE english BETWEEN 80 AND 90
SELECT * FROM student WHERE math in(89,90,91)
SELECT * FROM student WHERE sname LIKE '李%'
SELECT * FROM student WHERE math > 80 AND chinese > 80
SELECT * FROM student WHERE chinese BETWEEN 70 AND 80
SELECT * FROM student WHERE (math + chinese + english) in(189,190,191)
SELECT * FROM student WHERE sname LIKE '宋%' OR '李%'
SELECT * FROM student WHERE math - chinese = 30

4.order by子句排序

#使用order by关键字对查询语句进行排序,默认为asc,即升序,也可以在order by最后使用desc,即为降序
SELECT * FROM student ORDER BY math
SELECT * FROM student ORDER BY (math + chinese + english) DESC
select * from student where sname like '小%' order by (math + chinese + english)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值