文章目录
MySQL 冲冲冲
1. MySQL的基本操作
按照好MySQL后需要先设置环境变量
命令行启动(要以管理员身份运行的终端)
查看服务命令: net start 查看MySQL是否在运行中
关闭服务命令: net stop MySQL80
启动服务命令: net start MySQL80
控制台登陆MySQL命令(设置好环境变量的情况下)
- mysql -h 127.0.0.1 -uroot -p密码
2. MySQL数据库命名规范
注意:数据库是不区分大小写的,所以大驼峰法和小驼峰法在这里都不适用,一般用下划线区分两个单词
就算用大写创建的数据库,用小写字母依然可以成功访问
可以采用26个英文字母 (不区分大小写) 和0-9的自然数 (一般不需要) 加上下划线 ‘’ 组成,命名简介明确 (School),多个单词用下划线 ‘’ 分隔,一个项目一个数据库,多个项目慎用同一个数据库!!!
3. 数据库操作
3.1 关系模型
关系数据库是建立在关系模型上的。而关系模型本质上就是若干个存储数据的二维表,可以把它们看作很多Excel表。
表的每一行称为记录(Record),记录是一个逻辑意义上的数据。
表的每一列称为字段(Column),同一个表的每一行记录都拥有相同的若干字段。
字段定义了数据类型(整型、浮点型、字符串、日期等),以及是否允许为NULL。注意NULL表示字段数据不存在。一个整型字段如果为NULL不表示它的值为0,同样的,一个字符串型字段为NULL也不表示它的值为空串’'。
通常情况下,字段应该避免允许为NULL。不允许为NULL可以简化查询条件,加快查询速度,也利于应用程序读取数据后无需判断是否为NULL。
3.2 数据库的操作
像文件一样,我们可以随时对数据库执行如下操作:
① 创建数据库
② 查看数据库
③ 选择数据库
④ 删除数据库
创建数据库
创建数据库是指在数据库系统中划分一块空间,用来存储相应的数据,这是进行表操作的基础,也是进行数据库管理的基础。
(1)在MySQL中,创建数据库之前,可以使用SHOW语句来显示当前已经存在的数据库,具体SQL语句如下:
show databases;
(2)创建数据库的SQL语句如下:
create database database_name
- (其中参数database_name表示所要创建的数据库的名称)
查看数据库
查看数据库在上面已提及,SQL语句如下:
show databases;
选择数据库
在数据库管理系统中一般会存在许多数据库。在操作数据库对象之前,需要先选择一个数据库。
- 在MySQL中选择数据库可以通过SQL语句USE来实现,其语法形式如下:
use database_name;
注:在上述语句中,database_name参数表示所要选择的数据库名字。
删除数据库
在删除数据库之前,首先需要确定所操作的数据库对象已经存在。在MySQL中删除数据库可以通过SQL语句DROP DATABASE来实现,其语法形式如下:
drop database database_name;
注:在上述语句中,database_name参数表示所要删除的数据库名字。
切记: 删除数据库时mysql 不会确认,千万要小心!!!
4. 数据表操作
在MySQL数据库中,表是一种很重要的数据库对象,是组成数据库的基本元素,由若干个字段组成,主要用来实现存储数据记录。表的操作包含创建表、查询表、修改表和删除表,这些操作是数据库对象的表管理中最基本也是最重要的操作。
4.1 从最简单的表操作开始
创建班级表:
操作语句:
mysql>create database school;#创建数据库school
mysql>use school;#选择数据库school
mysql>create table class(class_id int, class_name varchar(128), class_teacher varchar(64));#创建表class
mysql>insert into class values (101, '六年级一班', '马老师');#往表中插入101班记录
mysql>insert into class values (102, '六年级二班', '潘老师');#往表中插入102班记录
mysql>select from class;#查询表class 中的全部记录
mysql>select from class where class_id=101;#查询表class 中的全部记录
4.2 查看表内容和查看表结构
- 前提进入数据库中才能查看数据库中的表
查看表结构
desc class;#desc 表名
查看表中的内容
select * from class;
4.3 表的创建
基本语法:
CREATE TABLE <表名> ([表定义选项])[表选项][分区选项];
- create table 命令语法比较多,其主要是由表创建定义(create-definition)、表选项(table-options)和分区选项(partition-options)所组成的。
mysql> use school;#选择数据库school
mysql>create table class1(class_id int, class_name varchar(128), class_teacher varchar(64));#创建表class
create table语句的主要语法及使用说明如下:
create table:用于创建给定名称的表,必须拥有表CREATE的权限。
在没use 表名的情况下创建表:
指定要创建表的名称,表名称可以被指定为 数据库名.表名,以便在特定的数据库中创建表。
例如:创建表class2
mysql>create table school.class2(class_id int, class_name varchar(128), class_teacher varchar(64));
<表定义选项>:表创建定义,由列名(col_name)、列的定义(column_definition, 或者叫类型定义)以及可能的空值说明、完整性约束或表索引组成,如下图所示。
mysql>use school;#选择数据库
school mysql>create table class4(
class_id int PRIMARY KEY, class_name varchar(128) NOT NULL, class_teacher varchar(64)UNIQUE);#创建表class3
PRIMARY KEY:主键具有唯一性,比如每个人的身份证;------primary key :主要的值
NOT NULL:不能为空-----------------net null :不为空
UNIQUE:表示在这个表中,这列不能有相同的 -------unique :独特
注意:
默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存在,则会出现错误。
提示:使用 create table 创建表时,必须注意以下信息:
要创建的表的名称不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT等。
数据表中每个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开。
列名
全部小写命名,尽量避免出现大写
字段必须填写描述信息
禁止使用数据库关键字
在命名表的列时,不要重复表的名称(如:在 user 表中,出现 user_name 字段)
字段命名使用完整名称(尽量用完整英文单词)
4.3.1 列的类型定义
4.3.1.1 整形类型
整数类型是数据库中最基本的数据类型。标准SQL中支持INTEGER和SMALLINT这两种数据类型。MySQL数据库除了支持这两种类型以外,还扩展支持了TINYINT、MEDIUMINT和BIGINT。下表从不同整数类型的字节数、取值范围等方面进行对比。
mysql>use school;#选择数据库school
mysql>create table class5(class_id int , class_name varchar(128),
class_teacher varchar(64) );#创建表class5
整数类型的附带属性
- 类型名称后面的小括号指定显示宽度(并不是该类型占用字节数)。
- 如果不显示指定宽度则默认为tinyint(3)、 smallint(5)、 mediumint(8)、 int(11) 和 bigint(20)。
- 一般配合 zerofill 使用,顾名思义,zerofill 就是用“0”填充的意思,也就是在数字位数不够的空间用字符“0”填满。
mysql>use school;#选择数据库school
mysql>create table class6(class_id integer(5) zerofill, class_name varchar(128),
class_teacher varchar(64) );#创建表class6
unsigned(无符号)----很少使用
- 如果需要在字段里面保存非负数或者需要较大的上限值时,可以用此选项,
- 它的取值范围是正常值的下限取 0,上限取原值的 2 倍,
- 例如,tinyint 有符号范围是-128~+127,而无符号范围是 0~255。
- 如果一个列指定为 zerofill,则 MySQL 自动为该列添加 unsigned 属性。
mysql>use school;#选择数据库school
mysql>create table class6(id integer unsigned, name varchar(128), teacher varchar(64) );#创建表class6
mysql>create table class7(id integer zerofill, name varchar(128),
teacher varchar(64) );#创建表class7, id类型为 int unsigned
auto_increment(用的较多)
- 在需要产生唯一标识符或顺序值时,可利用此属性,这个属性只用于整数类型。
- auto_increment 值一般从 1 开始,每行增加 1。 一个表中最多只能有一个 auto_increment列 。
- 对于任何想要使用 auto_increment 的列,应该定义为 not null,并定义为 primary key 或定义为 unique 键(这两个属性中就包括了not null)。
- 例如,可按下列任何一种方式定义 auto_increment 列:
mysql>use school;#选择数据库school
mysql>create table class8(id integer auto_increment primary key, name varchar(128),
teacher varchar(64) );#创建表class8, id 具有自增长属性
mysql>create table class9(id integer auto_increment unique, name varchar(128),
teacher varchar(64) );#创建表class9, id 具有自增长属性
在不输入id的情况下,让id自增长 -------需要指明values中的值是给哪一个的
inser into class8 (name , teacher) values('六年级','王老师')
4.3.1.2 浮点类型和定点数类型
数据表中用浮点数类型和定点数类型来表示小数。浮点数类型包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型)。定点数类型就是DECIMAL型。下面从这三种类型的字节数、取值范围等方面进行对比,如下表所示。
三种类型的区别:
- float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,float和double都是浮点型,而decimal是定点型;
mysql>use school;#选择数据库school
mysql>create table class10 (f1 float, do1 double, de1 decimal);#创建表class10
MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的 可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。对于decimal,M是最大位数(精度),范围是1到65。可不指定,默认值是10。D是小数点右边的位数(小数位)。范围是0到30,并且不能大于M,可不指定,默认值是0。
FLOAT和DOUBLE在不指定精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0,即(10, 0)。
上述:20 = (小数 + 整数) 的位数 10 = 小数的位数
- 忠告: 当我们需要存储小数,并且有精度要求,比如存储金额时,通常会考虑使用DECIMAL字段类型!!
4.3.1.3 日期和时间类型
- 日期与时间类型是为了方便在数据库中存储日期和时间而设计的,数据库有多种表示日期和时间的数据类型。其中,YEAR类型表示年,DATE类型表示日期,TIME类型表示时间,DATETIME和TIMESTAMP表示日期和时间。下面从这5种日期与时间类型的字节数、取值范围和零值等方面进行对比,如下表所示。
每种日期与时间类型都有一个有效范围。如果插入的值超过了这个范围,系统就会报错,并将零值插入到数据库中。不同的日期与时间类型均有不同的零值.
插入日期时间时,日期年月日和时间时分秒可以使用 “*: - _ /* ”中的任意字符来分隔,如果单独插入时间,则会报错!!!
mysql>use test;#选择数据库test
mysql>create table date_example (e_date date, e_datetime datetime, e_timestamp timestamp, e_time time, e_year year);#创建表dt_example
#使用分隔符的时候,尽量标准,不然看着很杂
mysql>insert into date_example values('2020-5-9', '2020-5-9 15:01:00', '2020-05-09 15:01:00', '15:56:01', 2011);
mysql>insert into date_example values('2020-5/9', '2020:5-9 15/01-00', '2020:05/09 15-01_00', '15:56:01', '2011');#效果同上面插入语句
也可以通过mysql 本身提供的时间函数获取:
常用的时间函数:
- 用函数直接读出当前时间
curdate() - 获得当前的DATE, 可直接插入DATE 类型中.
now() - 获得当前的DATETIME, 可直接插入DATETIME 和TIMESTAMP类型中.
后面几项都需要先给函数传入now();
time() - 获取参数给定时间串中的时分秒,可直接插入TIME 类型中.
year() - 获取参数给定时间串中的年份,可直接插入YEAR类型中.
month() 、day()、hour()、minute()、second() 获取参数给定时间串中的月、日、时、分、秒值.
mysql>use test;#选择数据库test
mysql>insert into date_example values(CURDATE(), NOW(), NOW(), time(NOW()), YEAR(NOW()) );
4.3.1.4 字符串类型
char类型和varchar类型
char类型和varchar类型都在创建表时指定了最大长度,其基本形式如下:
# 字符串类型(M)
其中,“字符串类型”参数指定了数据类型为char类型还是varchar类型;M参数指定了该字符串的最大长度为M。例如,char(4)就是数据类型为char类型,其最大长度为4。
char类型的长度是固定的,在创建表时就指定了。其长度可以是0~255的任意值。例如,char(100)就是指定char类型的长度为100。char存储值时,它们会用空格右填充到指定的长度, 所以在字符串尾部如果有空格的话不可以用char存储,因为空格会被认为字符串结束符。
varchar类型的长度是可变的,在创建表时指定了最大长度。定义时,其最大值可以取0~65535之间的任意值。指定varchar类型的最大值以后,其长度可以在0到最大长度之间。例如,varchar(100)的最大长度是100,但是不是每条记录都要占用100个字节,而是在这个最大值范围内使用多少就分配多少。varchar类型实际占用的空间为字符串的实际长度加1或2,这样即可有效节约系统的空间。
值 | char(4) | 存储字节数 | varchar(4) | 存储字节数 |
---|---|---|---|---|
‘’ | ‘’ | 4 | ‘’ | 1 |
‘ab’ | ‘ab’ | 4 | ‘ab’ | 3 |
‘abcd’ | ‘abcd’ | 4 | ‘abcd’ | 5 |
‘abcdefgh’ | - | #插入失败 | - | #插入失败 |
mysql>use test;#选择数据库test
mysql>create table char_example(e_char char(5), v_char varchar(5));#创建数据库表
mysql>insert into char_example values('12345','12345');#正常插入数据
mysql>insert into char_example values('1 2 ','1 2 ');#char类型会屏蔽后面隐藏的空格,varchar 不会
mysql>select concat('(',e_char, ')'), concat('(',v_char, ')') from char_example ;#让char 后面屏蔽的空格原型毕露
实战建议
· 1、 char一定会使用指定的空间,varchar是根据数据来定空间
· 2、 char的数据查询效率比varchar高:varchar是需要通过后面的记录数来计算
· 3、 如果确定数据一定是占指定长度,那么使用char类型;
· 4、 如果不确定数据到底有多少,那么使用varchar类型;
· 5、 如果数据长度超过255个字符而在65535之内,直接使用varchar
· 6、 如果字符串尾部要保留空格,必须选择varchar