1.mysql的安装
注意:1.安装位置和生成的数据库位置
2.用户名和密码
3.字符集问题
2.sql使用:
创建新连接,-->连接名称,用户,密码,可选择连接的数据库;
3.dos窗口操作数据库:
设置环境变量:path添加数据库bin目录
dos中使用 mysql -u用户名 -p密码 进入数据库,显示mysql> _
连接成功以后:show databases;-->显示当前所有的数据库
use xxx(数据库名);使用某个数据库,对其进行操作
show tables; -->显示某数据库当中的所有数据表--->前提是,已经进行了上面这一步?use--->才可以对我们的某个数据库进行增删改查,创建表
4.操作数据库:
创建:
create database if not exists 数据库名;
删除:
drop database if exists 数据库表名
查看所有数据库:
show databases;
使用数据库:--->进行后续的创建表操作
use database 数据库名:
5.结构化语言
DDL DML DQL DCL
6.创建表:
create table if not exists 表名 (
列名 列的类型 (列的长度) 约束条件
id int(4) not null,
name char(10)
);
desc xxx(表名)--->查看表结构--->就是我们的创建表的属性+类型+约束内容
列的数据类型:
数值: 主要-->int double
字符串: char(m) 不可变长度 varchar 可变长度 text 文本
日期和时间类型:date 年月日 time 时分秒 datetime 一块的
null类型:
列的数据属性:
unsigned:无符号,正数
zerofill:用0填充未使用的数位 int(4) 给1 -->0001;
auto_increment :自动增长,多用在序号,比上一个值多1
null 和 not null:--->默认为空 不允许为空
default:默认值,在没有输入值得时候,自动生成一个值
列的注释:
关键字:comment:
comment + '注释内容'
表类型:engine:数据表类型--->MyISAM,InnoDB,-->HEAP,BOB,CSV......
字符集:utf-8,gbk....关键字:charset = 字符集.
7.修改表:
关键字:alter
修改表名:alter table 旧表名 rename as 新表名;
添加表列:alter table 表名 add 新列名+数据类型+约束条件;
修改:
只修改列的约束条件
alter talbe 表名 modify 列名 + 新的约束条件;
修改列名字并且修改列条件:
alter table 表名 change 旧字段名 新字段名 + 条件;
删除列:
alter table 表名 drop 列名
删除表:
drop table 表名;
8.对表数据的操作
插入:
.insert into 表名(列1,列2......) values (值1,值2....);--->值得内容要和列的内容一致,对应.数量一致.但,列的数量不一定跟表中所有的列顺序和数量保持一致.
.insert into 表名 values (值1,值2.....);-->
值得数量和顺序要按照表中的数量和顺序保持一致.
.insert into 表名 values(值1,值2.....),(值1,值2),(值1,值2)......;-->依次插入多条数据.
注:1.插入自增长数据:例如:aa 表中有两个字段 id ,name -->id为 primary key auto_increment.
三种插入方法:1.insert into aa value (0,'内容');
2.insert into aa value (null,'内容');
3.insert into aa (name) values ('内容');
2.设置默认值:sex varchar(2) not null default '男'; -->设置默认值的时候,要求列长度和输入的字符相符长度 -->列长一般指字节长度
修改:
:update 表名 set 列 = 新值,列2 = 新值..... where 限制条件;
where 的限制条件:=,!=,>,=,
and,or.
id between 2 and 5---> id>=2 and id id>=2 && id
删除:
:delete from 表名 where 固定条件-->如果清空表的话,自增长计数器依然保存,表结构,索引保存
:truncate 表-->清空表数据 --->保存表结构,索引等等,,,auto_increment 计数器重置
:drop table ___>彻底删除表包含表结构等内容
9.mysql事务
mysql 事务是自动提交的,所以需要手动关闭
set autocommit = 0;//关闭
set autocommit = 1;//开启
使用事务的步骤:
0.关闭事务自动提交.
1.开启:start transaction;
2.进行数据操作;
3.如果出现错误,rollback回滚到事务开启点.
4.如果操作正确,commit进行提交.更新事务备份点.
5.最终完成之后,开启事务自动提交.
10.数据库的导入/导出
导出,备份:-->从数据库把数据保存到磁盘文件当中
mysqldump -h(主机名字) -u(用户名) -p(密码不用-->不安全) 数据库名字
>(path路径)+文件.sql 不需要加分号
导入,还原:-->从磁盘文件当中把数据导入到数据库当中
mysql -h(主机名字) -u(用户名) -p 目的数据库名字
(不提倡的导入方式)在mysql命令中:
source (路径)文件名.sql---->出现一大堆导入成功的提示..时间比较长,比较繁琐
11.DQL查询语句
select ....from .....
.as的用法,可以设置新列名,,,可以设置表别名,,,可以设置结果新列
.distinct -->去掉重复--->一条记录所有的列数据都相同的,只显示一条
.where条件 -->需要用到逻辑表达式或者条件表达式
>,=,!=, between,and,&&,||等待
like->模糊查询 %匹配0~多个字符,,,,_匹配一个任意字符
in-->选择字符 匹配()内的值-->效率高于普通的逻辑运算
.连接查询
内连接:等之内连接 非等值内连接
外连接:左外链接, 右外链接
自连接
:order by 列名 -->排序 desc 降序 asc 升序
:limit 分页显示 [m,]n n:每页显示记录数,m:偏移量
:子查询:在当前查询结果的基础上,在进行查询
第二次查询的条件就是第一次查询的结果
:group by 分组,按照某一列的数据,进行分组
select name,sum(sco) from score group by name;//显示每个人的名字和他的所有成绩的和
:having 对分组数据进行约束
12.索引的使用
直接在创建的列属性后面加 ++ 是约束(约束集成索引)
创建索引:primary key主键索引 unique 唯一索引
alter table 表名 add 索引类型 (列名)
删除索引:
drop index 索引名 on 表名
alter table b drop primary key;//特殊的删除方式
alter table b drop index name;//-->通用
查看索引:
show index;/keys
13.部分常用约束
primary key主键,unqiue非空,foreign key外键
CONSTRAINT `student_ibfk_1` FOREIGN KEY (`SubjectNo`) REFERENCES `subject` (`subjectNo`)
约束名当前表列外键表外键表列
14.
SELECT Sid AS '编号' FROM scores;
SELECT s.Sid AS '编号',s.Sname AS '姓名' FROM scores AS s;
SELECT * ,s.Sid + 1 AS '新编号'FROM scores AS s;
SELECT VERSION(),3;
SELECT VERSION() AS 'mysql_v',100*0.32 AS 'newdat','*****' AS 'lll';
SELECT * FROM SUBJECT WHERE subjectNo IN (1,2,3,4);
SELECT * FROM SUBJECT INNER JOIN student ON subject.`subjectNo` = student.`SubjectNo`;
SELECT * FROM student,SUBJECT WHERE student.`SubjectNo` = subject.`subjectNo`;
SELECT * FROM SUBJECT RIGHT JOIN student ON subject.`subjectNo` = student.`SubjectNo`;
SELECT * FROM student s1,student s2 WHERE s1.`SubjectNo` = s2.`SubjectNo`;
SELECT * FROM SUBJECT ORDER BY subject.`SubjectHour`ASC LIMIT 4,2;
SELECT * FROM student WHERE student.`SubjectNo` IN (SELECT subjectNo FROM SUBJECT) ORDER BY student.`StduentScore` DESC LIMIT 2;
SELECT SUM(score) FROM math GROUP BY NAME HAVING SUM(score)
SELECT s1.`StudentNo`,s1.`StudentName`,s1.`StduentScore`,s2.`subjectNo`,s2.`SubjectName` FROM student AS s1 INNER JOIN SUBJECT AS s2 ON s1.`SubjectNo` = s2.`subjectNo`;
SELECT * FROM SUBJECT s1,student s2;
SELECT * FROM student s1,SUBJECT s2 WHERE s1.`SubjectNo` = s2.`subjectNo`;
SELECT s1.`StudentNo`,s1.`StudentName`,s1.`StduentScore`,s2.`subjectNo`,s2.`SubjectName` FROM student s1 LEFT JOIN SUBJECT s2 ON s1.`SubjectNo` = s2.`subjectNo`;
SELECT * FROM math s1,math s2 WHERE s1.`id` = s2.`xuehao`;
SELECT * FROM scores ORDER BY Schinese DESC;
SELECT * FROM scores LIMIT 2*(页数-1),2;/*前面的值代表偏移量,后面的值代表显示条数*/
SELECT * FROM math WHERE id IN (SELECT id FROM math WHERE id >2)
SELECT COUNT(*) FROM math;
SELECT SUM(score) FROM math WHERE id IN(1,2);
SELECT MAX(id) FROM math;
SELECT NAME ,SUM(score)AS '成绩' FROM math GROUP BY NAME HAVING SUM(score) >150;
领取专属 10元无门槛券
私享最新 技术干货