MySQL基础学习笔记

一 安装 MySQL

二 MySQL 基础

三 MySQL 常用命令

四 数据表以及数据类型

五 SQL 命令 DDL(结构化操作)

六 SQL DML 操作(增删改查)

七 MySQL 聚合函数

八 MySQL 中的索引

九 MySQL 外键

一.安装 MySQL

1.独立安装

2.集成环境中安装:appserv phpstudy wamp

此处省略…

二.MySQL 基础

1.数据库:存储数据以及数据结构的仓库 DB

2.数据库管理系统:DBMS

管理方式:命令行模式,phpmyadmin(可视化),其他管理工具:nav

3.用户:

数据库系统由三部分构成:用户 数据库管理系统 数据库

4.数据库:帮助查询 存储 管理 数据的

1)实体:表名,按照对象的概念来划分
2)属性:字段,实体的特性

5.数据库种类:

关系型:mysql sqlserver oracle db2

非关系型:层次型 网状型 redis

三.MySQL 常用命令

1.MySQL 登录

mysql [-h 主机/ip] -u 用户名 -p 密码

2.MySQL 退出

exit;

其他退出:quit \q

3.MySQL 常用命令:

select now(); 查看当前时间

select curdate();当前日期

select curtime();当前时间

select version();查看 mysql 版本

select user();查看用户

四.数据表和数据类型

1.实用命令:

1>show databases();
    默认数据库:
	information_schema 日志信息
	mysql:mysql 系统库
	test:测试库

2>创建数据库
	create database 数据库名称
	create database demo;

3>删除数据库
	drop database demo;

4>使用数据库
	use 数据库名称

2.数据表

create table 数据表名称(
		列定义:
			列名称 类型 [默认值] [auto_increment 自增长][主索引 primary key]
			列名称 类型 [默认值]
			列名称 类型 [默认值]
			列名称 类型 [默认值]
			...
		索引定义:
)

3.数据类型:

1>整型:
		tinyint 1 字节 有符号 -128 ~127  无符号 0~255
		smallint 2 字节 有符号 -32768~32767  无符号 0~65535
		int	4 字节 有符号 -2147483648~2147483647 无符号 0~4294967295
		BIGINT 8 字节

		bool  ==  tinyint  1 字节

2>浮点型
		float 4 字节  日常生活中的小数 MySQL 存储 丢失精度
		double 4 字节 丢失精度
		DECIMAL[M,D] M 是总位数  D 是小数点后面的位数

3>字符串
		char(位数)  定长字符  255 个字符
		varchar(位数) 变长字符 255 个字符
		text 65535 个字符
		MEDIUMBLOB 2 的 24 次方字符
		enum(val1,val2,val3...)  列枚举:enum("男","女")

4>日期时间
		date 日期
		time 时间
		datetime 日期时间

4.创建第一个数据表

	学生表  stu
	id	排序序号
	学号
	姓名
	年龄
	性别
	手机
	create table stu(
		id int(6) auto_increment primary key,
		stuNum varchar(6),
		stuName varchar(20),
		stuAge tinyint(2),
		stuSex enum("1","2"),
		stuTel varchar(20)
);

primary key 主键:确定唯一记录的字段

show tables;查看数据库中的表

desc 表名称  查看表结构

五.SQL 命令 DDL(结构化操作)

1.表添加字段:

	alter table 表名称 add 列定义
	alter table stu add email varchar(200);

2.修改字段:

	alter table 表名称 change 旧字段名称 新字段定义
	alter table stu change email stuEmail varchar(150);

3.删除字段:

	alter table 表名称 drop 字段
	alter table stu drop stuEmail;

4.修改表名:

	alter table 表名 rename 新名字
	alter table stu rename student;

5.删除表:

	drop table 表名称
	drop table student;

六.SQL DML 操作(增删改查)

1.增

insert into 表名称(字段1,字段2,字段3...) values(val1,val2,val3,...);

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0001","zhangsan",18,"1","13812345678");
	
insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0002","lisi",12,"2","18712345678");

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0003","王五",13,"1","123456");

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0004","李柳",13,"2","123456456");

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0006","张六",13,"2","123456456");

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0007","张六 1",13,"2","123456456");

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0008","张六 2",13,"2","123456456");

insert into student(stuNum,stuName,stuAge,stuSex,stuTel) values("0009","张六 3",13,"2","123456456");

插入中文会出现乱码的情况:

set names gbk;//指定 DBMS 系统字符集为中文字符集

修改 mysql 字符集:

show variables 查看 mysql 系统变量的
show variables like "%character%";//查找关于字符集的系统变量

回显:

 character_set_client     | gbk

 character_set_connection | gbk

 character_set_database   | utf8

 character_set_filesystem | binary

 character_set_results    | gbk

 character_set_server     | utf8

 character_set_system     | utf8

修改set character_set_connection:

set character_set_connection =utf8;

2.查看

select * from 表名称;

3.修改:

update 表名称 set 字段=值,字段=...... where id=num;
update student set stuName="赵六",stuAge=20 where id=3;

4.删除:

delete from 表名称 where id=num;
delete from student where id=4;

5.查询:

select 字段列表 from 表名称 [where 条件][order by 字段 asc|desc][limit 起始位置,长度][group by 字段名称(分组)]

1)select字段列表from表名称

查询某些字段:

select stuNum,stuName from student;

注意:可以给字段名称 表名称 起别名,例如:

select stuNum as stn,stuName as sn from student as sd;

起别名作用:字段简单,方便其他程序调用

2)order by排序: asc升序 desc降序

select * from student order by id asc;
select * from student order by id desc;

3)limit起始位置,长度:截取记录

select * from student limit 1,3;
select * from student limit 4,4;

倒序截取记录:(位置与 id 无关)

select * from order by id desc limit 0,4;

4)group by分组:

按类型id分组:

select * from books group by bTypeId  

分组以后,每组中的记录都会取 1 条。

5)where条件:

比较符号:> < >= <= = <>

select * from books where bid=100;字段和值进行比较

逻辑运算:and or

select * from books where bid>100 and bid<110;

模糊搜索:字符串中 含有某个关键词 就能找到

like "%关键词%"  %表示任意字符串
select * from books where bName like "%网%";

范围:

连续范围使用[not]between......and

select * from books where bid between 100 and 110;

between语句也相当于:bid >= 100 and bid <= 110;

不连续范围使用:[not]in()

select * from books where bid in(103,105,107,109);

in语句也相当于bid=103 or bid=105 or bid=107 or bid = 109

6)子查询:

select语句中的条件又出现了查询语句

eg:查询 类型是”网站”的所有图书

select * from books where btypeid=(select btypeid from btypeid where btypename="网站");

其中主表:后边需求中涉及到的表 主表 “所有图书”
从表:前面需求中涉及到的表 从表 “类型是网站的表”
缺点:效率低

7)连接查询:通过多张表的共有字段,查找多张表构成的并集 2 张表以上。

内连接:共同字段相等。两张表的地位相等
select * from 表 1,表 2 where 表 1.共有字段=表 2.共有字段
select * from books as bs,btype as bt where bs.btypeid = bt.btypeid;
注意:内连接中:共有字段中的值,必须两张表都有,才能找到。

外连接:表分主表 从表。主表中的数据,全部展示,从表有和主表对应的数据 显示,没有对应的,不显示。

left join
select * from 主表 left join 从表 on 主表.共有字段=从表.共有字段[where 其他条件];
select * from books as bs left join btype as bt on bs.btypeid=bt.btypeid;

right join
select * from 从表 right join 主表 on 从表.共有字段=主表.共有字段[where 其他条件];
select * from btype as bt right join books as bs on bt.btypeid=bs.btypeid;

七.MySQL 聚合函数

MySQL聚合函数:MySQL提供的系统实现特定功能的函数

1.算术函数

sum()求和: select sum (bytypeid) from books;
avg()求平均值:select avg(btypeid) from books;
count() 统计记录数:
select count(*) from books; 
select count(*) from books where btypeid=2 ******

2.字符串:

concat(str1,str2,str3,...)拼接
select concat (bName Typeid) as p from books;

一般情况:很少在mysql语句上使用函数,加重mysql负担。

八.MySQL 中的索引

索引:类似于查询目录    
数据库索引:以文件的形式存储的。
特点:数据的更新和索引的更新 是同步的。
作用:提高查询效率

索引类型:

主索引:

primary key,主键 确定唯一记录的。where id=???
id int auto_increment primary key,

普通索引:

是最基本的索引,可以加在多列上

创建表的时候添加:

create table student(
id int(6) auto_increment primary key,
stuNum
stuName
stuAge
stuSex
stuTel
key 索引名称(字段)
);	
create table users(
id int(6) auto_increment primary key,
name varchar(20),
pwd varchar(20),
key dt(name)
);

对已经有的表添加:

alter table 表名称 add index 索引名称(字段);
alter table student add index ts(stuNum);
alter table student add index ts1(stuName);

唯一索引:可以加在多列上,列上加了唯一索引,该列值不能重复

创建表的时候添加:

create table student(
id int(6) auto_increment primary key,
stuNum
stuName
stuAge
stuSex
stuTel
unique key 索引名称(字段)
);		

修该表的时候添加:

alter table 表名称 add unique 索引名称(字段);

全文索引:加载有大段字符串的文本上。

创建表的时候添加:

create table student(
id int(6) auto_increment primary key,
stuNum
stuName
stuAge
stuSex
stuTel
fulltext key 索引名称(字段)
);		

修该表的时候添加:

alter table 表名称 add fulltext 索引名称(字段);

全文索引目前不支持中文

注意顺序:

主索引
唯一索引
普通索引
全文索引

索引的缺点:

数据索引同步更新,全有索引,降低效率
索引是以文件的形式存储的,索引过多,索引文件会很大。
eg:用户名 手机 性别 商品名称 价格 供应商 都是要加索引的类型

九.MySQL 外键

1.什么是外键

表与表之间的特定关系,保持了数据的完整性和一致性,eg

user 用户
order 订单
用户下订单
1)删除用户,没有删除订单,数据就不一致
2)order 表中插入记录

外键控制:让用户不更新数据,或者是用户删除数据的时候,让订单同步删除。

2.外键特点:

(1)innodb 类型 查看

show create table 表名;  

engine值是否为(innodb)

(2)外键是两表的约束关系

(3)外键的名称唯一

3.创建外键:

create table 表名(
列定义
索引定义
外键定义:[constraint 约束名称] foreign key [外键名称]
references [外键名称](外键约束)
[on delete (restrict | cascade | set null | no action)]
[on update (restrict | cascade | set null | no action)]
);

restrict:拒绝对父表的删除或更新操作
cascade:父表的删除或更新,自动删除或更新子表中对应的记录
set null:父表删除或更新的时候,设置子表外键字段为 null
no action:什么都不做

4.demo

		create table user(
		id int(6) auto_increment primary key,
		name varchar(30),
		sex int(1)
)engine=innodb

insert into user(name,sex)values("zhangsan",1);
insert into user(name,sex)values("lisi",2);
insert into user(name,sex)values("wangwu",1);
    create table orders(
	order_id int(6) auto_increment primary key,
	u_id int(6),
	username varchar(30),
	money int(6),
	datetime date,
	key ud(u_id),
	foreign key order_f_key (u_id) references user(id)
);
insert into orders(u_id,username,money,datetime)values(1,"zhangsan",300,"2018-01-22");
insert into orders(u_id,username,money,datetime)values(1,"zhangsan",500,"2018-01-22");
insert into orders(u_id,username,money,datetime)values(2,"lisi",600,"2018-01-22");
insert into orders(u_id,username,money,datetime)values(2,"lisi",800,"2018-01-22");
insert into orders(u_id,username,money,datetime)values(3,"wangwu",1000,"2018-01-22");
insert into orders(u_id,username,money,datetime)values(3,"wangwu",1200,"2018-01-22");
insert into orders(u_id,username,money,datetime)values(4"maliu",100,"2018-01-22");

5.通过修改表 来改变外键的属性

alter table 表名称 add foreign key 外键名称(外键字段) references 主表(字段) on delete/on update cascade;
	
alter table orders add foreign key (u_id) references user(id) on update cascade;

delete from user where id=2;

6.删除外键:

alter table 表名称 drop foreign key 外键名称

3 条评论

发表评论

*