安装mysql
安装 服务器端 和 客户端
1, 服务器端: 用来存储了数据 重点步骤: 设置字符集utf-8避免中文乱码. 使用端口号: 默认是3306 使用的服务名称: Mysql 设置密码: root 检查:找到开始菜单中的mysql – mysql client – 输入密码root回车 2, 客户端: 用来连接服务器, 进而操作数据 DOS窗口: a, 输入密码: 就可以连接服务器(找到开始菜单中的mysql – mysql client – 输入密码root回车) b, 输入dos命令: win+r打开运行对话框 – 输入cmd – 确定 – 输入命令:mysql -uroot -proot – 回车 3,可视化工具:sqlyog2.SQL简单语句
数据库 show databases; 查询所有数据库 create database name default character set utf8; 创建数据库(不可同名) 字符使用utf8防止中文乱码 drop database name; 删除数据库(删除要谨慎操作) 表 use database_name;使用数据库 show tables;查询所有表 create table tb_name (字段1,字段2,字段3...); 创建表 alter table 表名 添加字段 字段名称 字段类型(字段长度) ---修改表 mysql> alter table student add column address varchar(100); drop table tb_name; 删除表 desc tb_name; 描述表,查看表结构 记录 select * from tb_name; 查询表中所有记录 select 字段名 from tb_name;查询表中的某一列数据 select * from tb_name order by id desc; 将表记录按id排序 select count(*)from tb_name; 查询表中总记录数 insert into tb_name values (字段1,字段2,字段3); 向表中插入数据 update tb_name set 字段名=新值 where id=2; 修改id为2的数据记录 delete from tb_name where id =2; 删除id为2的数据记录3.字段约束
主键约束 使用primary key 来设置主键约束,所约束字段不可重复,不可为空 id int primary key auto_increment 主键约束自增 非空约束 使用not null 来设置非空约束,所约束字段不可为空 password varchar(50) not null 唯一约束 使用unique 添加唯一约束,添加后值必须唯一,不可重复,可以为空 username varchar(50) unique--唯一约束4.基础函数
概述:类似于java中的方法,有()标记,提高SQL语句效率
lower select dname,lower (dname)from dept; 数据转小写 upper select upper (dname) from dept;数据转大写 length select length(dname) from dept --数据的长度 substr SELECt dname,SUBSTr(dname,1,3) FROM dept; --截取[1,3] concat select dname,concat(dname,'123') X from dept --拼接数据 replace select dname,replace(dname,'a','666') X from dept --把a字符替换成666 ifnull select ifnull(comm,10) comm from dept2 #判断,如果comm是null,用10替换 round select comm,round(comm) from emp 直接四舍五入取整 select comm,round(comm,1) from emp 四舍五入并保留一位小数 ceil & floor select comm,ceil(comm) ,floor(comm) from emp 向上向下取整 uuid select uuid() 返回uuid:a08528ca-741c-11ea-a9a1-005056c00001 now select now() -- 年与日 时分秒 select curdate() --年与日 select curtime() --时分秒 hour() & minute() & second() select now(),hour(now()),minute(now()),second(now()) from emp ;--时分秒 year() & month() & day() select now(),year(now()),month(now()),day(now()) from emp ;---年月日 转义字符:为转义字符,需要使用'时使用转义字符 select 'ab'cd' -- 单引号是一个SQL语句的特殊字符 select 'ab'cd' --数据中有单引号时,用一个转义变成普通字符5.条件查询
distinct 去重 select distinct loc from dept; where 查找条件数据 select * from emp where id=1; like 模糊查询 通配符%代表0-n个字符,通配符_代表一个字符; select * from emp where ename like 'l%' --以l开头的(%a-以a结尾,%a%--中间包含a的,l_--l后有一个字符的) null 空值,常使用is null表示为空字段,is not null 为非空字段 between and 两者之间,用来检索两者范围内的数据 limit 分页,分数最高记录,按分数排序后,limit n 返回前n条(limit a,b 从a+1条开始,展示到b+1条记录) order by 排序,默认为(ASC)升序排序,可使用desc降序排序(order by sal desc 薪资sal列降序排序)6.统计函数
统计案例 date_format(date,format) 获取日期及格式 year(date) 获取年份日期 聚合函数 aggregation count() 统计个数 max()/min() 最大值/最小值 sum()/avg() 求和/平均值 分组group by,分组后过滤having7.注释
#行注释内容 – 行注释内容,这个使用较多8.事务transaction
1.事务的4个特性ACID
A-Atomicity 原子性,一个事务中的操作要么全部完成,要么全部失败。中间执行出错将会回滚(Rollback)到最初状态 C-Consistency 一致性,事务开始前和结束后数据库的完整性没有被破坏 I-Isolation 隔离性,数据库可以允许多个事务同时并发进行,隔离性会防止多个事务并发时因交叉执行导致的数据不一致问题 D-Durability 持久性,事务处理结束后,对数据的修改是永久的,即便故障也不会丢失
2.隔离级别
读未提交(Read uncommitted) 安全性最差,可能发生并发数据问题,性能最好 读提交(read committed) Oracle默认的隔离级别 可重复读(repeatable read) MySQL默认隔离级别 安全性能较好 性能一般 串行化(serializable) 表级锁,读写都加锁,效率低下,安全性高,不能并发
3.开始、结束事务
开启事务:start transaction / begin 结束事务:commit 提交事务 rollback 回滚事务
4.事务处理
1.在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务 2.事务处理可以用来维护数据的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行 3.事务用来管理 insert、update、delete 语句,因为这些操作才会“破坏”数据,查询select语句是不会的 4.MySQL默认数据库的事务是开启的,执行SQL后自动提交。 5.MySQL的事务也可以改成手动提交,那就有两个步骤:先开启,写完SQL后,再手动提交。9.表强化:六约束constraints
非空约束 not null 唯一约束 unique 主键约束 primary key 外键约束 foreign key 默认约束 default 检查约束 check10.索引 index
定义:索引是一种排好序的快速查找的数据结构,它帮助数据库高效的进行数据的检索。 分类 单值索引 唯一索引 复合索引 索引的操作 查看索引 show index from dept; 创建索引 create index 索引名字 on 表名(字段名); create index loc_index on dept(loc); 创建唯一索引 create unique index 索引名 on 表名(字段名); 创建复合索引 CREATE INDEX 索引名 ON 表名 (字段1, 字段2) CREATE INDEX PIndex ON Persons (LastName, FirstName) 删除索引 alter table dept drop index 索引名; 注:条件查询之前添加explain 可查看是否使用索引,观察possible key是否有值,有则引用索引,高效。 索引扫描类型 type: ALL 全表扫描,没有优化,最慢的方式 index 索引全扫描,其次慢的方式 range 索引范围扫描,常用语<,<=,>=,between等操作 ref 使用非唯一索引扫描或唯一索引前缀扫描,返回单条记录,常出现在关联查询中 eq_ref 类似ref,区别在于使用的是唯一索引,使用主键的关联查询 const/system 单条记录,系统会把匹配行中的其他列作为常数处理,如主键或唯一索引查询,system是const的特殊情况 null MySQL不访问任何表或索引,直接返回结果 最左特性 当我们创建一个联合索引(复合索引)的时候,如(k1,k2,k3), 相当于创建了(k1)、(k1,k2)和(k1,k2,k3)三个索引,这就是最左匹配原则,也称为最左特性。 索引的优缺点 优点: 索引是数据库优化 表的主键会默认自动创建索引 每个字段都可以被索引 大量降低数据库的IO磁盘读写成本,极大提高了检索速度 索引事先对数据进行了排序,大大提高了查询效率 缺点: 索引本身也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也要占用空间 索引表中的内容,在业务表中都有,数据是重复的,空间是“浪费的” 虽然索引大大提高了查询的速度,但对数据的增、删、改的操作需要更新索引表信息,如果数据量非常巨大,更新效率就很慢,因为更新表时,MySQL不仅要保存数据,也要保存一下索引文件 随着业务的不断变化,之前建立的索引可能不能满足查询需求,需要消耗我们的时间去更新索引11.表关联 association
4种表关系 一对一 one to one 一对多 one to many 多对一 many to one 多对多 many to many 创建表的特点 表都以s结束,标识复数 字段多以表的首字母作为开头,多表联查时,方便标识出时哪个表的字段 多表联查 join 笛卡尔积 Cartesian product 通过 , 来拼接多个表格 SELECT * FROM dept,emp 三种连接join 内连接 inner join 两边都对应有记录的才展示,其他去掉 左连接(外)left join 左边表中的数据都出现,右边没有数据以NULL填充 右连接(外)right join 右边表中的数据都出现,左边没有数据以NULL填充 子查询 subquery 子查询即嵌套查询,效率低慎用 单行子查询 = 多行子查询 in12.SQL执行优先顺序:
(1) FROM [left_table] 选择表 (2) ON附录1: char和varchar有什么区别?链接条件 (3) JOIN 链接 (4) WHERe 条件过滤 (5) GROUP BY 分组 (6) AGG_FUNC(column or expression),... 聚合 (7) HAVINg 分组过滤 (8) SELECt (9) DISTINCT column,... 选择字段、去重 (9) ORDER BY 排序 (10) LIMIT count OFFSET count; 分页
char为定长字符串,char(n),n最大为255 varchar为不定长字符串,varchar(n),n最大长度为65535 char(10)和varchar(10)存储abc,那它们有什么差别呢? char保存10个字符,abc三个,其它会用空格补齐;而varchar只用abc三个位置。datetime和timestamp有什么区别?
数据库字段提供对日期类型的支持,是所有数据类型中最麻烦的一个,慢慢使用就会体会出来。 date 是 年与日 time是 时分秒 datetime年月日时分秒,存储和显示是一样的 timestamp时间戳,存储的不是个日期,而是从1970年1月1日到指定日期的毫秒数主键、外键、唯一索引的区别?
Primary Key 主键约束,自动创建唯一索引 Foreign Key 外键约束,外键字段的内容是引用另一表的字段内容,不能瞎写 Unique Index 唯一索引,唯一值但不是主键 对于约束的好处时,数据库会进行检查,违反约束会报错,操作失败。数据库提供了丰富的约束检查,还有其他约束,但现今弱化关系型数据库的前提下,基本已经很少使用,记住上面三个即可。drop、delete和truncate之间的区别?
drop删除库或者表,数据和结构定义 delete和truncate只是删除表的数据 delete可以指定where条件,删除满足条件的记录,tuncate删除所有记录 对于自增字段的表,delete不会自增值清零,而truncate是把表记录和定义都删除了,然后重建表的定义,所以自增主键会重头开始计数附录2: 数据库mysql client操作帮助栏:
List of all client commands: Note that all text commands must be first on line and end with ';' ? (?) Synonym for `help'. clear (c) Clear the current input statement. connect (r) Reconnect to the server. Optional arguments are db and host. delimiter (d) Set statement delimiter. ego (G) Send command to MariaDB server, display result vertically. exit (q) Exit mysql. Same as quit. go (g) Send command to MariaDB server. help (h) Display this help. notee (t) Don't write into outfile. print (p) Print current command. prompt (R) Change your mysql prompt. quit (q) Quit mysql. rehash (#) Rebuild completion hash. source (.) Execute an SQL script file. Takes a file name as an argument. status (s) Get status information from the server. tee (T) Set outfile [to_outfile]. Append everything into given outfile. use (u) Use another database. Takes database name as argument. charset (C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets. warnings (W) Show warnings after every statement. nowarning (w) Don't show warnings after every statement.



