MySQL

1.什么是数据库

数据库:英文为Database, 简称:DB

数据库的分类:

数据库根据储存采用的数据结构的不同可以分为许多种 , 层次式数据库 , 网络式数据库.

目前占市场主流的是关系型数据库 . 还有非关系型( NoSQL )数据库 ( 键值对数据库 , 例如 : MongDB , Redis )等其他类型的数据库.

2.什么是关系型数据库

底层是以二维表结构

3.常见的关系型数据库

SQL Server 微软提供,适用于中大型项目

Oracle 甲骨文公司 , 适用于大型或超大型项目.

DB2 IBM,适用于中大型项目(主要用于银行/电信等企业)

MySQL 瑞典MySQLAB( 现在属于甲骨文公司 )( 免费开源, 适用于中小型项目(可集群(用于大型项目)) , 性能也还ok )

SQL 迷你数据库,嵌入式设备中

1.4

数据库服务器:就是sql服务器的软件,将软件安装在服务器

1.5什么是sql语言

structured query language:结构化的查询语言

SQL是操作所有关系型数据库的通用的语言

SQL语言的分类:

  1. DDL – 数据库定义语言,CREATE、ALTER、DROP等操作(即创建、删除、修改数据库和数据表)
  2. DML – 数据操作语言,指INSERT、UPDATE、DELETE等操作(即数据表中数据的增、删、改操作)
  3. DQL – 数据查询语言(指SELECT操作,即数据表中数据的查询操作)

查看所有数据库:show databases;

创建一个数据库:create database 库名 charset 编码;

进入某个数据库:use + 库名;

查看已进入的库:select database();

查看当前数据库中所有表:show tables;

删除mydb1库:drop database 库名;(删除不存在的库会报错)库名前加上 if exists 就不会报错(表示库存在就删除,不存在就不管)

创建mydb1库,指定编码为 utf-8 :create database 库名 charset 编码;(utf-8 写成 utf8 因为MySQL不识别-)

查看表结构:desc 表名;

查看建库时的语句:show create database 库名;

查看建表时的语句:show create table 表名;

进入库,删除某表:drop table if exists 表名;(先进入库再才能删除)

创建表:

建表的语法:

create table 表名(

列名 数据类型,

列名 数据类型,

);

例如:

create table stu(

id int,

name varchar(长度),

gender varchar(),

birthday date,

score double

);

MySQL数据类型和字段约束

1.MySQL数据类型

1.数值类型

在MySQL中也有对应的数据类型,其中常用的数值类型就两种:

int:对应 Java 中的 int 类型

double:对应 Java 中的 double 类型

2.字符串类型

char 类型 :定长字符串(最大长度为255个字节)

name char(10),其中的10是最大长度,即最多能存10个字符,**当存入的数据长度小于10时,用空格填充。造成空间浪费。**但是 char 类型在存储数据时,效率比 varchar 高;

varchar 类型:不定长字符串(最大长度为65535个字节)

name varchar(10),其中的10是最大长度,即最多能存10个字符,当存入的数据长度小于10时,剩余空间留个别的数据使用,不会有空间浪费。但是效率比 char 低

text 类型:长文本类型,大文本类型(最多能存65535个字节)

3.日期类型

date:格式,年月日

time:格式,时分秒

datetime:格式,年月日时分秒

timestamp:时间戳,格式,年月日时分秒

timestamp和datetime的区别:

相同点:都是日期类型,格式都是年月日时分秒

不同点:

(1)datetime存储的只有年月日时分秒

(2)timestamp存储的是 1970年1月1日到当前日期的时间毫秒值。但是显示的时候还是年月日时分秒。

(3)datetime类型的列,如果插入数据时不给值,默认就是null。

timestamp 类型的列,如果在插入数据时不给值,可以设置为默认值为当前时间。

如果在修改数据时不给值,可以设置修改后的值为当前时间()

(4)datetime的时间范围是 0000~9999年

timestamp的时间范围是 1970年~2038年

2.对表的增删改

修改表:

  • 修改表名:
alter table 表名 rename to 新表名;
  • 修改表的字符集
-- 查看表的字符集,即为查看表的创建语句
show create table 表名;
-- 修表的改字符集
alter table 表名 character set 字符集;

修改列:

  • 添加一列:
alter table 表名 add 列名 数据类型;
  • 修改列的数据类型:
alter table 表名 modify 列名 数据类型;
  • 修改列名和数据类型:
alter table 表名 change 旧列名 新列名 新数据类型
  • 删除列:
alter table 表名 drop 列名;

1.向表中插入数据

– 插入记录:

第一种:
insert into 表名(第一列列名1,第二列列名2,...) values(值1,值2,....);
insert into stu(id ,name,gender,...) values(1,‘啊辉’,‘男’,...);
-- (值列对应,字符串或时间用单引号)

第二种:
insert into stu  values (2,‘阿辉’,‘男’,...);
-- (给表中所有列赋值时,可以不用写列)

2.查询表的全部信息

select * from 表名; 其中 * 表示全部列, from:指定某一个表

3.对表的修改

– 修改语法:update 表名 set 列=值,列=值,列=值…(还可以加 where 条件,where表示)

修改一整列的数值:update stu set score = score + 10;(对score这列值全部加10,MySQL不支持 += )

修改符合条件的数值:update stu set score = 88 where name=‘giao’;(只对符合 where 要求的有用)

4.对表删除

– 删除记录语法:delete from 表名 [ where 条件];

例如:delete from 表名;(删除全部,删除记录本身,对其它的没有影响,例如:自增的叠加还是继续往后)

delete from 表名 where 条件;(删除符合条件的一整行)

另外的删除方法:truncate 表名;(这种删除会摧毁表,再重新创建,重置一切)

5.对表的查询

查询表中的数据(基础查询):

例如查询其中的几个列:查询表 emp 中的 姓名,工资,奖金(如下:)

select name,sal,bonus

from emp;

例如查询所有信息:查询表中的所有信息(如下:)

select * from emp;(效率不如指定列名)

例如去掉重复记录:distinct 用于剔除重复的记录

select distinct name,sal,bonus

from emp;

查询表中的数据(where查询):

例如:

select 列名,列名… from emp where 条件;

例题:

计算薪水加奖金大于5000,显示姓名和总薪水

解法:1. select name,薪水+奖金 from emp where 薪水+奖金>5000;(这样查询会出现一些问题,奖金如果为空(null),薪水+奖金就会为 null,出现运行不准确的情况!)

2. select name,薪水+ifnull(奖金,0) from emp where 薪水+ifnull(奖金,0)>5000;(把需要判断的值加上函数 ifnull(列,值),判断该列是否为null,为 null 则用 0 替换!)

3. select name 姓名,薪水+ifnull(奖金,0) 总薪水 from emp where 薪水+ifnull(奖金,0)>5000;(为列名加上备注,直接在列名后面加上空格和备注即可! where 中不能使用列的备注)

where sal >=3000 and sal <= 4000; 等价于 where sal between 3000 and 4000; (条件: 3000=< sal =<4000)

where sal = 1400 or sal = 1600 or sal = 1800; 等价于 where sal in(1400,1600,1800);(条件:sal等于1400或1600或1800)

where not(sal = 1400 or sal = 1600 or sal = 1800);(取反)

where !(sal = 1400 or sal = 1600 or sal = 1800); (取反)

where sal not in(1400,1600,1800); (取反)