一、导学
1、什么是SQL?
结构化查询语言,数据库管理系统通过SQL语言来管理数据库中的数据;
2、SQL语言组成部分
(1)DDL——数据定义语言,主要定义数据库、表、视图、索引和触发器等
(2)DML——主要包括对数据的增删改;insert插入数据、updata更新数据、删除数据等
(3)DQL——数据检索语言,用来从表中获得数据,确定数据怎样在应用程序中给出,例如SELECT查询数据
(4)DCL——数据控制语言,主要用于控制用户的访问权限
3、SQL目录功能
bin目录存储可执行文件
data目录存储数据文件
include目录存储包含的头文件
lib目录存储库文件
docs目录存储文档
share目录,错误消息和字符集文件
my.ini文件,MySQL的配置文件
二、初识MySQL
1、从cmd进入到命令框,输入mysql -uroot -p123456 点击两次回车键即可链接到数据库;
2、分隔符为\g或者是;一般情况下用封号;
3、用help或h来查看帮助手册
4、用‘\c’来取消当前的输入,当前输入的命令不会被执行
5、修改MySQL命令提示符的方法:
(1)mysql -uroot -proot-prompt提示符
(2)promt提示符,通过prompt命令进行修改
或者直接在进入的时候就将命令符进行修改——用mysql -uroot -p --prompt=\h~\u将命令提示符修改为服务器名称加当前用户名称
6、命令提示符常用参数:
\D:完整日期
\d:当前数据库
\h:服务器名称
\u:当前用户名
7、查看当前版本号
8、查看当前用户
9、得到当前时间
三、SQL语法规范
1、关键字与函数名称全部大写
2、数据库名称、表名称、字段名称等全部小写
3、SQL语句必须以分隔符结尾
4、SQL语句支持换行操作,只要不把单词、标记或引号字符串分割为两部分,可以用回车转下一行;
5、注意:引号必须成对出现
6、数据库名称、表名称、字段名称尽量不要用MySQL的保留字,如果需要使用的时候用反引号(’’)将名称括起来
7、修改分隔符:用delimiter来修改分隔符
8、通过键盘的上下键可以调出之前写过的命令
9、通过\T来创建新文件,开启输出日志之后,任何命令都会保存在该文件中;结束输出日志用\t来结束
四、数据库相关操作
1、通过CREATE BATABASE或者是CREATE SCHEMA 创建一个数据库;也可以手动在文件夹里添加一个数据库
2、已经创建的数据库不能再次创建相同名称的数据库
如果不存在test2数据库的情况下建立该数据库,提示有一个警告
3、通过show warnings;来查看警告内容
4、通过show databases;或者show schemas;命令来查看数据库
5、通过show create database test3;来查看文件创建信息,其中可以看到编码方式是utf-8
6、通过CREATE DATABASE IF NOT EXISTS test4 DEFAULT CHARACTER SET = ‘GBK’;命令来以GBK编码方式常见test4数据库;等号可以不写
7、通过SHOW CREATE DATABASE test4;可以查看创建数据库的基本信息
8、通过ALTER DATABASE 数据库名称 DEFAULT CHARACTER SET 编码方式; 来更改编码方式
9、通过use+数据库名称来打开数据库
10、查看当前打开的数据库
11、通过 DROP DATABASE数据库名称来删除指定数据库
五、表相关操作
1、什么是表?
数据表是数据库中最重要的组成成分之一,是其他对象的基础
数据表是存储数据的数据机构
数据表是包含了特定实体类型的数据
数据表由行和列构成的二维网格
数据表一定现有表结构,再有数据
数据表至少有一列,可以没有行或者由多行
数据表名称要求唯一,而且不要包含特殊字符
2、如何创建表?
字段名称、字段类型
关于字段类型:整数;字符串;浮点数;布尔类型
3、mysql支持的数据类型
(1)整数类型![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ac8dc195909e350683dc8a6087d57d56.png)
*查看帮助手册,查看整数类型的存储范围
(1)help+查询内容
(2)或者用\h+查询内容
(2)浮点数![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e9744ed3addd372003c7c325f84eb2e4.png)
(3)字符串![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e0bef5d239329c0e674209c70be79c51.png)
(4)日期时间类型![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f422e69ff302c1de2a2088ba11806c31.png)
(5)二进制类型
六、MySql存储引擎介绍
1、什么是存储引擎?
存储引擎是指表的类型,数据库的存储类型决定了表在计算机中的存储方式。用户可以根据不同的存储方式、是否进行事务处理来选择合适的存储引擎
2、如何查看mysql的存储引擎?
SHOW ENGINES;
或者是SHOW ENGINES\G; 以***分隔符来表示,更加美观
默认的引擎是 InnoDB
3、查看存储引擎相关内容
4、查看默认存储引擎
5、mysql常用的存储引擎及特点
(1)InnoDB存储引擎;——支持外界
当表要求较高的事物处理时可以用该引擎
(2)MyISAM存储引擎;——支持三种格式:静态型(字段不变)、动态型(字段可变)、压缩型(占用自盘小)
当要求较高的查询速度和写入数据时候可以用该引擎
缺点:不支持事物
(3)MEMORY存储引擎——用存放在内存中的数据建表,同样存储在内存中
当对安全性要求不高,需要快速读取的时候可以用memory,生命周期比较短,且表不能太大,临时表
缺点:数据存储在内存上,如果意外断电会影响数据的完整性
七、MySQL表的创建
1、建立一个用户表
CREATE TABLE IF NOT EXISTS user(
id SMALLINT,
username VARCHAR(20),
age TINYINT,
sex ENUM('男','女','保密'),
email VARCHAR(50),
addr VARCHAR(200),
birth YEAR,
salary FLOAT(8,2),
tel INT,
married TINYINT(1) COMMENT '0代表为结婚,非0代表已结婚',
wechat VARCHAR(50)
)ENGINE=INNODB CHARSET=UTF8;
2、建立课程表
CREATE TABLE IF NOT EXISTS course(
cid TINYINT,
courseName VARCHAR(50),
courseDese VARCHAR(200)
);
3、建立新闻分类表
CREATE TABLE IF NOT EXISTS cms_cate(
id TINYINT,
cateName VARCHAR(50),
cateDesc VARCHAR(200)
)ENGINE=MyISAM CHARSET=UTF8;
4、建立新闻表
CREATE TABLE IF NOT EXISTS cms_news(
id INT,
title VARCHAR(50),
content TEXT,
pubTime INT,
clickNum INT,
isTop TINYINT(1) COMMENT '0代表不置顶,1表示置顶'
);
八、测试数据类型
基础知识:
查看字段名称
(1)DESC cms_news;
(2)DESCRIBE cms_news;
(3)SHOW COLUMNS FROM cms_news;
1、测试整型
CREATE TABLE test1(
num1 TINYINT,
num2 SMALLINT,
num3 MEDIUMINT,
num4 INT,
num5 BIGINT
);
向表中插入记录INSERT tb1_name VALUE/VALUES(值,···);
查询表中所有记录 SELECT * FROM tb1_name;
用***?MEDIUMINT***来查询其范围
测试tinyint有无正负号的情况
CREATE TABLE test2(
num1 TINYINT UNSIGNED, #无负号的情况
num2 TINYINT
);
插入超过范围的数值会报错
测试zerofill
CREATE TABLE test3(
num1 TINYINT(3) ZEROFILL, #zerofill这里表明数值只能大于等于0
num2 TINYINT(3)
);
2、测试浮点型数据
CREATE TABLE test4(
num1 FLOAT(6,2),
num2 DOUBLE(6,2),
num3 DECIMAL(6,2)
);
其中6是最长有六位数,其中有两位小数
出现了警告
查询警告,第三个定点数出现了问题
查询某个数值
当查询字符串数字时
定点数比较精确,是因为以字符串形式保存数据。一般来说,银行货币等都以定点数格式保存数据。
3、测试字符串类型
创建表格,养成好习惯,创建的时候把编码方式确定为utf8,不然没办法插入中文数据
然后插入数据值
INSERT test6 VALUES(‘1’,‘1’);
以下出现的所有test5相当于test6
INSERT test6 VALUES(‘12345’,‘12345’);
INSERT test6 VALUES(‘123456’,‘123456’);
报错,长度超过了限制
INSERT test6VALUES(’’,’’);
插入空字符串是可以的
INSERT test6 VALUES('1 ','1 ');
*CHAR后面的空格被去掉了,但是VARCHAR后面的空格被保留下来了。
插入中文字符
查询中文字符所占的空间,utf8格式下在占用的空间为3个长度
字符串前面的空格都会被保留下来
检索效率——CHAR>VARCHAR>TEXT
为了优化性能,尽量不使用text
text不能有默认值
测试text
查看表结构
查看表
测试枚举类型
(1)建表
(2)插入数据
注意:可以用序号代替枚举值
2代表插入“女”这个数值
(3)查询表格内容
(4)查看表结构
默认值可以为空
可以插入null值,大小写均可
但是不能插入空字符串,会报错
测试集合类型
集合中可以存储64个值,同时可以从集合中选多个值
创建集合:
查看表结构
插入值的时候可以选择多个,多个值之间需要用逗号隔开,否则会报错,如下:
但检索的时候,还是会按照我们设置的顺序排列
集合保存值的方式是二进制,ABCD四个爱好分别是按照1,2,4,8的数值进行保存。以数字3为例,当我们插入数值3的时候,相当于插入了前两个爱好。
插入数值15的时候,所有得数值都有了
4、测试日期时间类型
测试YEAR
建表
插入数据
查表
year的范围是1901到2155
当插入的数值超过这两个数值时,会报错
当日期以字符串形式插入也可以
当插入的是两位数字或者两位字符串时,00-69之间或转换到2000-2069年;70-99之间会转换成1970-1999年之间
当插入数字0时,我们得到是数字0
当插入的是字符串0时,得到的是2000年
TIME类型
在time里面第一个值36等于1天24小时+12小时,第一个值=天数*24+小时数
其中,秒数可以简略
当插入的是一个四位数时,小时的位置省略掉,存入的是分钟和秒数
当插入的是一个四位数时,小时的位置省略掉,存入的是分钟和秒数
如何插入的是两位数,那么插入的是秒数
在time里面不管是字符串的0还是整数0,得到的都是四个0
如果插入的值超过了存储范围,则会报错
date
输入字符串,年月日之间用“-”分割
或者是用/分割
或者是120706