天天看点

MySQL数据库的创建和基本的查询语句

数据库的定义

数据库是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库

分类

非结构化数据:

数据相对来说没有固定的特点

半结构化数据:

数据之间有着相同的存储结构 属性 值

每一条数据的属性可以不同

结构化数据:

创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的

数据。

数据之间有着相同的存储结构 属性 值

同一个结构模型中每一条数据的属性都是相同的,但是值有可能不同,这些数据非常便于存储和管理。

SQL结构化查询语言

DDL:数据库定义语言

DML:数据库操作语言

DQL:数据库查询语言

DCL:数据库控制语言

数据库相关操作

  • show databases; 查看当前的所有数据库
  • create database 数据库名 default charset utf8 collate utf8_general_ci; 创建数据库,也可也直接create database 数据库名
  • drop database 数据库名; 删除数据库
  • use 数据库名; 进入数据库
    MySQL数据库的创建和基本的查询语句
  • show tables; 查看此数据库下的所有表
  • exit; 退出,或者输入ctrl+z
  • 创建一个表
create table tb1(
id int,
name varchar(16) not null, --
age int default 3
)default charset=utf8;
           
  • drop table 表名; 删除一个表
  • delete from 表名; 或 truncate table 表名;(速度快、无法撤销)
  • 修改表
  1. 添加列

    alter table 表名 add 列名 类型;

    alter table 表名 add 列名 类型 default 默认值;

    alter table 表名 add 列名 类型 not null default 默认值;

    alter table 表名 add 列名 类型 not null primary key auto_increment;

  2. 删除列

    alter table 表名 drop column 列名 类型;

alter table tb3 drop sex;
alter table tb3 drop column age;
           
  1. 修改列类型

    alter table 表名 modify column 列名 类型;

alter table tb3 modify column sex char(12);
           
  1. 修改列类型加名称

    alter table 表名 change 原列名 新列名 类型;

alter table tb3 change sex age varchar(12);
           
  1. 修改列默认值

    alter table 表名 alter 列名 set default 1000;

alter table tb3 alter age set default 1000;
           
  1. 删除列默认值

    alter table 表名 alter 列名 drop default;

  2. 添加主键

    alter table 表名 add primary key(列名);

alter table tb3 add primary key(id);
           
  1. 删除主键

    alter table 表名 drop primary key;

常见列类型

(常用的有int,varchar,decimal,datetime)

int[(m)][unsigned][zerofill]

int 表示有符号,取值范围:-2147483648 ~ 2147483647

int unsigned 表示无符号,取值范围:0 ~ 4294967295

int(5)zerofill 仅用于显示,当不满足五位时,按左边补0,例如:00002;满足时,正常显示

tinyint[(m)] [unsigned] [zerofill]`

有符号,取值范围:-128 ~ 127.

无符号,取值范围:0 ~ 255

bigint[(m)][unsigned][zerofill]

有符号,取值范围:-9223372036854775808 ~ 9223372036854775807

无符号,取值范围:0 ~ 18446744073709551615

decimal[(m[,d])] [unsigned] [zerofill]`

准确的小数值,m是数字总个数(负号不算),d是小数点后个数。m最大值为65,最大值为30.

FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

单精度浮点数,非准确小数值,m是数字总个数,d是小数点后个数。

DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

双精度浮点数(非准确小数值),m是数字总个数,d是小数点后个数。

char(m)

定长字符串,m最大255,即使内容长度小于m,也会占用m长度

varchar(m)

变长字符串,m最大65535,内容小于m时会按真实数据长度存储,如果超出m长度限制会报错。

text

text数据类型用于保存变长的大字符串,长文本会用,如文章、新闻

mediumtext

A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters.
           

longtext

A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1)
           

datetime

YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59)
           

timestamp

YYYY-MM-DD HH:MM:SS(1970-01-01 00:00:00/2037年)
           
对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储,查询时,将其又转化为客户端当前时区进行返回。

对于DATETIME,不做任何改变,原样输入和输出。
           

date

YYYY-MM-DD(1000-01-01/9999-12-31)
           

time

HH:MM:SS('-838:59:59'/'838:59:59')
           

DQL数据库查询语言

概念

  • 关系:可以理解为一张二维表,每个关系都有一个关系名,就是通常说的表名
  • 元组:二维表中的一行,在数据库中经常被称为记录
  • 属性:二维表中的一列,在数据库中经常被称为字段
  • 域:属性的取值范围,也就是数据库中某一列的取值限制
  • 关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成
  • 关系模式:指对关系的描述。其格式为:关系名(属性1,属性2, ... ... ,属性N),在数据库中成为表结构

DQL查询语句

格式:

select 列名*N from 表名 where 查询条件1 and/or 查询条件2 group by 列 Having 分组条件 Order by 排序
           

规则: sql在书写的时候除了查询条件之外,大小写都可以

​ select * from user where uname ='zs';

​ SELECT * FROM USER WHERE UNAME = 'zs';

-- 属于SQL语句的注释

​ 所有的查询条件为字符串时,需要用'xxx'进行修饰,否则就会当做列名去处理

select查询

--查询姓名为bfy的学生信息
select *(通配符,默认查询所有列) from emp(表名) where(过滤符合条件的信息)
name='bfy'(查询条件为字符串时,需要用'xxx'进行修饰) (条件查询:= > <  !=  <> >= <=其中<>和!=是一个意思) 
and(并列查询条件) id in(001,002,003)(in 在某个范围中查找) 
and phone is null(空值查询用 is null/is not null) 
and score between 90 and 100 (范围比较)
and sex like '%S%'(模糊查询,%代表任意个字符,这里的意思是带有s的字符串,
同理,'%S'是最后一个字符是s的字符串,'S%'第一个字符是s的字符串。'_S%'中的
_代表占位符,占一个字符的位置,这里的意思就是第二个字符是S的字符串,由于是模糊查询,字母的大小写都会查询出来,这点要注意)
order by age(结果排序,使用asc是升序排列(默认),使用desc可以降序排序,也可也多列排序如:order by deptno,sal desc)
           
--显示不带有"R"的员工的姓名
select ename from emp where ename not like '%R%';

--显示所有员工的姓名、工作和薪金,按工作的降序排序,若工作相同则按薪金排序.
select ename,job,sal from emp order by job desc,sal;


           

select结果分页

--每次查询前N行
select * from student limit 4;
--查询第N页,每页显示M个
select * from student limit 0,3;