SQL基本操作
Posted mjd507
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL基本操作相关的知识,希望对你有一定的参考价值。
基本操作:CRUD
将SQL的基本操作根据对象进行分类,分为三类:库操作,表操作(字段),数据操作
库操作
对数据库的增删改查
新增数据库
基本语法
Create database 数据库名字【库选项】
库选项:用来约束数据库,分为两个选项
1. 字符集设定:charset/character set 具体字符集(数据存储的编码格式),常用字符集:GBK和UTF8
2. 校对集设定:collate 具体校对集(数据比较的规则)
其中:数据库名字不能用关键字(已被使用的字符)或者保留字(将来可能会用到的)。
当创建数据库的SQL语句执行之后,发生了什么?
1. 在数据库系统中,增加了对应的数据库信息
2. 会在保存数据的文件夹下:data目录,会创建一个对应数据库名字的文件夹
3. 每个数据库下都有一个opt文件,保存了库选项
查看数据库
- 查看所有数据库:show databases;
- 查看指定部分的数据库:模糊查询
show databases like ‘pattern’; – pattern是匹配模式
%:表示匹配多个字符
-:表示匹配单个字符
- 查看数据库的创建语句:
show create database 数据库名字
更新数据库
数据库名字不可以修改。
数据库的修改仅限库选项:字符集和校对集(校对集依赖字符集)
alter database 数据库名字【库选项】;
删除数据库
所有的操作中,删除是最简单的
drop database 数据库名字
当删除数据库语句执行后,发生了什么?
1. 在数据库内部看不到对应的数据库
2. 在对应的数据库存储的文件夹内,数据库名字对应的文件夹也被删除(级联删除:里面的数据表全部删除)
注意:数据库的删除不是闹着玩的,不要随意删除,应该先进行备份后操作(删除不可逆)
表操作
表与字段是密不可分的。
新增数据表
create table [if not exists] 表名(
字段名字 数据类型,
字段名字 数据类型 – 最后一行不需要逗号
)[表选项];
if not exists:如果表名不存在,那么就创建,否则不创建。
表选项:控制表的表现
1. 字符集:charset/character set 具体字符集; -- 保证表中数据存储的字符集
2. 校对集:collate 具体校对集
3. 存储引擎:engine 具体存储引擎(innodb和myisam)
任何一个表的设计都必须指定数据库。
方案一:显示的指定所属的数据库
create table 数据库名.表名 – 将当前数据表的创建指定到数据库下
方案二:隐式的指定表所属的数据库:先进入到某个数据库环境,然后这样创建的表自动归属到某个指定的数据库。
进入数据库环境:use 数据库名字;
当创建数据表的SQL指定执行之后,到底发生了什么?
1. 指定数据库下已经存在对应的表
2. 在数据库对应的文件夹下,会产生对应表的结构文件(跟存储引擎有关系)
查看数据表
数据库能查看的方式,表都可以查看
1. 查看所有表:show tables;
2. 查看部分表,模糊匹配:show tables like ‘pattern’;
3. 查看表的创建语句 show create table 表名;
4. 查看表结构:查看表中的字段信息
desc/describe/show columns from 表名;
修改数据表
表本身存在,还存在字段。表的修改分为两个部分:修改表本身和修改字段
修改表本身
表本身可以修改:表名和表选项
修改表名:rename table 老表名 to 新表名;
修改表选项:字符集,校对集和存储引擎
alter table 表名 表选项[=]
修改字段
字段操作很多:新增,修改,重命名,删除
新增字段
alter table 表名 add [column] 字段名 数据类型 [列属性] [位置];
位置:字段名可以存放表中的任意位置
first:第一个位置
after:在哪个字段之后:after 字段名 默认是在最后一个字段之后
修改字段:通常是修改属性或者数据类型
alter table 表名 modify 字段名 数据类型 [属性] [位置]
重命名字段
alter table 表名 change 旧字段 新字段 数据类型 [属性] [位置];
删除字段
alter table 表名 drop 字段名;
小心:如果表中已经存在数据,那么删除字段会清空该字段的所有数据(不可逆)
删除数据表
drop table 表名1,表名2..; – 可以一次性删除多张表
当删除数据表的指令执行之后,发生了什么?
1. 在表空间中,没有了指定的表
2. 在数据库对应的文件夹下,表对应的文件也会被删除
注意:删除有危险,操作需谨慎(不可逆)
数据操作
新增数据
有两种方案
方案一:给全表字段插入数据,不需要指定字段列表,要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致,凡是非数值数据,都需要使用引号(建议是单引号)设置。
insert into 表名 values(值列表) [,(值列表)]; –可以一次性插入多条记录
方案二:给部分字段插入数据,需要选定字段列表,字段列表出现的顺序与字段的顺序无关,但是值列表的顺序必须与选定的字段的顺序一致。
insert into 表名 (字段列表) values (值列表)[,(值列表)];
查看数据
select (*/字段列表) from 表名;
查看所有数据:
查看指定字段,指定条件的数据
更新数据
update 表名 set 字段 = 值 [where 条件]; – 建议都有where,要不就是更新全部
更新不一定会成功,比如没有要更新的数据。
删除数据
删除是不可逆的,需谨慎
delete from 表名 [where条件];
中文数据问题
中文数据问题本质是字符集问题。
计算机只是别二进制,人类更多是识别符号,需要有个二进制与字符的对应关系(字符集)。
客户端向服务器插入中文数据,没有成功。
查看所有字符集
show character set;
查看服务器默认的对外处理的字符集
show variables like ‘character_set%’;
问题根源:客户端数据只能是gbk,而服务器认为是utf8。
解决方案:改变服务器,默认的接收字符集为gbk。
set character_set_client = gbk;
再次插入数据(中文)
查看数据,发现乱码
原因:数据来源是服务器,解析数据是客户端(客户端只识别gbk),
但是服务器给的数据是utf8,所有乱码。
解决方案:修改服务器给客户端的数据字符集为gbk
set character_set_results =gbk;
查看数据
set 变量 = 值,修改只是会话级别(当前客户端当次连接有效,关闭失效)
设置服务器对客户端的字符集的认识:可以使用快捷方式:set names 字符集
set names gbk; –> character_set_client,character_set_results,character_set_connection;
connection:连接层:是字符集转变的中间者,如果统一了效率更高,不统一也没影响。
校对集问题
校对集:数据比较的方式
校对集有三种格式
_bin:binary,二进制比较,取出二进制,一位一位的比较,区分大小写
_cs:case sensitive,大小写敏感,区分大小写
_ci:case insensitive,大小写不敏感,不区分大小写
查看数据库支持的校对集
show collation;
校对集应用:只有当数据产生比较的时候,校对集才会生效
校对集:必须在没有数据之前声明好,如果有了数据,那么再进行校对集修改,那么修改无效。
Web乱码问题
动态网站由三部分构成:浏览器,apache服务器(php),数据库服务器
字符集(中文),数据需要在三个部分之间来回传递:很容易产生乱码
如何解决乱码:统一编码(三种合一)
但是事实不可能:浏览器是用户管理(根本不可能控制)
但是必须要解决这些问题(由PHP来做)
以上是关于SQL基本操作的主要内容,如果未能解决你的问题,请参考以下文章