sql基本概念
- 什么是sql?
- Structured Query Language 结构化查询语言
- 通俗来说就是定义了操作所有关系型数据库(如mysql,oracle,sqlserver等)的规则
- 每一种操作数据库的方式存在不一样的地方,类似于"方言".
sql通用语法
-
sql语句可以单行或多行书写,以分号结尾.
例如:(在cmd黑窗口下) 查看所有数据库名称: SHOW DATABASES;(切记后面要加s). 查看数据库物理存放位置: show global variables like "%datadir%".
-
可使用空格和缩进来增强语句可读性.
-
mysql语句中的sql不区分大小写,但是关键字建议大写.
-
有3种注释:(cmd窗口下)
sql分类
DDL(Data Definition Language)数据定义语言
- 用来定义数据库对象: 比如数据库,表,视图等.
- 关键字: create, drop, alter等.
DML(Data Manipulation Language)数据操作语言
- 用来对数据库中表的数据进行增删改.
- 关键字:update, insert, delete等.
DQL(Data Query Language)数据查询语言
- 用来查询数据库中表的记录(也就是数据)
- 关键字: select, where等.
DCL(Data Control Language)数据控制语言(不管)
- 用来设置或更改数据库用户或角色权限的.
DDL语句: 操作数据库,表
-
操作数据库: CRUD
-
C(Create): 创建
例如:(在cmd黑窗口下) 创建一个名为`db1`的数据库(条件语句是判断是否存在) create database if not exists db1; 创建一个字符集为gbk的数据库 create database db1 character set gbk; 创建一个名为`db1`且字符集为gbk的数据库 create database if not exists db1 character set gbk;
-
R(Retrieve): 查询
例如:(在cmd黑窗口下) 查询所有数据库名称: SHOW DATABASES;(切记后面要加s). 查询test数据库创建语句(还可以查看该数据库的字符集是utf-8还是啥): show create database test; 查询数据库物理存放位置: show global variables like "%datadir%".
-
U(Update): 修改
例如:(在cmd黑窗口下) 修改db1数据库的字符集为utf8(不能写成utf-8): alter database db1 character set utf8.
-
D(Delete): 删除
例如:(在cmd黑窗口下) 删除db1数据库: drop database db1. 删除db1数据库,先判断是否存在: drop database if exists db1.
-
使用数据库
使用db1数据库: use db1; 查询当前正在使用的数据库名称: select database();
-
-
操作表: CRUD
-
C(Create): 创建
例如:(在cmd黑窗口下) 在db1数据库中创建一张学生表student use db1; create table student( id int, name varchar(23), score double(5,2), birthday date, add_time timestamp );
- 语法:
- create table 表名(
列名1 数据类型1,
列名2 数据类型2,
…
列名n 数据类型n
); - 注意: 最后一列不需要加逗号!!!
- create table 表名(
- 常用数据类型:
-
int: 整数类型.
- 例如: age int.
-
double: 浮点数类型.
- 例如: score double(5,2), 其中括号中第一个5表示小数一共最多5位,小数点后最多2位,所以他的最大值为999.99.
-
date: 日期类型, 只包含年月日, 格式为: yyyy-MM-dd.
-
datetime: 日期类型, 包含年月日时分秒, 格式为: yyyy-MM-dd HH:mm:ss.
-
timestamp: 时间戳类型, 包含年月日时分秒, 格式为: yyyy-MM-dd .HH:mm:ss.
- date当不给值或给值为null时,表中就存放null,没有默认值.
- timestamp和datetime区别:
- 使用timestamp,如果将来不给这个字段赋值,或赋值为null,则默认使用当前系统时间来自动赋值.
-
varchar: 字符串类型.
- 例如: name varchar(20), 括号中的参数表示姓名最大20个字符,超过了会报错,zhangsan占8个字符,而张三只占两个字符.
-
- 语法:
-
R(Retrieve): 查询
例如:(在cmd黑窗口下) 查询db1数据库中所有表的名称(要先使用数据库哈) use db1; show tables; 查询db1数据库中db表的信息(包括字段及其信息): use db1; desc db;
-
U(Update): 修改
-
修改表名
例如:(在cmd黑窗口下) 修改stu表的表名为students alter table stu rename to students;
-
修改表字符集
例如:(在cmd黑窗口下) 修改students表的字符集为gbk 先查看字符集 show create table students; 然后修改字符集为gbk alter table students character set gbk;
-
修改列
-
修改列名,类型
- modify只能修改类型,而change可以修改类型和列名.
- 修改类型的时候用modify可以比change少写一个列名哈哈哈.
例如:(在cmd黑窗口下)
在students表中将nickname列改成gender列
alter table students change nickname gender varchar(1);
在student表中将nickname的类型改为10个字符
alter students modify nickname varchar(10);
alter student change nickname nickname varchar(10). -
添加列
例如:(在cmd黑窗口下)
在students表中添加列nickname
alter table students add nickname varchar(20); -
删除列
例如:(在cmd黑窗口下)
删除student表中的nickname列
alter table students drop nickname;
-
-
-
D(Delete): 删除
例如:(在cmd黑窗口下) 删除db1数据库下student表 use db1; drop table if exists student;
-
删除表中数据可以用delete(DML语句)和truncate(DDL语句)
- truncate用于删除整张表的数据,但是保留表结构,格式为: truncate table 表格名, 和没有where的delete类似.
- 当你不再需要该表时, 用 drop;当你仍要保留该表,但要删除所有记录时, 用 truncate;当你要删除部分记录时(always with a WHERE clause), 用 delete.
- 效率方面:drop > truncate > delete
-
复制表
例如:(在cmd黑窗口下) 在db1数据库下复制studen表为stu表 use db1; create table stu like student;
-