SQL
SQL: structured query language,结构化查询语言(数据以查询为主:99%是在进行查询)
SQL分为三部分
- DDL:
data definition language,数据定义语言,用来存贮维护数据的结构(数据库,表)
代表指令:crate,drop,,alter等
- DML
data manipualation language, 数据操作语言,用来对数据进行操作(数据表中的内容)
代表指令:insert,delete,update等 其中DML中又单独分出一个类DQL(data query laguage:数据查询语言,select)
- DCL
data control language,数据控制语言,只要负责权限管理(用户)
代表指令:grant revoke等
交互方式
- 客户端连接认证:连接服务器,认证身份mysql -h[主机] -P[端口] -u[用户名] -p
- 发送SQL指令 show databases; -- 查看所有的数据库
- 服务器接收SQL指令:处理SQL指令:返回操作结果
- 客户端接收结果:显示结果
- 断开连接(释放资源:服务器并发限制)exit/quit/‘q’
SQL基本操作
基本操作:CRUD
将SQL的基本操作根据操作对象分类:分为三类:库操作,表操作(字段),数据操作
库操作
对数据库的增删改查
- 新增数据库
基本操作
注释:-- 双下划线+空格, 也可以使用 #号
create databases 数据库名字 [库选项];
库选项: 用来约束数据库,分为两个选项
字符集设定:charset/character set 具体字符集(数据存储的编码格式):常用字符集:GBK和UTF8
校对集设定:collate具体校对及(数据比较的规则)
当数据库中SQL语句执行后发生了什么?
- 增加了对应的数据库信息
- 保存数据文件夹下Data目录,创建一个对应数据库名字的文件夹
- 文件夹下会有一个.opt文件,数据库库选项(字符集,校对集:校对集依赖字符集)
查看数据库
- 查看所有数据库:show databases;
- 查看指定部分数据库:模糊查询 show databases like 'pattern' -- pattern 是匹配模式(%:表示匹配对各字符, _:表示匹配单个字符)注意:其中包含_ 需要‘’转义
- 查看数据库的创建语句:show create database [databasename];
更新数据库
数据库名字不可修改。
数据库仅限修改库选项:字符集和校对集(校对集依赖字符集)
alter database 数据库名字 [库选项];
charset/character set = 字符集
collate 校对集
删除数据库
drop database 数据库名;
删除数据库语句后发生了什么?
- 在数据库内部看不到对应的数据库
- 对应的数据库存储文件夹内:数据对应名字的文件夹也被删除(级联删除)
注意:数据库不要随意删除应,应先备份后操作(删除不可逆)
表操作
表与字段密不可分。
新增数据表
create table [if not exists] 表名(
字段名 字段类型,
字段名 字段类型 -- 最后一行不需要加逗号
)[表选项];
if not exists 做表名不存在就创建,否则不执行创建代码:检查功能
表选项:控制表的表现
1. 字符集 charset/character set 具体字符集; -- 保证表中数据存储的字符集
2. 校对集:collata 具体校对集;
3. 存储引擎:engin 具体存储引擎(innodb和myisam)
创建数据库语句出错,no database selected 没有选择数据库。
方案一:显示的指定表所属的数据库
create table 数据库名.表名(); -- 将当前数据表创建到指定数据库下
方案二:隐式指定表所属的数据库:先进入某个数据库环境,然后创建的表就自动归属到指定数据库
进入数据库(使用数据库): use 数据库名字;
创建数据表sql指令执行后发生了什么?
- 在指定数据库下已存在对应的表
- 数据库文件夹下会产生对应表结构的文件(和存储引擎相关) .frm 文件
查看数据表
- 查看所有表:show tables;
- 查看部分表:show tables like '%s';
- 查看表的创建语句:show create table;
- 查看表结构:查看表中字段信息:desc/describe 表名; show collumns from 表名;
修改数据表
表本身,字段两部分
修改表本身
表本身修改:表名,表选项
修改表名:rename table 旧表名 to 新表名;
修改表选项:字符集,校对集和存储引擎
alter table student charset GBK;
修改字段
字段操作:新增,修改,重名,删除
新增字段;
alter table 表名 add [column] 字段名 数据类型 [列属性][位置];
位置:字段名存在表中的任意位置
first: 第一个位置
after: 在某一个字段之后;默认在最后一个字段之后;
修改字段:修改通常是该属性或者数据类型
alter table 表名 modify 字段名 数据类型 [属性][位置];
重命名字段
alter table 表名 change 旧字段 新字段 数据类型 [属性][位置];
删除字段
alter table drop 字段名;
小心:如果表中已经存在数据,那么删除字段会清空该字段的所有数据(不可逆);
删除数据表
drop table 表名1,表名2.。。;可以一次性删除多张表
删除数据表指令执行后发生了什么?
- 在表空间中,没有了指定的表(数据也没了)
- 在数据库对应的文件夹下,表对应的文件(与存储引擎有关)也会被删除
注意:删除有危险,操作需要谨慎(不可逆)
数据操作
新增数据
两种方案
方案1:给全表插入数据,不需要指定字段列表,要求数据的之出现的顺序必须与表中设计的字段出先的顺序一直:凡是非数值数据,都需要使用引号(建议单引号)包裹
insert into 表名 values(值列表),(值列表),(值列表),... -- 可以一次性插入多条记录
方案2:给部分字段插入数据,需要选定字段列表:字段列出表现的顺序与字段顺序无关;但是只列表顺序必须与选定字段顺序一致。
insert into 表名 (字段列表) values(值列表),values(值列表),... -- 可以一次性插入多条记录
查看数据
查看所有
select */字段列表 from 表名;
查看指定字段,指定条件的数据
例如:select id, num, name from student where id=1;
更新数据
update 表名 set 字段 = 值 [where条件];
-- 建议都使用where ,没有where条件的是更新全部内容
更新不一定会成功:当数据更新没有变化时就会显示影响条数0条;
删除数据
删除不可逆:谨慎删除
delete from 表名 [where条件];