码迷,mamicode.com
首页 > 数据库 > 详细

mysql小结

时间:2018-10-27 11:50:55      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:red   taf   主服务器   企业   没有   客户   int   设置密码   文件   

一、列举常见的关系型数据库和非关系型都有哪些?
关系型数据库
    mysql       开源,主要用于大型门户
    oracle      企业级,功能强大、安全但是费用高
    sqlite      轻量级
    sql server  大学课程多数用这个,是微软公司的产品
    
非关系型数据库  :消息转发  
    nosql
    redis
    memcache
    MongoDB
    


二、常用的搜索引擎
1、搜索引擎
1.InnoDB:支持事务、行级锁、外键,保持事务的完整性,在修改数据的效率比较快
MySql 5.6 版本默认的存储引擎。InnoDB 是一个事务安全的存储引擎,它具备提交、回滚以及崩溃恢复的功能以保护用户数据。InnoDB 的行级别锁定以及 Oracle 风格的一致性无锁读提升了它的多用户并发数以及性能。
InnoDB 将用户数据存储在聚集索引中以减少基于主键的普通查询所带来的 I/O 开销。为了保证数据的完整性,InnoDB 还支持外键约束。


2.MyISAM:表级锁,查询速度快,但是插入和修改效率慢
MyISAM既不支持事务、也不支持外键、其优势是访问速度快,但是表级别的锁定限制了它在读写负载方面的性能,因此它经常应用于只读或者以读为主的数据场景。


3.Memory:数据都存在内存中,处理数据的速度快,但是对内存要求高,重启服务和断电消失
在内存中存储所有数据,应用于对非关键数据由快速查找的场景。Memory类型的表访问数据非常快,因为它的数据是存放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失,
长用于数据量小的数据库,并对服务器的内存有要求,一般应用于每个用户的登录状态。


4.BLACKHOLE:放进去的所有数据都不会存储,但有一个日志记录着插入的数据,利用日志分流数据
黑洞存储引擎,类似于 Unix 的 /dev/null,Archive 只接收但却并不保存数据。对这种引擎的表的查询常常返回一个空集。这种表可以应用于 DML 语句需要发送到从服务器,但主服务器并不会保留这种数据的备份的主从配置中。
    


2、相关sql语句    
1.查看当前的默认存储引擎:
mysql>   show variables like "default_storage_engine";

2.查询当前数据库支持的存储引擎
mysql>   show engines \G;


8、指定存储引擎建表
1.在建表时指定
mysql>   create table t1(id int,name varchar(20)) ENGINE=MyISAM; 

mysql>   create table country(id int,cname varchar(50)) ENGINE=InnoDB;


2.也可以使用alter table语句,修改一个已经存在的表的存储引擎。
mysql>   alter table country engine = MyISAM;



9、在配置文件中指定
#my.ini文件
[mysqld]
default-storage-engine=INNODB
    
    
    
    


三、各种定义语言的区别

DDL语句数据库定义语言:操作的是数据库、表的结构、视图、索引、存储过程
1create:创建
create database 数据库名 charset utf8;  // 创建数据库
create table 表名(id int,name char);  // (列名1 数据类型,列名2,数据类型...)  这个是创建表和表头,还没有内容的


2alter:跟新
alter database 数据库名 charset latin1(要修改的内容);  // 修改数据库

ALTER表的操作
1. 修改表名
      ALTER TABLE 表名 RENAME 新表名;

2. 增加字段
      ALTER TABLE 表名 ADD 字段名  数据类型 [完整性约束条件…];
                            
3. 删除字段
      ALTER TABLE 表名 DROP 字段名;

4. 修改字段:modify 修改数据类型和约束,change修改字段名并重新定义数据类型和约束
      ALTER TABLE 表名 MODIFY  字段名 数据类型 [完整性约束条件…];
      
      ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
      

5.修改字段排列顺序/在增加的时候指定字段位置
    ALTER TABLE 表名 ADD 字段名  数据类型 [完整性约束条件…]  FIRST;  # 放在首位
    
    ALTER TABLE 表名 ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名; # 在某个字段后
    
    ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…]  FIRST;
    
    ALTER TABLE 表名 MODIFY  字段名 数据类型 [完整性约束条件…]  AFTER 字段名;
    
6.增加/删除约束
    ALTER TABLE 表名 ADD PRIMARY KEY (字段);
    
    ALTER TABLE 表名 ADD UNIQUE (字段);
    
    ALTER TABLE 表名 DROP PRIMARY KEY;


3drop:删除
drop database 数据库名;  // 删除数据库
drop table 表名;  // 删除表


4、show/desc:查询
show databases;  // 查询所有的数据库
show tables;  // 查询所有表

desc 表名;   // 查看表的结构
describe 表名;   //查看表的结构
show create table 表名 \G;     查看当前表更详细的信息




DML语句数据库操纵语言: 操作的是表的具体的记录
1insert:插入数据
1. 插入完整数据(顺序插入)
    语法一:
    INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n);

    语法二:
    INSERT INTO 表名 VALUES (值1,值2,值3…值n);

2. 指定字段插入数据
    语法:
    INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);

3. 插入多条记录
    语法:
    INSERT INTO 表名 VALUES (值1,值2,值3…值n),(值1,值2,值3…值n),(值1,值2,值3…值n);
        
4. 插入查询结果
    语法:
    INSERT INTO 表名(字段1,字段2,字段3…字段n) 
                    SELECT (字段1,字段2,字段3…字段n) FROM 表2 WHERE …;





2update:跟新数据
语法:
    UPDATE 表名 SET 字段1=值1,字段2=值2,WHERE CONDITION;
示例:
    UPDATE mysql.user SET password=password(‘123’) where user=’root’ and host=’localhost’;
注:mysql库的user表存储的是用户的信息



3delete:删除数据
语法:
    DELETE FROM 表名 
        WHERE CONITION;

示例:
    DELETE FROM mysql.user WHERE password=’’;




4select:查询数据
查看所有列的数据
select * from staff_info;

查看指定列的数据
select name,age from staff_info;


4-1单表查询语法
SELECT [DISTINCT] 字段1,字段2... FROM 表名
                     WHERE 条件
                     GROUP BY 字段
                     HAVING 筛选
                     ORDER BY 字段[ASC/DESC]
                     LIMIT 限制条数
                     
1、关键字执行的优先级
1.找到表:from

2.拿着where指定的约束条件,去表中取出一条条记录

3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组

4.将分组的结果进行having过滤

5.执行select

6.distinct去重

7.将结果按条件排序:order by

8.限制结果的显示条数



                                                    
DCL语句数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
1、权限::
    usage   无权限
    all     全部权限
    selectcreatedrop2、授权具体语句:grant 权限 on 库.表 to 用户
mysql> grant all on *.* to ming@%;         # all表示授予所有权限,第一个*代表所有库,第二个*代表所有表,ming@%代表用户和客户端主机,%代表任意主机

mysql> grant select on db1.* to ming@localhost; # select代表只给查的功能,db1.* 代表库db1的所有表,localhost代表本地主机
    
# 给未存在的用户授权,会创建再授权
mysql> grant all on *.* to dong@% identified by 123456  # 创建账号并授权
    
# 刷新权限
mysql> flush privileges;  # 刷新使授权立即生效

# 查看用户权限
show grants for ming@%;

3、回收权限:revoke 权限 on 库.表 from 用户
mysql> revoke select on *.* from ming@%;





其他SQL语句:
1、 启动server端  - 可以在service服务中操作,也可以打开cmd窗口
> net start mysql


2、停止服务 - 可以在service服务中操作,也可以打开cmd窗口
> net stop mysql


3、登录用户
> mysql -u root -p     # mysql5.6默认是没有密码的,遇到password直接按回车键


4、查看所有的库
mysql> show databases; 


5、查看当前用户
mysql> select user();  


6、查看当前使用的数据库
mysql> select database(); 


7、退出当前用户
mysql> exit     # 也可以用\q或者quit退出


8、给当前用户设置密码
mysql> set password = password(newpassword);  


9、给其他用户设置密码
mysql> set password for username@host = password(newpassword) 


10、在输入sql语句的过程中 如果想要放弃本条语句    
mysql> \c


11、创建账号
# %表示这个网段内所有ip都可以连接,identified by 123表示给这个用户设置密码123
mysql> create user ming@192.168.16.%  identified by 123;

mysql> create user ming@192.168.16.5   # 表示某机器可以连接

mysql> create user ming@%    # 表示所有机器都可以连接  
    

12、远程登陆
mysql> mysql -u ming -p123 -h 192.168.16.31  # u是user p是password h是localhost的ip地址



13、使用某个数据库(切换到文件夹)
use 数据库名;



14、交叉连接:不适用任何匹配条件。生成笛卡尔积
mysql> select * from employee,department;



15、内连接:只连接匹配的行
说明:
    找两张表共有的部分,相当于利用条件从笛卡尔积结果中筛选出了正确的结果
    department没有204这个部门,因而employee表中关于204这条员工信息没有匹配出来

mysql> select employee.id,employee.name,employee.age,employee.sex,department.name from employee inner join department on employee.dep_id=department.id;




16、外链接之左连接:优先显示左表全部记录
说明:
    以左表为准,即找出所有员工信息,包括没有部门的员工
    本质就是:在内连接的基础上增加左表有而右表没有的结果
    
mysql> select employee.id,employee.name,department.name as depart_name from employee left join department on employee.dep_id=department.id;




17、外链接之右连接:优先显示右表全部记录
说明:
    以右表为准,即找出所有部门信息,包括没有员工的部门
    本质就是:在内连接的基础上增加右表有而左表没有的结果
    
mysql> select employee.id,employee.name,department.name as depart_name from employee right join department on employee.dep_id=department.id;





18、全外连接:显示左右两个表全部记录
说明:
    在内连接的基础上增加左表有右表没有的和右表有左表没有的结果
    注意:mysql不支持全外连接 FULL JOIN
    但是:mysql可以使用UNION这种方式间接实现全外连接,需要注意的是union与union all的区别:union会去掉相同的纪录

select * from employee left join department on employee.dep_id=department.id 
union 
select * from employee right join department on employee.dep_id=department.id;

 

mysql小结

标签:red   taf   主服务器   企业   没有   客户   int   设置密码   文件   

原文地址:https://www.cnblogs.com/Zzbj/p/9860497.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!