这里想大致介绍一下SQL的基本用法。
在介绍之前,想先粗略地说明一下数据库服务器的内部结构。
这里以MYsql为例,服务器对象分成4层:系统(DBMS:DataBase Management System)——》数据库(DB)——》数据表(table)——》字段(field),图形如下:
SQL的基本操作:CRUD(增删改查):create,Read,update,Delete
从上面图形可以看出,根据操作对象可以分成三类:库操作,表(字段)操作,数据操作
-
库操作(CRUD)
新增数据库:
语法:create database 数据库名称【库选项】;
什么是库选项呢?它是用来限制数据库的。分成俩类:
字符集设定:charset/character set(数据存储的格式,如utf8,gbk)
校对集设定:collate 数据比较的规则
举例:create database my_database charset utf8;
说明其中数据库的名称不能用关键字或者保留字命名,如果非要使用,必须加上反引号。
有人会问,数据库名称能否是中文?如create database 数据库 charset utf8,这样是不行的,字符集不匹配
可以这样解决,告诉服务器当前中文的字符集是什么?前面加上set names gbk;
查看数据库:
语法:show databases;---这是查看所有的数据库
如果要查看部分数据库
语法:show databases like “pattern”
这里的pattern可以是%,_,其中%表示匹配任意字符,_表示匹配单个字符
查看数据库创建的语句:
语法:show create database 数据库名字;
更新数据库:
数据库名称不能修改,修改会导致安全性问题,修改的是库选项,即是字符集和校对集
语法:
Alter database 数据库名字【库选项】
character set/charset [=] 字符集
collate 【=】校对集
删除数据库:
语法:
drop database 数据库名字;
注意数据库删除不是闹着玩的,删除之前建议先备份;
-
表操作
表与字段是密不可分的
新增表
语法:
create table(if not exists) 表名(字段名 数据类型,字段名 数据类型...)【表选项】;
if not exists:如果表名不存在,那么就创建,否则不执行创建代码;
表选项:控制表的表现
字符集,校对集,存储引擎
任何一个表的设计都需要依赖数据库,
方案1:显式
create table(if not exists) 数据库名称.表名(字段名 数据类型,字段名 数据类型...)【表选项】;
方案2:隐式
首先进入数据库,然后创建表
use 数据库名字(后面可以没有分号)
查看表
语法:show tables;---这是查看所有的表
如果要查看部分表
语法:show tables like “pattern”
这里的pattern可以是%,_,其中%表示匹配任意字符,_表示匹配单个字符
查看表创建的语句:
语法:show create table 表名;
查看表中的字段信息:
语法:Desc/describe/show columns from 表名;
更新表
表本身存在,还包含字段,表的修改包含俩个部分:修改表本身和修改字段
修改表本身:表名+表选项
重命名表:
语法:rename 旧表名 新表名;
修改表选项:
语法:Alter table 表名 表选项 [=] 字符集
修改字段:增删改查
新增字段:
语法:Alter table 表名 add [column] 字段名 数据类型 【列属性】【位置】
位置:字段可以放在表的任意位置,Fisrt:第一个位置,After:在哪个字段之后
修改字段:通常修改字段属性或数据类型
语法:Alter table 表名 modify 字段名 数据类型 【列属性】【位置】
重命名字段:
语法:Alter table 表名 change 旧字段名 新字段名 数据类型 【列属性】【位置】
删除字段:
语法:Alter table 表名 drop 字段名
删除表:
语法:drop table 表名1,表名2,....
-
数据操作
新增数据
给全表字段插入:
语法:insert into 表名 values(值列表) ---可以一次性插入多条记录
给表部分字段插入:
语法:insert into 表名(字段列表) values(值列表)
查看数据
语法:select */字段列表 from 表名 [where条件]
更新数据
语法:Update 表名 set 字段 = 值 [where条件]
删除数据
语法:delete from 表名 【where条件】,删除不可逆,需要谨慎