2018-06-17 19:26:45  163258 7

MySQL数据库入门基础知识(二)

 标签:   

SQL语句的分类

DDL (data definationlanguage)数据定义语言   作用 :创建 删除  修改 库表结构

DML (data manipulation language) 数据操作语言。作用:增  删  改表的记录

DCL (data control language)数据控制语言   作用 :用户的创建以及授权

DQL (data query language)数据查询语言   作用:查询数据


DDL(数据库相关操作)


查看所有数据库

SHOW DATABSES

切换数据库

USE 数据库名

创建数据库

CREATE DATABASE 数据库名

删除数据库

DROP  DATABASE  数据库名

DDL(数据表相关操作)


数据库的相关操作


查看所有数据库

SHOW DATABSES

切换数据库

USE 数据库名

创建数据库

CREATE DATABASE 数据库名

删除数据库

DROP  DATABASE  数据库名


DDL(数据表相关操作)


创建前要先选择数据库否则后报错


创建数据表结构


CREATE TABLE 表名(

列名 列类型  其他的属性,

......

列名 列类型

);


表名命名/字段名规则:小写 字母 下划线(user_name)  有意义  不要用系统关键字


查看当前数据库的表 

SHOW TABLES;

查看表结构

DESC  表名

查看创建表的sql语句

SHOW CREATE TABLE 表名

修改表名

ALTER TABLE 表名  RENAME (TO) 新表名

修改表的相关操作 ALTER TABLE 表名  操作


添加表字段

ALTER TABLE 表名 ADD   字段名  属性。。。


ALTER TABLE 表名 ADD   字段名  属性。。。 AFTER 字段名  在某一字段后加


修改字段类型


ALTER TABLE 表名 MODIFY    列名  列类型。

ALTER TABLE 表名  CHANGE  原列名  新列名  列类型


删除表的某一列

ALTER TABLE 表名 DROP  列名


删除表

DROP  TABLE 表名


DML  数据操作语言(INSERT DELETE UPDATE)


插入数据


插入第一种情况


INSERT INTO  表名(列1,列2,列3...)VALUES (列值1,列值2.....)

列和值是一一对应的。


第二种


INSERT INTO 表名  VALUES (列值1,列值2.....) //每一列都要与之对应


SELECT  * FROM 表名;



更新


UPDATE 表名 SET  列1=列值1,列2=列值2  WHERE  条件。


不加where条件会修改所有的记录


删除


DELETE  FROM 表名  WHERE  条件

   

不加where条件会删除所有的记录


还有一个删除表记录就是 TRUNCATE 表名  是DDL的


DCL(数据控制语言)


    

正常线上项目一个mysql可能会跑好几个项目,每个项目对应一个数据库,不同的数据库要对应不同的用户。并且权限也不一样。主要是安全的问题。

并且线上是不能用超级用户ROOT的。(裸奔)


创建用户

CREATE  USER  用户名 @'IP地址'  IDENTIFIED BY '密码’

CREATE  USER  用户名 @’%'  IDENTIFIED BY ‘密码’


查看创建用户的数据


select user,host from mysql.user;


此用户只能在指定的ip上连接    所有ip都可以连接


用创建的用户连接数据库


mysql –u用户名  –h要连的数据库的ip   -p  //不加 –h默认是localhost


用户授权  权限回收


GRANT  权限1,权限2...  ON  数据库名.*  TO  用户名  @ IP地址或者%


所有的数据库  就用 *.*  所有的权限就用 ALL或者ALL PRIVILEGES

flush privileges


查看权限

SHOW  GRANTS FOR 用户名@IP地址


撤销权限

REVOKE  权限1,权限2.. ON  数据库名.* FROM 用户名 @IP地址或者%

用户名加权限一句

flush privileges


grant  权限 1,权限2  on  数据库名.* to 用户名@IP地址 identified  by 密码

flush privileges



删除用户

DROP USER  用户名 @ IP地址


修改密码


1 mysqladmin  -u用户名 -p旧密码  password 新密码

2 update user set authentication_string=password('111111') where user='root’;

5.7之前版本 password


忘记密码  解决方案


mysqld --skip-grant-tables

然后

mysql

进入修改密码  update

DQL  数据查询语言

数据查询语言(query)


SELECT  列名1,列名2,...  FROM  表名  [WHERE 条件]


查询所有字段用 *   不带where条件  把表的所有记录查出来


=              // 赋值和判断都是

 

!=   <>      //不等于


<   >  <=  >=  


OR  或者   ||

AND    且     &&


BETWEEN 5 AND 10

IN

NOT IN  

like    ‘%值%’   左模糊  右模糊  全模糊


列起别名 AS    alias(别名)  


SELECT 列名1 AS 别名,列名2  FROM 表名 


连接 CONCAT  CONCAT_WS


SELECT   CONCAT(列名1,列名2)   FROM 表名


SELECT CONCAT_WS(‘分隔符’,列名1,列名2) FROM 表名


过滤掉重复的列值


SELECT DISTINCT 列名1  FROM  表名


LIMIT  查询  限制查询的条数 


SELECT  * FROM 表名  LIMIT  3


SELECT  * FROM 表名  LIMIT  3 ,5 


排序


SELECT * FROM 表名  ORDER  BY  字段名  ASC  (升序 默认  可以不加)


SELECT * FROM 表名  ORDER  BY  字段名  DESC  降序


聚合函数

SELECT COUNT(*) FROM   表名    查询表的记录数

SELECT SUM(列名) FROM  表名    查询此列的和

SELECT AVG(列名) FROM  表名    查询此列的平均值

SELECT MAX(列名) FROM  表名    查询此列的最大值

SELECT MIN(列名) FROM  表名    查询此列的最小值


分组查询  (聚合查询)

SELECT  count(*) ,分组中的列  FROM 表名  GROUP BY sex  按照性别分组


SELECT  sum(age) ,sez FROM  表名  GROUP BY sex  HAVING sum(age)>12


连表查询  至少有两个表


连接查询


联合查询


子查询 

QQ截图20180617190905.jpg

内连接查询  inner join  (显式的和隐式的)


select s.name,m.mark  from student as s,mark as m  where s.id=m.stu_id;

也可以写成:

(笛卡尔积)

select s.name,m.mark  from student as s inner join mark as m  where/on s.id=m.stu_id;


左连接

select s.name,m.mark  from student as s left join mark as m  on s.id=m.stu_id;


右连接

select s.name,m.mark  from student as s right join mark as m  on s.id=m.stu_id;


全连接 

full join


推荐内连接


子查询



union 和 union   all  查询
 UNION 操作符用于合并两个或多个 SELECT语句的结果集

QQ截图20180617191038.jpg


请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。
select id,name from php union  select name,id  from java;



字符集/字符集校对


utf8----gbk

show character set;  //查看数据库支持所有字符集

show create database 数据库名  //查看数据库字符集
show create table  表名   //查看表字符集
修改数据库字符集
alter database 数据库名 DEFAULT CHARACTER SET 字符集;

修改表字符集
alter table 表名 DEFAULT CHARSET=字符集;  //改表名
alter table 表名  convert  to  character set 字符集; //改表以及字段字符集
字符集校对

校对规则则是定义了比较字符串的方式,解决排序和字符分组的问题。
使用utf8_general_ci 不区分大小写

修改配置文件  创建时默认字符集

my.ini   mysqld  添加配置   character_set_server=utf8

mysql存储引擎

    存储引擎负责MySQL中数据的存储和提取,是数据库中非常重要非常核心的部分,也是MySQL区别与其他数据库的一个重要特性。
数据库的几种存储引擎:
BLACKHOLE    CSV        MEMORY       ARCHIVE  
MyISAM    全文索引(full text)  不支持事务  表级锁   崩溃恢复支持不好 短数据
性能好  不推荐用。
InnoDB     支持事务  不支持全文索引 5.6版本后开始支持  行级锁 崩溃恢复支持
性能好
5.6开始默认的数据库引擎就是InnoDB
查看数据库支持的引擎
show engines\G
推荐innodb  速度 快
查看数据表的引擎
show table status; (查看所有)
查看某一表的
show  create table 表名
修改引擎
alter table 表名 engine=引擎名;
建表时不指定的话默认的用配置文件里的
mysqld   添加  default-storage-engine=MyISAM


关于int(n)


int(N) ,N 表示最大显示宽度(字段设置zerofill属性时可查看区别),不指定N时,默认为10。N 的值跟 int(N) 所占多少存储空间或最大能存储多大长度数据并无任何关系。也就是说 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。


int(n) 并不是表示存储的长度,int(2) 与int(3) 并不能限制只能存 2或者3的长度

n只有在加了 zerofill才能看出区别

int(6) zerofill   与  int(6)  存储 123  

第一种  000123  第二种  123

int(n)可以不加  不加的时候 如果有unsigned  n为10   没有加unsigned 11



char(n) 与 varchar(n)



char 存的为定长,如果存入数据没有达到长度,仍占用空间  取数据快
varchar  存出可变长度,可以根据字符串的长度,占用存储空间,取数据相对慢

char  适合存储定长的字符串 如  密码加密后的
varchar适合存储  可变长度的字符串如用户名

char  存不定长的浪费空间 但是查询数据块

varchar  节省空间  但是查询数据慢


n为可存储字符串的长度,创建表的时候必须指定,超过长度后插入失败


mysql反引号


它是为了区分MYSQL的保留字与普通字符而引入的符号。


create table   select(id int not null);  //创建失败  select表名是mysql的关键字


create table `select`(id int not null);


保留字 不能用于表名 以及字段名

//官方文档给的关键字

https://dev.mysql.com/doc/refman/5.7/en/keywords.html


MySQL的基础入门知识就这么多。下面是相对高级的。

此文章对应的视频课程讲解,扫描下面图片二维码即可。限时优惠中。或者腾讯课堂 搜索 lampol


640.jpg


7 条留言此文章没有人评论

给我留言

评论内容