MySQL基础(一)

MySQL基础(一)

数据库

数据库是计算机应用系统中的一种专门管理数据资源的系统。数据库就是一组经过计算机整理后的数据,存储在一个或者多个文件中,而管理这个数据库的软件就称为数据库管理系统。常见的软件开发中应用数据库有IBM的DB2,Oracle,SQL Server,PostgreSQL,MySQL,Access等。

DBS 数据库系统
	DB 		数据库
		Database
	DBMS 	数据库管理系统
		Database Management System
	DBA 	数据库管理员
		Database Administrator
SQL结构化查询语言
SQL是一种专门用于查询和修改数据库里的数据,以及对数据库进行管理和维护的标准化语言

数据定义语言(DDL):用于定义和管理数据对象,包括数据库,数据表等。例如:CREATE,DROP,ALTER等。
数据操作语言(DML):用于操作数据库对象中所包含的数据。例如:INSERT,UPDATE,DELETE语句。
数据查询语言(DQL):用于查询数据库对象中所包含的数据,能够进行单表查询,连接查询,嵌套查询,以及集合查询等各种复杂程度不同的数据库查询,并将数据返回客户机中显示。例如:SELETE
数据控制语言(DCL):是用来管理数据库的语言,包括管理权限及数据更改。例如:GRANT,REVOKE,COMMIT,ROLLBACK等。
关系型数据库
以行和列的形式存储数据,这一系列的行和列被称为表,一堆表组成了数据库,一堆库组成了咱们的数据库服务器
C/S结构的软件
客户端/服务器
服务器:wampserver里面就集成了
客户端:Navicat、cmd、php、PHPmyadmin、sqlyog
MySQL操作
mysql的连接
	mysql -u用户名 -p密码 -h服务器地址 

注意:
1.每个SQL命令都需要使用分号来完成
2.可以将一行命令拆成多行
3.可以通过\c、ctrl+c来取消本行命令
4.可以通过\q、exit或者quit来退出当前客户端

常见操作
显示帮助信息:\h(同help命令)
将查询后的数据立起来:\G
取消当前未完成的操作:\c
退出当前客户端:\q
显示当前服务器状态:\s
更改执行符:\d

数据库的基本操作
-- 查看所有的数据库
	show databases;
-- 选择数据库
	use 库名;
-- 创建数据库;库名已存在报错
	create database 库名;
	create database if not exists 库名;
	create database 库名 default charset=utf8; --指定默认字符集
-- 删除数据库;库名不存在报错
	drop database 库名;
	drop database if exists 库名;
表的基本操作
-- 查看所有数据表
	show tables;
-- 创建数据表;
	create table 表名(
		字段1 类型,
		字段2 类型,
		字段3 类型
	)engine=innodb default charset=utf8;
	注意:字符集为utf8,少个-
-- 查看表结构
	desc 表名;

-- 删除数据表
	drop table 表名;
数据相关操作
-- 插入数据
insert into 表名 (字段1,字段2...) values(值1,值2...);
-- 查看数据
select `字段1`,`字段2` from 表名;
select * from 表名;
-- 修改数据
update 表名 set 字段1='值1',字段2='值2'... where 条件;
-- 删除数据
delete from 表名 where 条件;

注意:
	1.字段名的反引号``可以省略,关键字除外;
	2.所有的字符串值都需要加引号'';
	3.所有修改和删除不加where条件都是耍流氓!
数据类型
1、定义数据表时,会指定数据的类型,整型、浮点型、字符串、日期、枚举、集合类型
根据你里面存什么东西来选择用什么类型。

整型 
	tinyint
		取值范围
			有符号:-128 ~ 127
			无符号:0 ~ 255  unsigned
		占1个字节
		可以用于存年龄、标记,比如商品的状态:1新添加,2表示在售中,3已下架;订单状态、性别
	smallint 占2个字节
	mediumint 占3个字节
	int 	占4个字节
		取值范围
			有符号:正负二十多个亿
			无符号:0~40多个亿
		用于计数、时间戳
	bigint 占8个字节

	注意:
		1.存入小数会四舍五入
		2.超出取值范围报错
			非严格模式下,取最大值存入
		3.int(5)表示的只是显示宽度,并不是限定只能插入5位数,它具体的取值范围,由类型所决定

浮点 float  6,2 9999.99
    定点数和浮点数都可以使用类型名后面加(M,D)方式来表示。(M,D)表示该类型一共显示出M位数字(整数位+小数位),D为小数点后面几位
	float(浮点型)
	double(双精度)
		可以表示的范围更广,精度更高
	decimal(定点数)
		默认为(10,0)
		比float更精确

	注意:
		1.当小数超出规定长度,采用四舍五入保存
		2.超出整数范围,报错,无法插入

    2、decimal和double的不同点
        定点数如果不写精度和标度会按照decimal(10,0)来进行操作。如果超出了精度和标度,也会进行四舍五入。定点数的存储使用二进制进行存储所以比较准确。

        注意:
            1、浮点数会存在误差。
            2、对于精度比较敏感的数据应该用定点数来进行表示。

字符串
    char和varchar很类似,都可以用来存储MySQL中较短的字符串,区别:
        1、char列的长度为固定长度,创建表的时候声明的最大长度,可以为0~255
        2、varchar值可变长度,长度为0~65535之间的值。
        3、char和varchar在超出指定的长度时都会报错(非严格模式下被截取到指定长度的字符串)。

        4、text和blob,二者之间的区别是blob用来保存二进制数据,text只能保存字符串数据。
        5、blob和text在经过大量的删除操作之后有可能会引起性能问题。(删除以后在数据表中留下“空洞”)
        可以使用 optimize table 表名 来回收这些空间。

总结:
	int 4个字节  正负20多个亿或者0~40多个亿
	tinyint 1个字节 正负127左右 或者 0~255

	decimal(10,2) 最多10位,其中有两位小数:99999999.99

	char(32) 定长
	varchar(255) 不定长 length + 1

约束条件:对字段进行一些约束用的
1、null、not null,插入值时没有在字段中插入一个值,默认为null。
指定not null必须在插入值时在该字段中插入一个值。如果不给插入一个值那么为"空"

2、default 默认值在不插入该字段时默认插入的值。

整型的约束条件:
    1、zerofill表示0填充。一般和整型后面设定的宽度一起使用,如果数值长度小于指定的长度那么将会在前面补充相对应的0进行填充。
    2、unsigned(无符号)如果要在字段里面保存非负数,或者较大上限的值时可使用该约束条件,将从0开始,需要在字段类型后面紧跟着定义unsigned
        mysql> create table t9(
        -> id int unsigned not null,
        -> name char(32)
        -> );

    3、auto_increment ,自增,在产生一个唯一的标识或顺序值的时候,可以利用这个约束条件。这个约束条件只能用于整数类型,值一般从1开始。每行加1,插入一个null到一个auto_increment列时,MySQL将插入一个比出现过的最大值+1的值。一个表中只能有一个auto_increment列,并且必须定义为 primary key 或 unique 才能够使用
        mysql> create table t1(
        -> id int unsigned auto_increment primary key,
        -> name char(32)
        -> );
索引
索引是数据库中用来提高搜索性能的。我们通常在做数据库优化的时候通常先做索引的优化,数据量少的时候没效果,数据越多效果越明显。索引加上之后是自动创建的,不是我们刻意去使用的。

索引的分类:
1、常规索引(index),最基本的索引,没有任何限制
创建索引:
create table 表名(
字段…,
index 索引名 (要索引的字段)
);

        mysql> create table t2(
        -> id int unsigned,
        -> name char(32)
        -> ,index id(id)
        -> );

    表已经创建的情况下:
        create index 索引名 on 表名(要加索引的字段);
        mysql> create index id on t3(id);

    删除索引:
        drop index 索引名 on 表名

2、唯一索引(unique)与普通索引相似,但是索引列里面的值必须是唯一的,允许有空值

    创建索引:
        create table 表名(
        字段....,
        unique 索引名(要索引的字段)
        );

	    mysql> create table t4(
	    -> id int unsigned,
	    -> name char(32),
	    -> unique id(id)
	    -> );

    表已经创建的情况下:
	    create unique index 索引名 on 表名(要索引的字段)
	    mysql> create unique index id on t5(id);

    删除索引:
        drop index 索引名 on 表名


3、主键索引(primary key),和唯一索引类似,也是唯一的,一个表只能有一个主键
    创建索引:
        create table 表名(
	        id int unsigned primary key auto_increment,
	        name char(32)
        );

    删除索引:
        alter table 表名 drop primary key
        mysql> alter table t7 drop primary key;

        注意:如果主键的字段上面有自增(auto_increment)那么需要先将auto_increment去掉。然后再删除。

        alter table 表名 change 自增的列  自增的字段  类型

        mysql> alter table t6 change idaaaaa id int primary key;
        或者 alter table user modify column id int; 在这里指定id的新类型为int,其他的如自增,自然是删掉了。

– 字符集的设置
mysql的字符集分为4个级别:
服务器级别 my.ini
库级别
表级别
字段级别

库级别
	1.查看数据库的字符集
	show create database 库名;
	2.建库的时候指定字符集
	create database hehe default charset=utf8;
	3.修改库的字符集
	alter database gz24 default charset=utf8;

表级别:
	1.查看表的字符集
	show create table s1;
	2.建表的时候指定字符集
	参考之前的
	3.修改表的字符集
	alter table s1 default charset=utf8;

注意:没有指定字符集的时候,默认是向上继承
表的修改(大多数都可以在软件里面改)
1.修改表的名字
	alter table 旧表名 rename 新表名
-- 2.改字段的类型
alter table s1 modify name char(30) not null;
-- 3.改字段名
alter table s1 change username name varchar(30) default 'no';
-- 4.添加新字段
alter table s1 add sex enum('m', 'w', 'y') not null default 'm';
alter table s1 add des varchar(255) first;
alter table s1 add des2 varchar(255) after id;
-- 5.删除字段
alter table s1 drop des2;
-- *6.修改表的存储引擎
alter table s1 engine=myisam;
-- *7.修改表的字符集
alter table s1 charset=utf8;
alter table s1 default charset=utf8;
数据操作语言(DML)
1.insert 增 
	1.可以插入单条语句
	insert into 表名 value();
	2.插入多条语句
	insert into 表名 values(),()...;
	3.指定字段
	insert into 表名(字段1,字段2...) values(),();
	注意:没有指定字段的情况下,必须将所有的字段都一一赋值
2.update 改
	update 表名 set 字段1=值1,字段2=值2... where 条件;
3.delete 删
	delete from 表名 where 条件;
数据查询语言(DQL)
select语句
1.查询所有
select * from 表名;
2.查询指定字段
select 字段1,字段2... from 表名;
3.给字段指定别名
select 字段1 as 别名,字段2 from 表名;
-- as可以省略
select 字段1 别名,字段2 from 表名;
5.在select中使用表达式
运算符:+ - * / %
函数:
	md5()  md5加密
	password()  mysql的加密
	unix_timestamp() Unix时间戳(和php中time()返回的一样)
	concat() 将两个字段连接查询
6.where条件
and 和 or    && 和 ||
is null 和 is not null
between 和 not between 
	select * from exam_type where id between 3 and 10;  //包括3和10
like 和 not like  模糊匹配
	_ 	表示任意的单个字符
	% 	表示任意个字符
	select * from exam_user where username not like '%强';
in 和 not in
	select * from exam_user where id not in(1,2,2,3,4,3,432,423,4,234,32);

排序
	order by 字段[ asc];(默认升序) ascent
	order by 字段 desc;(倒序)  descent
限定条数
	limit 5; 	//只查5条
	limit 5,5;	//跳过5条,取5条
	分页公式: (当前页-1) * 每页显示条数
整体:
select * from 表名 where条件 order by 字段 limit条件;

查出exam_user表最后10条数据?
select * from 表名 order by id(主键) desc limit 10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sheliutao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值