MYSQL学习笔记
登录:
MYSQL是个服务,服务往往都会监听一个端口
连接到MySQL服务(MySQL数据库)的指令:mysql -h 主机IP -P 端口 -u 用户名 -p密码
1.-p密码不要有空格
2.如果-p后面没有写密码,回车后会要求输入密码
3.如果没有写-h主机,默认就是本机
4.如果没有写-P端口,默认就是3306 #在实际的工作中往往要改,增加安全度
登录之前要保证MySql服务是运行的状态 : net start mysql服务名
结束服务: net stop mysql服务名
Mysql的三层结构: 数据库管理系统 (DBMS)- 数据库- 数据库管理对象(表\视图\触发器等等)
客户端: 命令行\java\SQLyog等等
终端通过端口连接数据库
对于Mysql数据库, 表的本质仍然是文件
所有的内容最终落在文件中才能持久化
所谓安装Mysql数据库,就是在主机上安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库,DBMS(database massage system)
一个数据库可以创建多个表,以保存数据(信息)
数据库中数据的存储方式主要是表
表的一行称为一条记录
在java程序中往往一个记录使用一个对象来表示
SQL语句分类(数据库的创建备份恢复):
在数据库中建立表时,如果不指定表的校对规则就是默认为数据库的校对规则
创建数据库时,如果不指定校对规则,默认是 utf8_general_ci(不区分大小写)
utf8_bin是区分大小写的
创建数据库时,可以指定字符集和校对规则,如果不指定字符集,则默认是utf8
创建数据库的指令: CREATE DATABASE [IF NOT EXISTS] db_name SHARACTER SET charset_name COLLATE collation_name
如果不加[IF NOT EXISTS] 则如果这个名字的数据库已经存在的话会报错
#一条查询语句:
SELECT * FROM t1 WHERE NAME = 'tom'
select 表示查询 * 表示所有字段 from 表示从哪个表 where表示从哪个字段 name='tom'表示查询名字是tom
在创建数据库\表的时候,为了规避关键字可以使用反引号 例如: CREATE DATABASE `CREATE`
显示数据库: SHOW DATABASES(带s)
显示数据库创建语句: SHOW CREATE DATABASE db_name
数据库删除语句[一定要慎用]: DROP DATABASE [IF EXISTS] db_name
mysqldump -u root -p -B db01 db02 > d:\\bak.sql
表格的创建:
命令行的格式示例:
常用数据类型(在mysql里面数据类型又叫做列类型):
bit:
小数:
字符:
不同的编码方式存储一个字符的大小不同, utf8编码是三个字节, gbk编码是两个字节表示一个字符
char(4) varchar(4)中的4表示的是字符数量而不是字节数
date:
NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
修改表:
修改列的属性:
使用modify:
使用change:
第三行是可选,用来指示修改列在表中的位置
修改列名的指令:
ALTER TABLE employees | |
CHANGE COLUMN emp_id employee_id INT NOT NULL |
即使没有修改列其他的属性,也要写上
crud程序员: 只会增删查改的程序员
insert:
在Java和MySQL中,字符串都会尝试转换为整型(如果可以的话) 例如 '30'在MySQL底层就能转换成整型 即可以向int 类型的列添加 '30' ,但是 'Abc'不行
update:
如果where语句不写则是对某列的所有数据进行修改
delete:
不加where语句会删除表中所有记录
select:
`name` LIKE '韩%' 是一种模糊查询 表示名字为韩开头的都可以, %表示零到多
BETWTTN AND是个闭区间
group by:
order by:
函数:
函数不能用在where上, where是对结果起过滤作用
count(*)和count(列)的区别:
count(*)返回满足条件的记录的行数
count(列)返回满足条件的某列有多少个,但是会排除为null的情况
sum函数仅对数值起作用,否则会报错
对多列求和","逗号不能少
也是仅对数值起作用
字符串相关函数:
DUAL为系统的亚元表,当没有表可用时,可以用DUAL
数学相关函数:
在RAND()中添加一个数字时将产生一个固定的随机数, 例如 : RAND(3) 不添加数字, 只是RAND()时,每次执行都会产生不同的随机数
日期相关函数:
加密和系统函数:
PASSWORD(str) 和 MD5(str)是两个不同算法的加密函数,前者为MySQL用户密码默认的加密函数
流程控制函数:
MySQL表查询(加强):
在MySQL中日期类型可以直接比较
判断某一列的值是否为null是要用 is 不要用等号
查询表结构的语句 : DESC 表名
分页查询:
在默认情况下,当查询两个表时,会将第一个表中的一行和另一个表中的每一行组合,返回结果,包含两张表的所有列,一个返回的记录数是两张表的行数乘积,这样多表查询默认处理方式返回的结果, 称为笛卡尔积`
解决这个多表的关键就是写出正确的过滤条件 WHERE
子查询:
MySQL中判断是否相等是一个等号'=', 不等有两种 : != <>表示
把子查询的结果当成一张临时表可以解决很多很多复杂的查询
多列子查询的语法:
合并查询:
表名.* 表示把该表的所有的列都表示出来
复制(insert ,表):
MySQL表外连接:
约束:
自增长:
索引:
MySQL事务:
事务隔离级别:
MySQL表类型和存储引擎:
视图:
MySQL用户创建与授权:
不同的数据库用户登录到DBMS后根据相应的权限可以操作的数据库和数据对象(表, 视图,触发器)是不同的
一个数 + null = null;
last_day(日期) 可以返回该日期所在月份的最后一天