mysql管理命令

 show  databases;  显示服务器上当前所有的数据库

 use  数据库名称;  进入指定的数据库

 show  tables;  显示当前数据库中所有的数据表

 desc  表名称; 描述表中都有哪些列(表头)

 quit;  退出服务器的连接

常用的SQL命令

 (1)丢弃指定的数据库,如果存在的话

DROP  DATABASE  IF  EXISTS  jd;

 (2)创建新的数据库

CREATE  DATABASE  jd;

 (3)进入创建的数据库

USE  jd;

 (4)创建保存数据的表

CREATE  TABLE  student(

sid  INT,

name  VARCHAR(8),

sex  VARCHAR(1),

score  INT

);

 (5)插入数据

INSERT  INTO  student  VALUES('1','scott','m','87');

 (6)查询数据

SELECT * FROM student;

 (7)删除数据

DELETE FROM  student  WHERE sid='3';

 (8)修改数据

UPDATE  student  SET  name='guo',score='89'  WHERE sid='4';

标准SQL语句分类

DDL: Data Define Language 定义数据结构

CREATE/DROP/ALTER

DML: Data Manipulate Language 操作数据

INSERT/DELETE/UPDATE

DQL: Data Query Language 查询数据

SELECT

DCL: Data Control Language 控制用户权限

GRANT(授权)/REVOKE(收权)

解决mysql存储中文乱码

脚本文件另存为的编码

客户端连接服务器端的编码(set names utf8)

服务器端在创建数据库时的编码(chaset=utf8)

mysql中的列类型

创建数据表的时候,指定的列可以存储的数据类型

CREATE  TABLE  t1( nid 列类型 );

 (1)数值型 —— 引号可加可不加

TINYINT  微整型,占1个字节,范围-128~127

SMALLINT  小整型,占2个字节,范围-32768~32767

INT  整型,占4个字节,范围-2147483648~2147483647

BIGINT  大整型,占8个字节

FLOAT  单精度浮点型,占4个字节,最多3.4e38,可能产生计算误差

DOUBLE  双精度浮点型,占8个字节,范围比BIGINT大的多

  DECIMAL(M,D)  定点小数,不会产生计算误差,M代表总的有效位数,D小数点后的有效位数

  BOOL  布尔型,只有两个值TRUE/1、FALSE/0,TRUE和FALSE不能加引号;在存储的时候使用TINYINT类型,具体的值是1和0

 (2)日期时间型 —— 必须加引号

DATE  日期型  '2019-10-31'

TIME  时间型  '14:26:30'

DATETIME  日期时间型   '2019-10-31 14:26:30'

 (3)字符串型 —— 必须加引号

  VARCHAR(M)  变长字符串,不会产生空间浪费,操作速度相对慢,M最大是65535

  CHAR(M)  定长字符串,可能产生空间浪费,操作速度相对的快,M最大值是255,常用于存储手机号,身份证号等一些固定长度的字符串

  TEXT(M)  大型变长字符串,M最大是2G

列约束

mysql可以对要插入的数据进行特定的验证,只有满足条件才允许插入到数据表中,否则被认为非法的插入

例如:一个人的性别只能是男或者女,一个人成绩0~100

  CREATE  TABLE  t1( id  列类型  列约束 );

 (1)主键约束——PRIMARY  KEY

声明了主键约束的列上的值不能出现重复,一个表中只能有一个主键,通常加在编号列;表中查询的记录会按照主键从小到大的顺序排列——加快查找速度。

声明了主键约束后就不能在插入NULL值

(2)非空约束 —— NOT NULL

声明了非空约束的列上不允许插入NULL值

 (3)唯一约束——UNIQUE

声明了唯一约束的列上不允许插入重复的值,允许插入NULL,甚至多个NULL   ps:NULL和任何值比较都不等,包括两个NULL比较

(4)检查约束——CHECK

检查约束可以对插入的数据进行自定义验证

CREATE  TABLE  student(

score  TINYINT  CHECK(score>=0 AND score<=100)

);

mysql不支持检查约束,会降低数据的插入速度

 (5)默认值约束——DEFAULT

可以使用DEFAULT关键字声明默认值,有两种方式可以应用默认值

INSERT INTO laptop_family VALUES(70,'神州',DEFAULT);

INSERT INTO laptop_family(fid,fname) VALUES(80,'华为');

(6)外键约束——FOREIGN KEY

声明了外键约束的列,取值必须在另一个表的主键列上出现过,两者的列类型要保持一致,允许插入NULL

FOREIGN KEY(外键列) REFERENCES 另表(主键列)

mysql中的自增列

AUTO_INCREMENT: 自动增长,假如声明了自增列,无需手动赋值,直接赋值为NULL,会获取当前的最大值,然后加1

注意:

只适用于整数型的主键列上

自增允许手动赋值

3.简单查询

#演示表
#设置客户端连接服务器端编码
SET NAMES UTF8;
#丢弃数据库,如果存在
DROP DATABASE IF EXISTS tedu;
#创建数据库,设置编码
CREATE DATABASE tedu CHARSET=UTF8;
#进入创建的数据库
USE tedu;
#创建数据表dept
CREATE TABLE dept(
did INT PRIMARY KEY AUTO_INCREMENT,
dname VARCHAR(8) UNIQUE
);
#插入数据
INSERT INTO dept VALUES(10,'研发部');
INSERT INTO dept VALUES(20,'市场部');
INSERT INTO dept VALUES(30,'运营部');
INSERT INTO dept VALUES(40,'测试部');
#创建数据表emp
CREATE TABLE emp(
eid INT PRIMARY KEY AUTO_INCREMENT,
ename VARCHAR(8),
sex BOOL DEFAULT 0,
birthday DATE,
salary DECIMAL(7,2),
deptId INT,
FOREIGN KEY(deptId) REFERENCES dept(did)
);
#插入数据
INSERT INTO emp VALUES(NULL,'Tom',1,'1990-5-5',6000,20);
INSERT INTO emp VALUES(NULL,'Jerry',0,'1991-8-20',7000,10);
INSERT INTO emp VALUES(NULL,'David',1,'1995-10-20',3000,30);
INSERT INTO emp VALUES(NULL,'Maria',0,'1992-3-20',5000,10);
INSERT INTO emp VALUES(NULL,'Leo',1,'1993-12-3',8000,20);
INSERT INTO emp VALUES(NULL,'Black',1,'1991-1-3',4000,10);
INSERT INTO emp VALUES(NULL,'Peter',1,'1990-12-3',10000,10);
INSERT INTO emp VALUES(NULL,'Franc',1,'1994-12-3',6000,30);
INSERT INTO emp VALUES(NULL,'Tacy',1,'1991-12-3',9000,10);
INSERT INTO emp VALUES(NULL,'Lucy',0,'1995-12-3',10000,20);
INSERT INTO emp VALUES(NULL,'Jone',1,'1993-12-3',8000,30);
INSERT INTO emp VALUES(NULL,'Lily',0,'1992-12-3',12000,10);
INSERT INTO emp VALUES(NULL,'Lisa',0,'1989-12-3',8000,10);
INSERT INTO emp VALUES(NULL,'King',1,'1988-12-3',10000,10);
INSERT INTO emp VALUES(NULL,'Brown',1,'1993-12-3',22000,NULL);

 (1)查询特定的列

示例: 查询所有员工的姓名、工资

SELECT ename,salary FROM emp;

 (2)查询所有的列

SELECT * FROM emp;

SELECT eid,ename,sex,birthday,salary,deptId FROM emp;

 (3)给列起别名

示例: 查询所有员工的姓名和工资,使用汉字别名

SELECT ename AS 姓名,salary AS 工资 FROM emp;

练习: 查询所有员工的编号、姓名、性别、生日,使用汉字别名

SELECT eid AS 编号,ename AS 姓名,sex 性别,birthday 生日 FROM emp;

练习: 查询所有员工的姓名和工资,使用一个字母作为别名

SELECT ename e,salary s FROM emp;

 (4)显示不同的记录/合并相同的记录

示例: 查询出员工都分布在哪些部门

SELECT DISTINCT deptId FROM emp;

练习: 查询出都有哪些性别的员工

SELECT DISTINCT sex FROM emp;

 (5)查询时执行计算

示例: 计算2+3-5*6.4+3.6*8.7

SELECT  2+3-5*6.4+3.6*8.7;

练习: 查询出所有员工的姓名及其年薪

SELECT ename,salary*12 FROM emp;

练习: 假设每个员工的工资增加500,年终奖5000,查询出所有员工的姓名及其年薪,给列起汉字别名

SELECT ename 姓名,(salary+500)*12+5000 年薪 FROM emp;

 (6)查询结果集排序

示例: 查询所有的部门,结果集按照部门编号升序排列

SELECT * FROM dept ORDER BY did ASC;#ascendant

示例: 查询所有的部门,结果集按照部门编号降序排列

SELECT * FROM dept ORDER BY did DESC;

describe  描述

descendant  降序

练习:查询所有的员工,结果集按照工资降序排列

SELECT * FROM emp ORDER BY salary DESC;

练习: 查询所有的员工,结果集按照年龄从小到大排列

SELECT * FROM emp ORDER BY birthday DESC;

练习: 查询所有的员工,结果集按照姓名升序排列

SELECT * FROM emp ORDER BY ename;

练习: 查询所有的员工,结果集按照工资降序排列,如果工资相同按照姓名升序排列

SELECT * FROM emp ORDER BY salary DESC,ename;

练习: 查询所有的员工,结果集中女员工显示在前边,如果性别相同,按照年龄从大到小排列

SELECT * FROM emp ORDER BY sex,birthday;

 (7)条件查询

示例: 查询出编号为7的员工

SELECT * FROM emp WHERE eid=7;

练习: 查询出姓名叫king的员工的编号,姓名,工资

SELECT eid,ename,salary FROM emp WHERE ename='king';

练习: 查询出所有的女员工

SELECT * FROM emp WHERE sex=0;

练习: 查询出20号部门下的员工有哪些

SELECT * FROM emp WHERE deptId=20;

练习: 查询出工资为5000以上的员工有哪些

SELECT * FROM emp WHERE salary>5000;

比较运算符: >  <  =   >=  <=  !=(不等于)

练习: 查询出1991-1-1后出生的员工有哪些

SELECT * FROM emp WHERE birthday>'1991-1-1';

练习: 查询出不在10号部门的员工有哪些

SELECT * FROM emp WHERE deptId!=10;

练习: 查询出没有明确部门的员工有哪些

SELECT * FROM emp WHERE deptId IS NULL;

练习: 查询出有明确部门的员工有哪些

SELECT * FROM emp WHERE deptId IS NOT NULL;

练习: 查询出工资在6000以上的男员工有哪些

SELECT * FROM emp WHERE salary>6000 AND sex=1;

练习: 查询出工资在5000~8000之间所有员工

SELECT * FROM emp WHERE salary>=5000 AND salary<=8000;

SELECT * FROM emp WHERE salary BETWEEN 5000 AND 8000;

练习:查询出工资在5000以下和8000以上的所有员工

SELECT * FROM emp WHERE salary<5000 OR salary>8000;

SELECT * FROM emp WHERE salary NOT BETWEEN 5000 AND 8000;

练习: 查询出1990年之前和1993年之后出手的员工有哪些

SELECT * FROM emp WHERE birthday<'1990-1-1' OR birthday>'1993-12-31';

练习: 查询出1993年出生的员工有哪些

SELECT * FROM emp WHERE birthday>='1993-1-1' AND birthday<='1993-12-31';

SELECT * FROM emp WHERE birthday BETWEEN '1993-1-1' AND '1993-12-31';

练习: 查询出20号部门和30号部门的员工有哪些

SELECT * FROM emp WHERE deptId=20 OR deptId=30;

SELECT * FROM emp WHERE deptId IN(20,30);

练习: 查询出不在20号部门或者30号部门的员工有哪些

SELECT * FROM emp WHERE deptId NOT IN(20,30);

AND/OR

BETWEEN.. AND../NOT BETWEEN..AND..

IS NULL/IS NOT NULL

IN() / NOT IN()

 (8)模糊条件查询

示例: 查询出姓名中含有字母e的员工

SELECT * FROM emp WHERE ename LIKE '%e%';

练习: 查询出姓名中以e以为的员工

SELECT * FROM emp WHERE ename LIKE '%e';

练习: 查询出姓名中倒数第二个字符为e的员工

SELECT * FROM emp WHERE ename LIKE '%e_';

%  可以匹配任意个字符   >=0

 _   可以匹配任意1个字符  =1

以上两个匹配符必须结合LIKE关键字使用

 (9)分页查询

假如查询的结果集有太多的数据,一次显示不完,可以使用分页显示

需要有两个条件: 当前的页码值、每页的数据量

SELECT * FROM emp LIMIT start,count;

   start: 开始查询的值,从哪一条开始查询

   count: 每页的数据量

 start = (当前的页码值-1)*每页的数据量

注意事项: start和count必须是数值型,不能加引号。

假设每页显示5条数据

第1页: SELECT * FROM emp LIMIT 0,5;

第2页: SELECT * FROM emp LIMIT 5,5;

第3页: SELECT * FROM emp LIMIT 10,5;

假设每页显示6条数据,查询前3页

第1页: SELECT * FROM emp LIMIT 0,6;

第2页: SELECT * FROM emp LIMIT 6,6;

第3页: SELECT * FROM emp LIMIT 12,6;

#

Mysq sql语句教程的更多相关文章

  1. SQL语句教程

    SQL指令 SELECT DISTINCT WHERE AND OR IN BETWEEN LIKE ORDER BY 函数 COUNT GROUP BY HAVING ALIAS 表格链接 外部链接 ...

  2. linux之SQL语句简明教程

    本教程参考http://www.1keydata.com/cn/sql/ 目的是让初学者了解linux下Mysql的操作,但是我仍想侧重于SQL语句的讲解 sql语句的学习将按照下图的流程: 当然在这 ...

  3. [SQL基础教程] 2-1 SELECT语句基础

    [SQL基础教程] 2-1 SELECT语句基础 列的查询 Syntax SELECT<列名>,..... FROM<表名>; SELECT col_1, col_2 FROM ...

  4. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 连接数据库执行SQL语句

    BIML 101 - BIML 快速入门教程 第一节 连接数据库执行SQL语句 本小节将用BIML建一个简单的可以执行的包. 新建一个biml文件,贴入下面的代码 1 <Biml xmlns=& ...

  5. mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句

    mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...

  6. 【转】mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句

    转自:除非申明,文章均为一号门原创,转载请注明本文地址,谢谢! 转载地址:http://blog.csdn.net/kutejava/article/details/9164353#t5 1. if ...

  7. SqlServer教程:经典SQL语句集锦

    SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GRAN ...

  8. linux之SQL语句简明教程---UPDATE DELETE FROM

    我们有时候可能会需要修改表格中的资料.在这个时候,我们就需要用到 UPDATE 指令.这个指令的语法是: UPDATE "表格名" SET "栏位1" = [新 ...

  9. linux之SQL语句简明教程---INSERT INTO

    到目前为止,我们学到了将如何把资料由表格中取出.但是这些资料是如果进入这些表格的呢? 这就是这一页 (INSERT INTO) 和下一页 (UPDATE) 要讨论的. 基本上,我们有两种作法可以将资料 ...

随机推荐

  1. 常用开发类库支持--UUID及空值处理Optional

    一.java常用类库--UUID --UUID类库的使用非常简单,只需要使用静态方法UUID.randomUUID(就可以正常使用) public class MyUUID { public stat ...

  2. 实用js片段

    算法 //加法 add(10,2) //12 function add(a, b) { var c, d, e; try { c = a.toString().split(".") ...

  3. asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密。

    原文:asp.net core 使用中间件拦截请求和返回数据,并对数据进行加密解密. GitHub demo https://github.com/zhanglilong23/Asp.NetCore. ...

  4. nginx的原理

    Nginx会按需同时运行多个进程:一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程 (cache loader)和缓存管理器进程(cache manager) ...

  5. db2序列

    CREATE SEQUENCE <sequence-name> AS data-type   默认 As Integer START WITH <numeric-constant&g ...

  6. android pull 解析器解析xml文档

    person.xml <?xml version="1.0" encoding="UTF-8"?> <persons> <pers ...

  7. Linux帮助用法

    内部命令: help COMMAND 或 man bash 外部命令: (1) COMMAND --helpCOMMAND -h(2) 使用手册(manual)man COMMAND(3) 信息页in ...

  8. GitHub 创建工程

    创建本地代码仓库 打开Git Bash 首先配置自己的身份,这样在提交代码的时候就能知道是谁提交的 输入git config --global user.name 名字 git config --gl ...

  9. Concurrent - 线程池

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11426981.html ThreadPoolExecutor底层方法参数: @param corePo ...

  10. python学习--第三天 粗略介绍人脸识别

    首先安装opencv 在安装opencv过程中遇到一些错误(百度解决) 直接贴代码吧,讲师略讲了一下,体会不深,以后有机会深入学习,再详细介绍解释吧 人脸识别训练集应该可以网上下载吧,都是开源的 im ...