MySql笔记

1:创建时;【column】不能使用关键字
2:多对一,一对多:【name】与【classs】与【column】看准


进入命令行,windows cmd,连接:
mysql -u 用户名 -p密码 -h 服务器IP地址 -P 服务器端MySQL端口号 -D 数据库名


SQL的分类:
数据查询语言DQL(查询) 
select
数据操纵语言DML(对数据增删改)
insert,delete,update
数据定义语言DDL(对表结构增删改)
create,drp,alter
事务控制语言TCL(事务提交回滚)
commit,rollback
数据控制语言DCL(创建用户授权)
grant,revoke


show variables like '%char%';  --查看字符集


select version();    -- 查看数据库版本
CREATE DATABASE cs; -- 创建数据库


DROP DATABASE cs; -- 删除数据库


USE cs; -- 使用这个数据库


SELECT DATABASE();  -- 当前使用的数据库


source ***.sql; -- 导入sql文件,运行


SHOW TABLES; -- 查看数据库下的表


DESC 表名; --  查看表结构


ALTER TABLE form1 DROP COLUMN 列名; -- 删除指定字段 


ALTER TABLE ss AUTO_INCREMENT=1;   -- 修改序列的起始位置


SHOW DATABASES;      -- 查询所有数据库  


\c   -- 终止sql


SHOW CREATE TABLE 表名; -- 查看创建表的sql语句


BETWEEN ... AND  ...两个值之间,数字:等同于>= AND <=(前闭后闭);字符(前闭后开)
IS NULL 不能为空(is not null不为空)
AND 并且
OR 或者
IN 包含(not or不包含)
NOT 可以取非
LIKE 模糊查询  _一个字符,%任意个字符


分组函数/聚合函数/多行处理函数(忽略空值)分组函数不能直接使用在where关键字后面
count()  取得记录数   count(*)
sum()      求和
avg() 取平均
max() 取最大的数
min() 取最小的数


分组查询
group by  表示通过哪个或者哪些字段进行分组,若一条DQL语句当中有group by子句,
那么select关键字后面只能跟参与分组的字段和分组函数。mysql中可以运行,oracle出错
两个字段联合分组
having






去除重复记录
distinct() 后面跟字段名     去除重复记录,只能出现最前面,后面可以跟字段,多个字段联合起来重复去除


order by -- 排序,默认是升序ase,desc降序 ,如果 两个字段要排序,就加逗号 字段 ...

Lower() 转换小写
upper() 转换大写
substr(,,) 取字串(substr(被截取的字符串,起始下标,截取的长度))
length() 取长度
trim() 去除空格         都是trim(字段)
str_to_date 将字符串转换成日期
date_format 格式化日期
format 设置千分位
round 四舍五入 可以保存到整数(参数默认为0)
rand() 生成随机数   SELECT ROUND(RAND()*100)  1-10随机
ifnull 可以将null转换成一个具体值   ifnull(字段,转换后的字符)   
在数据中有空值运算的,运算后为null
default 插入时默认值

SHOW VARIABLES LIKE '%char%';  -- 查看字符集

时间
NOW()函数以`'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。 
CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。 
CURTIME()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。




mysql数据库管理系统中对日期的处理提供了两个重要的函数
   str_to_date
   date_format


   str_to_date 将“日期字符串”转换成“日期类型”
    日期格式 
    %Y 年
    %m 月
    %d 日
    %H 时
    %i 分
    %s 秒
例子:str_to_date('1-11-1111','%d-%m-%Y')储存数据


date_format 将日期类型date转换成具有特定格式的日期字符串varchar【date--》varchar】
date_format(日期类型数据,‘日期格式’);


例子:date_format('1111-11-1','%d-%m-%Y'')








小结:====================
select  from where group by having order by  
第一:顺序不能改变
第二:执行顺序 from  where  group by  having select order by









链接查询---------
-根据链接方式分为:
--内连接    完全匹配
---等值连接  SELECT e.ename,d.dno 部门名称 ROM   empl e  inner JOIN depa d ON (e.dno=d.dno)
---非等值连接
---自连接    (一张表看成两张表)select a.ename ygong,b.ename lingdao from emp a join emp b on a.mgr=b.empno;
--外链接    不完全匹配,显示另一张表全部内容,另一张表缺失为null
---左外连接(左链接)  select e.name,d.dname from dept d left outer(可省略) join emp e on e.depthon=d.depthno;
---右外链接 (右链接) select e.name,d.dname from emp e right outer(可省略) join dept d on e.depthon=d.depthno;
--全链接《几乎不用》

多表进行表链接的语法格式
select X X X from a join b on 条件 join c_con on 条件;
a和b表链接后  a和c再链接




子查询---------
-select语句嵌套select语句
select ...(select).【了解】
from ...(select).
where ...(select).




合并
union 两个字段个数相同,类型可以不同(oracle不能类型不同)
SELECT Admin_Username FROM admin
UNION
SELECT Building_Name FROM building;
limit(起始下标,长度)  在sql语句的最后位置上  
用来获取一张表中的某部分数据
  只有MySql数据库中存在,不通用
SELECT * FROM xinxi LIMIT 0,5;


分页 
每页显示3条记录
第一页:0,3
第二页:3,3
第三页:6,3
第四页:9,3
......
    (pageNo-1)*pageSize,pageSize

select 
ename
from
emp
order by
  dal DESC
limit
(pageNo-1)*pageSize,pageSize




插入中文出现乱码.....
《1》用可视化界面编辑
《2》set character_set_results='GBK';




---表的复制
CREATE TABLE lzc2 AS SELECT * FROM lzc


if exists是否存在


drop table if exists 表名;




表结构的增删改
增--ALTER TABLE 表名 ADD 字段 varchar(10);
  改--ALTER TABLE 表名 ADD MODIFY 字段 varchar(20);
  删--ALTER TABLE 表名 DROP 字段名;




 数据的增删改
  增--INSERT INTO 表名(字段值,字段值..) VALUES(值,值..);
  删--DELETE FROM 表名 WHERE 条件;
  改--UPDATE 表名 SET 字段名=字段值,字段名=字段值...   (注意:语句中没有条件,会将一张表的所有数据全部更新)


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++




 约束---------
  not null 非空约束
  unique 唯一性约束  (约束的字段不能重复,但可以为null)
  primary key 主键约束
  foreign key 外键约束


---使用表级约束给多个字段联合添加约束【以下程序表示name和email两个字段联合唯一】
create table user(
id int(10) unique,
name varchar(32) not null,
email varchar(128),
unique(name,email)
或者    
constraint t_id_unique(id)
)
查询约束的名字:


主键-------
primary key:not null,unique
单一主键,
复合主键


性质分:自然主键,业务主键




外键-----
  constraint EMPL_dno_fk foreign key (dno) references DEPA(dno)

删除外键约束
alter table 表名 drop foreign key 外键约束名;
添加外键约束





级联更新和级联删除【谨慎使用】在外键约束后添加
---在删除父表中数据的时候,级联删除子表中的数据   ON DELETE CASCADE
---在更新父表中数据的时候,级联更新子表中的数据   ON UPDATE CASCADE


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


-----------存储引擎
mysql> SHOW ENGINES\
    -> ;
+------------+----------+------------------------------------------------------------------------+
| Engine     | Support  | Comment                                                                |
+------------+----------+------------------------------------------------------------------------+
| MyISAM     | YES      | Default engine as of MySQL 3.23 with great performance                 |
| MEMORY     | YES      | Hash based, stored in memory, useful for temporary tables              |
| InnoDB     | DEFAULT  | Supports transactions, row-level locking, and foreign keys             |
| BerkeleyDB | NO       | Supports transactions and page-level locking                           |
| BLACKHOLE  | NO       | /dev/null storage engine (anything you write to it disappears)         |
| EXAMPLE    | NO       | Example storage engine                                                 |
| ARCHIVE    | YES      | Archive storage engine                                                 |
| CSV        | NO       | CSV storage engine                                                     |
| ndbcluster | NO       | Clustered, fault-tolerant, memory-based tables                         |
| FEDERATED  | NO       | Federated MySQL storage engine                                         |
| MRG_MYISAM | YES      | Collection of identical MyISAM tables                                  |
| binlog     | DISABLED | This is a meta storage engine to represent the binlog in a transaction |
| ISAM       | NO       | Obsolete storage engine                                                |
+------------+----------+------------------------------------------------------------------------+
13 rows in set (0.00 sec)


---MyISAM表最适合于大量的数据读而少量数据更新的混合操作。MyISAM表的另一种适用情形是使用压缩的只读表
---如果查询中包含较多的数据更新操作,应使用InnDB。其行级锁机制和多版本的支持为数据读取和更新的混合操作提供了良好的并发机制
---可使用MEMORY存储引擎来存储非永久需要的数据,或者是能够从基于磁盘的表中重新生成的数据


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
----------------事务
--事务对应的英语单词:Transation
1.一个很小的不可再分的工作单元
2.通常一个事务对应了一个完整的业务 【例如:银行转账业务】
3.而一个完整的业务需要批量的DML语句【insert,update,delete】共同联合完成


特征【ACID】
1.原子性(Atomicity)
事务是最小的工作单元,不可再分
2.一致性(Consistency)
事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
3.隔离性(Isolation)
一个事务不会影响其他事务的运行
4.持久性(Durability)
在事务完成以后,该事务对数据库所做的更改将持久地保持在数据库之中【内存中的数据持久到硬盘文件中】,并不会被回滚


关于一些术语
开启事务
事务结束
提交事务
回滚事务
和事务有关的SQL语句
commit;提交
rollback;回滚

在mysql数据库管理系统中,默认情况下,事务是自动提交的。
手动开启事务:start transaction; 不执行commit或rollback就不提交事务


SET AUTOCOMMIT=OFF;
SET AUTOCOMMIT=ON;
或者
SET SESSION AUTOCOMMIT=OFF;
SET SESSION AUTOCOMMIT=ON;
查看事务是否开启:show variables like '%commit%';





隔离性有隔离级别(4个)
read uncommitted 读未提交   【脏数据】
read committed   读已提交   【避免脏数据】(oracle默认级别)
repeatable read  可重复读   【可能导致幻想读】(mysql默认级别)
serializable     串行化     【避免幻想读,但吞肚量低,事务A与事务B不并发,不常用】


修改事务的隔离级别
可选值:
READ-UNCOMMITTED
READ-COMMITTED
REPEATABLE-READ
SERIALIZABLE
第一种:修改my.ini配置文件
[mysqld]
transaction-isolation=值。
第二种:命令方式
会话级别:SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
或    SET SESSION  TRANSACTION ISOLATION LEVEL READ COMMITTED;
全局      SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;


查看会话级的当前隔离级别    SELECT @@TX_ISOLATION;或 SELECT @@session.tx_isolation;
查看全局的当前隔离级别     SELECT @@global.tx_isolation;




+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
索引(index)
什么时候用索引
该字段数据量庞大
该字段很少的DML操作【DML操作很多的话,索引也是需要不断的维护,效率反而降低】
该字段经常出现在where条件当中
索引的使用
建立索引 create unique index 索引名 on 表名(列名); //添加的unique字段唯一性约束
删除索引 drop index 索引名 on 表名;




+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


视图
视图作用
提高检索效率
隐藏表的实现细节【面向视图检索】
创建视图语句
create view 视图名 as select * from 表名;
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


导出导入
导出整个数据库
在win的dos命令窗口中执行:mysqldump bjpowernode>D:\aa.sql -uroot -p111
导出指定库下的指定表
在win的dos命令窗口中执行:mysqldump bjpowernode emp>aa.sql -uroot -p111


导入
登录mysql系统后: source D:\aa.sql


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


数据库设计三范式
1.要求有主键,并且要求每一个字段原子性不可再分
2.要求所有非主键字段完全依赖主键,不能产生部分依赖
3.所有非主键字段和主键字段之间不能产生传递依赖
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值