SQL基础命令

1590人浏览 / 0人评论

一、基础命令简介

DDL  数据定义语言

DCL  数据控制语言

DML 数据操作语言

DQL 数据查询语言

二、库相关基本操作

1、创建数据库并指定字符集

  字符集介绍

  utf8  :最多可存储3字节字符

  utf8mb4 :最多可存储4字节字符,可以存储emoji

create database test charset utf8mb4;

 2、查看数据库(DML)

show databases;

详细查看test‘库

 show create database test;

3、修改数据库字符集

alter database test charset utf8; 

4、删除数据库

drop database test; 

三、表相关基本操作

1、创建表

进入库

mysql> use test;

创建表

CREATE TABLE student (
sid INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
sname VARCHAR(64) NOT NULL COMMENT '姓名',
sage  TINYINT UNSIGNED NOT NULL DEFAULT 18 COMMENT '年龄',
gender CHAR(1) NOT NULL DEFAULT 'M' COMMENT '性别',
telnum  CHAR(15) NOT NULL  UNIQUE KEY COMMENT '手机'
)ENGINE=INNODB CHARSET=utf8mb4 COMMENT '学生表';

 介绍:创建一个表名为student的表,

第一列为sid,int(可以存储4个字节),NOT NULL (非空),PRIMARY(主键,非空且唯一),AUTO_INCREMENT 自增长,COMMENT 注释,

第二列为sname,varchar(64)最多存放64字节,NOT  NULL非空,COMMENT 注释,

等等等。。。。。。

a. 数据类型 : 整数,浮点数,字符串,时间类型,二进制,json
    a.1 整数 : 
        tinyint : 1字节    11111111    0~255  0~2^8-1    -128~127
        int     : 4字节                       0~2^32-1   -2^31~2^31-1
        bigint  : 8字节 
    a.2 浮点数  : 
        decimal 精度较高
        精度降低,建议0.02
    a.3 字符串  
        char(20)    : 最多20个字符,定长.
        varchar(20) : 最多20个字符,变长.额外花费1~2字节存储字符长度.
    a.4 时间 
        timestamp 
        datetime  

    b. 约束 : 主键  非空  唯一  无符号
        PK: primary key 非空且唯一 
        NN: Not null    非空
        UK: unique key  唯一 
        unsigned: 无符号 

    其他属性: 
        auto_increment  自增长
        comment         注释

 创建表规范

a. 表名,不能大写字母,不能数字开头,16位以下,不能关键字,和业务有关
b. 每个表必须有主键,最好是数字自增无关列
c. 选择合适的,足够的,简短的数据类型
d. 每个列都加非空约束.
e. 每个列要加注释
f. 显示设置数据类型

四、表相关基本操作

1、查看当前库有哪些表

show tables;

2、查看test表结构

desc test; 

 3、查看创建test表语句

show table test;

 4、添加qq列,并且varchar为64,非空,唯一也不重复

alter table test add qq varchar(64) not null unique key comment 'qq号';

5、删除test表中的 

drop     table  student;  

物理清空数据

 truncate table  student ; 

五、DML语句

 1、查询变量

select @@port

2、调用变量

select now(); 

3、查询test库中的student表所有数据

mysql> select * from test.student; 

4、查看user表中host和user列

mysql> select Host.User from user \G; 

5、查看user表中host列为10.0.0.%

select * from user where Host='10.0.0.%' \G; 

6、查询user表中host列少于100(这个只是距离) 

select * from user where Host<100 \G;

7、 模糊查询user表中host列10开头的

select * from mysql.user where host like '10%' \G;

 8、逻辑匹配-查询host列为10.0.0.%,并且user是liangzeyu的

select * from mysql.user where Host='10.0.0.%' AND User='liangzeyu' \G;

9、 逻辑匹配-查询host列为10.0.0.%或者host列为localhost

select * from mysql.user where Host='10.0.0.%' OR Host='localhost' \G;

10、 逻辑匹配-查询host列为10.0.0.%或者host列为localhost   同上

select * from mysql.user where Host IN('10.0.0.%','localhost') \G;

 11、 逻辑匹配-查询host列为10.0.0.%或者host列为localhost   同上  和上面的区别是,先把第一个select查询的内容进行123排序,第二个select的内容访问456排序

select * from mysql.user where Host='10.0.0.%' union all select * from mysql.user where Host='localhost' \G;

12、 查询host列数值为100-200的值

mysql> select * from mysql.user where Host>=100 AND Host<=200 \G;

       方法2

      mysql> select * from mysql.user where Host between 100 and 200 \G;

 六、聚合函数

1、查询mysql库中的user表中的user列的每个用户一共有多少(localhost和10.0.0.%)

mysql> select User,COUNT(*) from mysql.user group by user;
 

 2、只统计mysql库中user表中user列中的root用户一共有几个

mysql> select User,COUNT(*) from mysql.user WHERE User='root' GROUP BY user;

 3、查询mysql库中的user表中的user列中的root用户的个数和host地址

select User,COUNT(*)  ,GROUP_CONCAT(Host) FROM mysql.user WHERE User='root' GROUP BY user;

 4、统计mysql库中的host表中的每个用户的host的总值(host值加起来一共是多少)

mysql> select user,SUM(host) FROM mysql.user GROUP BY user;

 

 

-====================

 -- having 应用 

---  统计每个国家总人口,只显示总人口超过5000w的
SELECT countrycode,SUM(population) FROM city 
GROUP BY countrycode
HAVING SUM(population)>50000000

-- order by 应用 
--- 查询中国所有城市名和人口,并按照人口数排序显示.
SELECT NAME,population FROM city
WHERE countrycode='CHN'
ORDER BY population DESC ;

--- LIMIT 应用 
--- 查询中国所有城市名和人口,并按照人口数从大到小,只显示前十名.
SELECT NAME,population FROM city
WHERE countrycode='CHN'
ORDER BY population DESC
LIMIT 10  OFFSET 0 ;

SELECT NAME,population FROM city
WHERE countrycode='CHN'
ORDER BY population DESC
LIMIT 5,5  ;

SELECT NAME,population FROM city
WHERE countrycode='CHN'
ORDER BY population DESC
LIMIT 5 OFFSET 5 ;


4.2  insert  
mysql> create table t1 (id int ,name varchar(20));
mysql> insert into t1 values(1,'a');
mysql> insert into t1 values(2,'b'),(3,'c');    
mysql> insert into t1(id,name) values(11,'aa');


4.3  update 

mysql> update t1 set name='bb' where id=11;
mysql> set global sql_safe_updates=1;
mysql> update t1 set name='xx' ;
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. 

说明: 可以添加以上参数,控制update和delete 语句,必须添加where 条件,条件必须是索引列.

4.4  delete  
mysql> alter table t1 add index idx(id);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> delete from t1 where id=11;

全部评论