mysql或者,MySql

安装mysql ------> 配置环境变量 -------->cmd操作

1. 数据库操作 & 数据表操作 & 数据类型

数据库操作

1.查看当前所有存在的数据库 show databases;

e1c0368e0763

image.png

2.创建数据库 create database 数据库名 character set 字符集;

查看某个数据库的定义的信息 show create database 数据库名;

3.删除数据库 drop database 数据库名称;

4.切换数据库 use 数据库名;

5.查看当前使用的数据库名 select database();

数据表操作

MySql8.0的新特性------系统表全为InnoDB表(不包含任何MyISAM表,除非手动创建)

select distinct(engine) from information_schema.tables;

1.创建表(表名不区分大小写并且不可使用SQL语句中的关键字)

CREATE TABLE 表名 ( 字段名 类型(长度) 约束, 字段名 类型(长度) 约束 );

约束

主键约束:要求主键列的数据唯一,并且不允许为空。

a.添加主键约束, primary key

1. create table user( uid int primary key, uname varchar(20) );

2.create table user( uid int, uname varchar(20), primary key(id) );

3.create table tb_emp4( name varchar(20), deptId int(11), salary FLOAT, primary key(name,deptId) );

b.添加外键约束

1.create table tb_emp5( id int(11) primary key, name varchar(20), deptId int(11), salary float, constraint fk_emp_dept1 foreign key(deptId) references tb_emp1(id) );

c.非空约束 字段的值不能为空 not null

1. create table tb_emp6( id int(11) not null, name varchar(20), deptId int(11), salary float, );

d.唯一性约束 要求该列唯一,允许为空,但只能出现一个空值

可以确保一列或者几列不出现重复的值 unique

create table tb_emp7( id int(11) primary key, name varchar(20), location varchar(20), constraint sth unique(name) );

UNIQUE和PRIMARY KEY的区别:一个表中可以有多个字段声明为UNIQUE,但只能有一个PRIMARY KEY声明;声明为PRIMAY KEY的列不允许有空值,但是声明为UNIQUE的字段允许空值(NULL)的存在。

e.使用默认约束 default

create table tb_emp8( id int(11) primary key, name varchar(20) not null, deptid int(11) default 111, salary float );

f.设置表的属性自动增加 auto_increment

create table tb_emp8( id int(11) primary key auto_increment, name varchar(20) not null, deptid int(11) default 111, salary float );

b.删除主键

alter table sort drop primary key;

2.查看数据表结构 describe 表名 或者 desc 表名;

e1c0368e0763

image.png

● NULL:表示该列是否可以存储NULL值。

● Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示在列中某个给定值允许出现多次。

● Default:表示该列是否有默认值,有的话指定值是多少。

● Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等。

3.查看表结构详细语句 show create table 加\g结果不混乱

4.修改数据表

4.1修改表名

alter table rename [to] ;

4.2修改字段的数据类型

alter table modify ;

4.3修改字段名

alter table change ;

4.4添加字段

alter table add [约束条件] {first | after 已存在的字段名};

4.5删除字段

alter table drop ;

4.6修改字段的排列位置

alter table modify first|after ;

4.7改变表的存储引擎(MyISAM、InnoDB、MEMORY)

alter table engine=Innodb;

4.7删除表的外键约束

alter table drop foreign key

5.删除数据表 如果有关联 ,需要先删除外键约束,再删除表

drop table [IF EXISTS] 表1,表2,...表n;

6.查看当前数据库所有表

show tables;

数据类型

MySQL支持的数据类型主要有数值类型、日期类型和字符串类型

1.数值类型:包括整数类型TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT 、浮点小数数据类型FLOAT和DOUBLE,定点小数类型DECIMAL。

2.日期/时间类型:包括YEAR、TIME、DATE、DATETIMME和TIMESTAMP.

3.字符串类型:包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET等。

整数型数据类型

e1c0368e0763

image.png

创建表的的时候定义int(11) 是表示该数据类型制定的显示宽度,数据类型的取值范围是无关的。

浮点数类型和定点数据类型

e1c0368e0763

image.png

浮点型数据类型和定点数据类型都可以用(M,N)来表示。M为精度,表示总位数;N为标度,表示小数的位数

DECIMAL类型不同于FLOAT和DOUBLE,DECIMAL实际是以串存放的,可能的最大取值范围与DOUBLE一样,但是其有效的取值范围由M和D的值决定。如果改变M而固定D,则其取值范围将随M的变大而变大。

FLOAT和DOUBLE在不指定精度时,默认会按照实际的精度(由计算机硬件和操作系统决定),DECIMAL若不指定精度则默认为(10,0)。浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围;它的缺点是会引起精度问题。

在MySQL中,定点数以字符串形式存储,在对精度要求比较高的时候(如货币、科学数据等)使用DECIMAL的类型比较好,另外两个浮点数进行减法和比较运算时容易出问题,所以在使用浮点数时需要注意,并尽量避免做浮点数比较。

######时间与日期类型

e1c0368e0763

image.png

1.YEAR类型是一个单字节类型,用于表示年,在存储时只需要1字节。

(1)以4位字符串或者4位数字格式表示的YEAR,范围为‘1901’~‘2155’。

insert into temps values(2166); //会范围报2166超过了year的取值

insert into temps values(2010),('2010'); // 正常存储

(2)以2位字符串格式表示的YEAR,范围为‘00’到‘99’。‘00’~‘69’和‘70’~‘99’范围的值分别被转换为2000~2069和1970~1999范围的YEAR值。‘0’与‘00’的作用相同。插入超过取值范围的值将被转换为2000。

insert into temps values('0'),('00'),('77'),('10'); // 正常存储

(3)以2位数字表示的YEAR,范围为1~99。1~69和70~99范围的值分别被转换为2001~2069和1970~1999范围的YEAR值。注意:在这里0值将被转换为0000,而不是2000。

insert into temps values(0),(78),(11); // 正常存储

文本字符串类型

字符串类型用来存储字符串数据,除了可以存储字符串数据之外,还可以存储其他数据,比如图片和声音的二进制数据。MySQL支持两类字符型数据:文本字符串和二进制字符串。文本字符串类型是指CHAR、VARCHAR、TEXT、ENUM和SET。

e1c0368e0763

image.png

CHAR(M)为固定长度字符串,在定义时指定字符串列长。当保存时在右侧填充空格,以达到指定的长度。M表示列长度,M的范围是0~255个字符。例如,CHAR(4)定义了一个固定长度的字符串列,其包含的字符个数最大为4。当检索到CHAR值时,尾部的空格将被删除。

VARCHAR(M)是长度可变的字符串,M表示最大列长度。M的范围是0~65535。VARCHAR的最大实际长度由最长的行的大小和使用的字符集确定,而其实际占用的空间为字符串的实际长度加1。例如,VARCHAR(M)定义了一个最大长度为50的字符串,如果插入的字符串只有10个字符,则实际存储的字符串为10个字符和一个字符串结束字符。VARCHAR在值保存和检索时尾部的空格仍保留。

e1c0368e0763

image.png

2. 查询数据 & 插入、更新与删除数据

2.1基本查询语句

e1c0368e0763

image.png

2.2单表查询

1.查询所有字段

select * from 表名

2.查找指定字段

select 字段名1,字段名2,···,字段名n from 表名;

3.查找指定记录

select 字段名1,字段名2,···,字段名n from 表名 where 查询条件;

e1c0368e0763

image.png

4.带IN关键字查询

select 字段名1,字段名2,···,字段名n from 表名 where s_id IN (101,102) order by f_name;

5.带BETWEEN AND的范围查询

select 字段名1,字段名2,···,字段名n from 表名 where f_price BETWEEN 2.00 AND 10.2;

select 字段名1,字段名2,···,字段名n from 表名 where f_price NOT BETWEEN 2.00 AND 10.2;

6.带LIKE的字符匹配查询 (通配符有'%' 与 '')

1.百分号通配符‘%’,匹配任意长度的字符,甚至包括零字符

select 字段名1,字段名2,···,字段名n from 表名 where f_NAME like 'b%'; //以b开头

2.下划线通配符‘’,一次只能匹配任意一个字符

select 字段名1,字段名2,···,字段名n from 表名 where f_NAME like 'b_ _';

7.查询空值

select 字段名1,字段名2,···,字段名n from 表名 where f_NAME IS NULL;

select 字段名1,字段名2,···,字段名n from 表名 where f_NAME IS NOT NULL;

8.带AND的多条件查询

select 字段名1,字段名2,···,字段名n from 表名 where s_id ='101' AND F_PRICE >=5;

9.带OR的多条件查询

select 字段名1,字段名2,···,字段名n from 表名 where s_id ='101' OR s_id ='103' ; // IN (101,103);

OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先对AND两边的操作数进行操作,再与OR中的操作数结合。

10.查询结果不重复

select distinct 字段名 from 表名

11.对查询结果排序

1.单列排序

select f_name from 表名 order by f_name;

2.多列排序

在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序。

select f_name from 表名 order by f_name,f_price;

3.排序方向

与DESC相反的是ASC(升序),将字段列中的数据按字母表顺序升序排列。实际上,在排序的时候ASC是默认的排序方式,所以加不加都可以。

select f_name from 表名 order by f_name DESC,f_price;

12.分组查询

1.GROUP BY关键字通常和集合函数一起使用,比如MAX()、MIN()、COUNT()、SUM()、AVG()。

select s_id,count(*) as Total from fruits GROUP BY s_id;

select s_id,GROUP_CONCAT(f_name) as Name from fruits GROUP BY s_id; //会将每个id所对应的供应商查询出来

2.使用HAVING过滤分组

select s_id,GROUP_CONCAT(f_name) as Name from fruits GROUP BY s_id HAVING count(f_name)>1;

HAVING关键字与WHERE关键字都是用来过滤数据的,两者有什么区别呢?其中重要的一点是,HAVING在数据分组之后进行过滤来选择分组,而WHERE在分组之前来选择记录。另外,WHERE排除的记录不再包括在分组中。

3.在GROUP BY子句中使用WITH ROLLUP(在所有查询出的分组记录之后增加一条记录,该记录计算查询出所有记录的总和,即统计记录数量)

select s_id,count(*) as Total from fruits GROUP BY s_id eith pollup;

13.使用LIMIT限制查询结果的数量

SELECT * From fruits LIMIT 4;

从第五个记录开始的行数长度为3的记录

SELECT * From fruits LIMIT 4,3;

2.2插入

1.为所有表的字段插入数据

INSERT INTO 表名 (列名) values (对应列的值);

2.同时插入多条记录

INSERT INTO 表名 (列名) values (对应列的值),(对应列的值),(对应列的值),...,(对应列的值);

3.将查询结果插入到表中

INSERT INTO 表名 (列名)select (列对应的值) from tables_name2 where (condition);

2.3更新数据

update table_name set column_name1 = value1,column_name2 = value2,column_name3 = value3 where(condition);

2.4删除数据

delete from table_name [where ];

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值