SQL基础

常用SQL分类

SQL语句的分类

名字 类型 作用的对象 作用
DDL 英文全称 (Data Definition Language) 数据定义语言 库、表、列 创建、删除、修改、库或表结构,对数据库或表的结构操作
DML 英文全称(Data Manipulation Language) 数据操作语言 数据库记录(数据) 增、删、改,对表记录进行更新(增、删、改)
DQL 英文全称(Data Query Language) 数据查询语言 数据库记录(数据) 查、用来查询数据,对表记录的查询
DCL 英文全称(Data Control Language) 数据控制语言 数据库用户 用来定义访问的权限和安全级别,对用户的创建,及授权

数据类型、表属性、字符集

数据类型

种类

数值类型

表属性

列属性

  1. 约束(一般建表时添加):
  2. **primary key** :主键约束
  3. 设置为主键的列,此列的值必须非空且唯一,主键在一个表中只能有一个,但是可以有多个列一起构成。
  4. **not null** :非空约束
  5. 列值不能为空,也是表设计的规范,尽可能将所有的列设置为非空。可以设置默认值为0
  6. **unique key** :唯一键
  7. 列值不能重复
  8. **unsigned** :无符号
  9. 针对数字列,非负数。
  10. 其他属性:
  11. **key** :索引
  12. 可以在某列上建立索引,来优化查询,一般是根据需要后添加
  13. **default** :默认值
  14. 列中,没有录入值时,会自动使用default的值填充
  15. **auto_increment**:自增长
  16. 针对数字列,顺序的自动填充数据(默认是从1开始,将来可以设定起始点和偏移量)
  17. **comment ** : 注释

字符集和校对规则

字符集

utf8       
utf8mb4

校对规则(排序规则)

大小写是否敏感

DDL应用

数据定义语言

库定义

创建数据库

create database db1;
create schema db1;
show charset;    #查看字符集
show collation;  #查看排序规则
CREATE DATABASE test CHARSET utf8;
create database xyz charset utf8mb4 collate utf8mb4_bin;

建库标准语句

mysql> create database db1 charset utf8mb4;
mysql> show create database db1;

删除库(生产中禁止使用)

mysql> drop database db1;

修改库属性

SHOW CREATE DATABASE db1;
ALTER DATABASE db1  CHARSET utf8;
注意:修改字符集,修改后的字符集一定是原字符集的严格超集

查询库相关信息(DQL)

show databases;
show create databasedb1;

表定义

创建

create table stu(
列1  属性(数据类型、约束、其他属性) ,
列2  属性,
列3  属性
)

删除(生产中禁用命令)

drop table stu;

修改

  1. 在stu表中添加手机列

    DESC stu;
    ALTER TABLE stu ADD phone CHAR(11) NOT NULL UNIQUE COMMENT '手机号';
    
  2. 在sname后加微信列

    ALTER TABLE stu ADD wechat VARCHAR(64) NOT NULL UNIQUE  COMMENT '微信号' AFTER sname ;
    
  3. 在id列前加一个新列qq

    ALTER TABLE stu ADD qq INT NOT NULL COMMENT 'qq' FIRST;
    DESC stu;
    

总结:

  1. 已有多行数据的表中无法同时添加非空和唯一两种约束,非空约束会默认填充空字符串 ’ ’ 或者 0,会数值重复。
  2. 在无数据的表中或者只存在一行数据的表中 新添加的列可以同时使用非空约束和唯一约束 此时表中非空约束默认填充后,无重复数值 故可添加唯一约束
  3. 在非空约束中保留空值将列中该值更改为空字符串’ ’ 即可
  4. 向已有多行数据的表中添加新的列并使用非空约束,则会将已存在行值填充为空字符串 ’ ’ 或 0
  5. 空字符串’’不为空值 不受 非空约束(Not Null)限制,但实际值可以无值 , Null为空值需要会受非空约束
  1. 把刚才添加的列都删掉(危险)
ALTER TABLE stu DROP phone;
ALTER TABLE stu DROP qq;
ALTER TABLE stu DROP wechat;
  1. 修改sname数据类型的属性
ALTER TABLE stu MODIFY sname VARCHAR(128)  NOT NULL ;
  1. 将sgender 改为 sg 数据类型改为 CHAR 类型
ALTER TABLE stu CHANGE sgender sg CHAR(1) NOT NULL DEFAULT 'n' ;
DESC stu;

DML应用

对表中的数据行进行增、删、改

insert

--- 最标准的insert语句
INSERT INTO stu(id,sname,sage,sg,sfz,intime) 
VALUES
(1,'zs',18,'m','123456',NOW());
SELECT * FROM stu;

--- 省事的写法
INSERT INTO stu 
VALUES
(2,'ls',18,'m','1234567',NOW());

--- 针对性的录入数据
INSERT INTO stu(sname,sfz)
VALUES ('w5','34445788');

--- 同时录入多行数据
INSERT INTO stu(sname,sfz)
VALUES 
('w55','3444578d8'),
('m6','1212313'),
('aa','123213123123');
SELECT * FROM stu;

update

DESC stu;
SELECT * FROM stu;
UPDATE stu SET sname='zhao4' WHERE id=2;
注意:update语句必须要加where。

delete(危险!!)

DELETE FROM stu  WHERE id=3;

全表删除:

DELETE FROM stu
truncate table stu;
区别:
delete: DML操作, 是逻辑性质删除,逐行进行删除,速度慢.
truncate: DDL操作,对与表段中的数据页进行清空,速度快

DQL应用(select )

单表子句-from

SELECT 列1,列2 FROM 表
SELECT  *  FROM 表

SELECT  *  FROM 表  limit n; 查看前n列

where配合比较操作符(> < >= <= <>)

例子:
— 查询世界上少于100人的城市

SELECT * FROM city WHERE population<100;

where配合逻辑运算符(and or )

例子:
— 中国人口数量大于500w

SELECT * FROM city WHERE countrycode='CHN' AND population>5000000;

— 中国或美国城市信息

SELECT * FROM city WHERE countrycode='CHN' OR countrycode='USA';

where配合模糊查询

例子:
— 查询名字shi开头的

SELECT * FROM city WHERE district LIKE 'shi%';    
注意:%不能放在前面,因为不走索引.

where配合in语句

— 中国或美国城市信息

SELECT * FROM city WHERE countrycode IN ('CHN' ,'USA');