MySQL笔记

一、MySQL常用基本数据类型

1.1 数值

INT(4) ,TINYINT(1),FLOAT(4),DOUBLE(8)   // 括号内是它们所占的字节数

1.2 日期和时间

DATE,TIME,DATETIME,YEAR,  TIMESTAMP

  1、当字段定义为timestamp,表示该字段在插入和更新时都不会自动设置为当前时间。

  2、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP,表示该字段仅在插入且未指定值时被赋予当前时间,再更新时且未指定值时不做修改。

  3、当字段定义为timestamp ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入且未指定值时被赋值为"0000-00-00 00:00:00",在更新且未指定值时更新为当前时间。

  4、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入或更新时未指定值,则被赋值为当前时间。

1.3 字符串

CHAR(0~255),WARCHAR(0~255),TEXT(0~65535),

CHAR为定长字符串,WARCHAR为变长字符串

二、数据定义语言(DLL)

(语法不区分大小写)

数据库

2.1 查看数据库  SHOW  DATABASES;

2.2 切换至数据库  USE  database_name;       // 这里小写指根据具体情况写具体的数据库名称

2.3 创建数据库  CREATE  DATABASE  database_name;

2.4 删除数据库  DROP  DATABASE  database_name;

创建后的数据库一般都放在MYSQLMySQLServer8.0Data目录。

数据表

2.2.1  创建表  CREATE  TABLE table_name(列名  列类型  其他关键词,

                      (列名  列类型  其他关键词,

                      (列名  ....    ....    );

其他关键此包括:not null(非空),auto_increment(自增),comment' 解释词'(解释),default(默认)

2.2.2  查看当前数据库所有表  SHOW  TABLES;

2.2.3  查看表的结构  DESC  table_name;

2.2.4  查看创建表的语句  SHOW  CREATE  TABLE  table_name;

2.2.5  删除表  DROP  TABLE  table_name;

2.2.6  修改类型  ALTER  TABLE  table_name MODIFIY 字段  类型;// not null视情况是否加上

2.2.7  修改字段  ALTER  TABLE  table_name CHANGE 原字段 新字段 类型;

2.2.8  添加字段  ALTER  TABLE  table_name ADD 字段 类型 其他关键词;// 默认添加在表尾,可在语句末尾加上AFTER 某字段改变其位置

2.2.9  删除字段  ALTER  TABLE  table_name DROP 字段;

三、数据操作语言(DML)

下面介绍的DML是对表记录的增删改查

3.1  查看表的内容  SELECT  *  FROM  table_name;

3.2  插入数据  INSERT  INTO  table_name(列名1,列名2,列名3,.....)VALUES(列值1,列值2,列值3,.....);  // 注意:列名与列值的顺序是一 一对应的;varchar和char类型的列值需要单引号' '

3.3  修改/更新数据  UPDATE   table_name  SET  列名1=列值1,列名2=列值2……[WHERE 条件];       // WHERE 这部分自由发挥,如WHRER id in(1,2)

3.4  删除数据  DELETE  FROM  table_name [WHERE 条件];

四、数据查询语言(DQL)

无论是哪一种查询语言,对表本身的结构和内容都没有影响,仅作为查询,给用户显示。

4.1  查看指定列内容  SELECTE  列名1,列名2,……FROM  table_name [WHERE 条件];

4.2  查看表的所有内容  SELECT  *  FROM  table_name;

4.3  模糊查询  SELECT  *  FROM  table_name  [WHERE  列名 ] LIKE  "你想搜索的内容“

4.4  升序排列  SELECT  *  FROM  table_name  ORDER   BY  字段名  ASC;

4.5  降序排列  SELECT  *  FROM  table_name  ORDER   BY  字段名  DESC;

4.6  聚合函数  SELECT  function  FROM  FROM  table_name;

// 这里的function包括count(*)、sum(列名)、avg(列名)、max(列名)、min(列名),分别对应的功能是查看表的记录数、查看此列的和、平均值、最大值、最小值

4.7  分组查询  SELECT  *  FROM  table_name  GROUD  BY  sex;(这里假设性别分组)

4.8  内连接查询  SELECT  想要显示的内容  FROM  表1  INNER   JOIN  表2  ON  条件;

4.9  左连接查询  SELECT  想要显示的内容  FROM  表1  LEFT  JOIN  表2  ON  条件; // 以左边的表1为基准将表1列出,表2再对应列出内容,空白处用NULL填充

4.10  右连接查询  SELECT  想要显示的内容  FROM  表1  RIGHT   JOIN  表2  ON  条件;

4.11  子查询  SELECT  内容1  FROM  表1  [WHERE  条件]  IN  (SELECT  内容2  FROM  表2);   //内容1和内容2要对应上

4.12  限制条数查询  SELECT  列名   FROM  table_name  LIMIT  n;    //n表示想要显示多少条

4.13  限制条数查询  SELECT  列名   FROM  table_name  LIMIT  m,n;    //在第n+1行开始显示m条

五、数据控制语言(DCL)

5.1  创建用户  CREATE  USER  user_name  @  'ip  address'  IDENTIFIED  BY  'password';   //该用户只能在这个ip上登陆,当然如果用%,则所有ip都可以连接

  创建用户后,该用户如何进入数据库:Mysql  -user_name  h ip address  -p;    //ip如果是本地的,ip可用local host代替

5.2  给用户授权  GRANT  privileges  ON  database_name.table_name  TO  'user_name' @ 'host_name' ;   

//这里的privileges包括select,insert,update,delect等多种权限,如果想授予全部权限,可用all,如果想要给所有数据库的所有表授予对应权限,可用*.*代替database_name.table_name

5.3  刷新权限  FLUSH  PRIVILEGES;    //只要执行一次DCL,都应刷新一下权限

5.3  撤销用户权限  REVOKE  privileges  ON database_name.table_name  FROM  'user__name' @ 'host_name';

5.4  查看用户  SELECT  USER, HOST  FROM  MYSQL.USER;

5.5  查看用户权限  SHOW  GRANTS  FOR  'user_name' @ 'ip address';

 六、事务控制语言(DTL) 

一个sql语句就是一个事务,事务可以保证一组sql语句要么都成功,要么都失败,系统默认自动提交

事务有以下特性:

原子性:一个事务中的所有语句,应该做到,要么全做,要么全部不做;

一致性:让数据保持逻辑上”合理性",比如,一个商品出库时,既要让商品库中该商品数量减小,又让对应用户的购物车中的商品增加相应的数量

隔离性:如果多个事务同时并发执行,但每个事务就像各自独立执行一样

持久性:一个事务执行成功,则对数据来说应该是一个明确的硬盘数据更改,而不仅仅是内存中的变化

SET  AUTOCOMMIT = 0;    //关闭自动提交事务

START  TRANSACTION;    //开启事务

COMMIT;    //提交DML操作

ROLLBACK;   //取消DML操作,也叫回滚

原文地址:https://www.cnblogs.com/main404/p/11192663.html