最早之前学习了Mysql,不知道是多长时间了 O(∩_∩)O,今天突然发现之前学习过程中的这个笔记,于是,就分享给大家,希望,能帮助到有需要的朋友,有不足的地方欢迎大家多多交流
b( ̄▽ ̄)d
1. 数据库(datebase): 保存有组织的数据的容器(通常是一个文件或一组文件)。
2. 表(table):是一种结构化的文件,可用来存储某种特定类型的数据
3. 列(column):表中的一个字段。所有表都是由一个或多个列组成的
4. 数据类型(datetype): 所允许的数据的类型。每个表列都有相应的数据类型,它限制(或允许)该列中存储的数据。
5. 行(row): 表中的一个记录。
表中的数据是按行存储的,所保存的每个记录存储在自己的行内。如果将表想象为网格,网格中垂直的列为表列,水平行为表行。
说明:是记录还是行?
你可能听到用户在提到行时称其为数据库记录(record)。这两个术语多半是可以交替使用的,但从技术上说,行才是正确的术语。
6.主键(primary key): 一列(或一组列),其值能够唯一标识表中每一行。(方便数据操作和管理)
表中的任何列都可以作为主键,只要它满足以下条件:
1)任意两行都不具有相同的主键值;
2)每一行都必须具有一个主键值(主键列不允许NULL值);
3)主键列中的值不允许修改或更新;
4)主键值不能重用(如果某行从表中删除,它的主键不能赋给以后的新行)
7. SQL是一种专门用来与数据库沟通的语言。与其他语言(如英语或Java、C、PHP这样的编程语言)不一样,SQL中只有很少的词,这是有意而为的。设计SQL的目的是很好地完成一项 任务——提供一种从数据库中读写数据的简单有效的方法。
8. 字段(column)的数据类型
小数类型
字符串
日期时间型
字段的修饰词
auto_increament在插入行的时候会自动增加一行供其使用
9. SQL中的运算符
between 1 and 5 在1到5之间
in(1,2)属于括号里面任一的一个东西
10. SQL语句的分类
库表结构指的就是对数据库和表的操作
一 、DDL(数据定义语言)
add中如果只增加一行则不需要括号(注意括号里面的逗号)
alter table users add passward1 varchar(10) not null
(after username);括号代表可省略表示添加在哪一行之后
二 、DML(数据操作语言)
上面的也可以是只有列二和列四与之对应
也可以insert into 表名 values(所有的值一一对应)
update中的set一定不要忘记
delete from 表名; 清空所有,但是如果使用insert into时会接着上一次的id往下排
truncate 表名; 清空所有,但是如果使用insert into时会重新按id往下排(0开始)
三、DCL(数据控制语言)
flush privileges 刷新权限表
修改密码:
- use mysql;
- select user,host,authentication_string from user;
- update user set authentication_string = password()
where user=‘root’;
- flush privileges;
- C:UsersMr TC>mysqladmin -uroot -p原密码 password 新密码
忘记密码:
- net stop mysql
- mysqld --skip-grant-tables
- 再打开一个cmd窗口输入mysql -uroot -p然后提示输入
密码直接按回车即可进入MySQL中
- 修改密码,刷新一下权限表flush privileges;
权限有create alter insert update等等
查看权限
show grants for 用户名@IP地址
删除用户
drop user 用户名@IP地址
四 DQL(数据查询语言)
1. 检索数据
1) 如何检索出不同的值?
办法就是使用DISTINCT关键字,顾名思义,它指示数
据库只返回不同的值。
SELECT DISTINCT vend_id FROM Products;
警告:不能部分使用DISTINCT DISTINCT DISTINCT关键字作用于所有的列,不仅仅是跟在其后的那一列。例如,你指定SELECT DISTINCT vend_id, prod_price,除非指定的两列完 全相同,否则所有的行都会被检索出来。
2) 如果你只想返回第一行或者一定数量的行,该怎么办呢?这是可行的,然而遗憾的是,各种数据库中的这一SQL实现并不相同
MySQL中SELECT prod_name FROM Products LIMIT 5;
返回前五行的数据
SELECT prod_name FROM Products LIMIT 5 OFFSET 5;
LIMIT 4 OFFSET 3指示返回从第3行起的4行数据。第一个数字是检索的行数第二个数字是指从哪儿开始,不包括第五行 该限制语句可简化为limit 3,4
返回某个记录后面的几行数据
2. 排序检索数据
1) 在指定一条ORDER BY子句时,应该保证它是SELECT语句中最后一条子句。如果它不是最后的子句,将会出现错
误消息 (默认升序排列)
2) 按多个列排序
例如 如果要显示雇员名单,可能希望按姓和名排序(首
先按姓排序,然后在每个姓中再按名排序)
如果姓列中的所有制都是唯一的,则不会再按名排列
如果多个雇员有相同的姓,这样做很有用
3) 按列的位置排序
order by 2,3; 2,3表示列的相对位置
4) 按指定排序方向排序
order by 列名 desc,列名;
警告:如果想在多个列上进行降序排序,必须对每一列指定DESC关键字
3. 连接数据
1) concat(列名,列名)函数
as 为输出表示的字段起一个别名
concat_ws('分隔符’,列名,列名)
4. 模糊查询 (like 像)
1) select column from table where colum like‘ng’;
表示查找出column = ‘ng’的记录
- select column from table where colum like‘%ng%’;
左右模糊查找%相当与通配符 *,不管左右是什么
5. 聚合函数
分组查询
6. 连接查询
stu_id等于student中的id 关联型数据库
左连接查询以左边的表(列)为基准 一一对以应
右连接查询以右边的表(列)为基准 一一对以应
- 联合查询 (关键字union all前后列数一致)
- 子查询
select name from student where id in (select stu_id from mark); 前面的依托与后面的
五、 使用函数处理数据
1)常见的文本处理函数
soundex(‘字符串’)=soundex(‘B’) 筛选出和B发音相近的字符串
- 常用数值处理函数
六 、SQL字句的顺序
七、int(n) char(n) varchar(n) n的不同
- int(n) n不表示字符长度,只在有zerofill时起作用,表示如果输入的数字长度小于n时前面用0填充
- char(n) n表示字符的最大长度,utf8(万国码)中一个汉字字符表示3个字节,gbk(中文码)中一个汉字字符表示2个字节,查看字符长度用char_length(column)函数,字节长度用length(column)
八 、DTL事务控制语言
Example:比如转账如果在转账的过程中突然断电了或者怎么了导致不能交易成功但是对方的钱已经被扣这个时候就需要事务,出错之后只需输入rollback(回滚)就可以返回被扣的钱,相当于撤回事务的执行
1) 在没有开启事务时执行SQL语句对数据的改变默认会提交,
使数据写入硬盘中,而不仅仅是显示在内存上
2) 事务开启执行之后如果没有commit(提交)时,当你在打开一个数据库时会发现之前改变的数据没有写入磁盘中
提示:可以回退哪些语句?
事务处理用来管理INSERT、UPDATE和DELETE语句。不能回退SELECT语句(回退SELECT语句也没有必要),也不能回退CREATE或DROP操作。事务处理中可以使用这些语句,但进行回退时,这些操作也不撤销。
九 、数据库编程
存储过程函数(相当于函数的封装)
delimiter(定界符) /// #修改结束符 避免冲突
create procedure(程序) he(a int)
begin(相当于左大括号)
SQL语句;
end///
delimiter ;
call he(3); #调用函数
十 、使用视图(view)
1)创建
create view view_name as select column1,column2 from table ;
2)使用
select colunm1 from view_name;
3)删除
drop view view_name;
4)视图中只有select 语句,不像存储过程中可以有任何操作,试图创建的是虚拟的表,创建视图的好处是他只能访问你给定的这些数据,增加了安全性,(比如其他公司要访问你公司的一些数据时就可以使用试图)
十一 、使用触发器(trigger)
1. 创建
delimiter ///
begin
SQL 语句;
end///
delimiter ;
2. 删除
drop trigger trigger_name;
3. 在对某个表进行操作之后会触发这个触发器执行其中
的SQL语句以达到一定的目的
Example
统计一个表中的文章篇数,当执行insert时SQl语句执行加一操作,当执行delete时SQL语句执行减一操作,最终可得该表中的文章篇数
十二 、数据的导入导出
1. 导出
C:UsersMr Desktop>mysqldump -uroot -p521521 online_shopping user > user.sql
2. 导入
use database_name1;
mysql> source C:UsersMr Desktopuser.sql
十三 、索引
1)全文索引解决模糊(like)查询速度问题
2)外键约束想学生和成绩一样,先有学生然后才有成绩,如果你没学生就insert成绩将会报错
3)主键索引和唯一索引中的数据不能重复,有的话不能重复
唯一约束用来保证一列(或一组列)中的数据是唯一的。它们类似于主键,但存在以下重要区别
表可包含多个唯一约束,但每个表只允许一个主键。
唯一约束列可包含NULL值。
唯一约束列可修改或更新。
唯一约束列的值可重复使用。
与主键不一样,唯一约束不能用来定义外键。