数据库基本操作
数据库基本操作三个部分:库操作,表操作(字段操作),数据操作
库操作
SQL语句以行为执行单位,每行结束都应该用分号结束
新增数据库:create database 数据库名字[库选项]
库选项:字符集设置(charset):表示以后再当前数据库存储的数据,默认采用utf-8的字符集存储
校对集设置(collate)如何比较大小
Create database mydatabase default charset utf8;
执行以上语句,数据库管理系统做了哪些事情?
1. 创建一个叫做没有database的数据库(默认使用utf8来存储数据)
2. 会在磁盘里开辟一块空间来存储数据(对应外部提现就是创建一个文件夹,文件夹的名字叫做mydatabase)
文件夹的路径可以通过my.ini 查看
查看数据库
查看数据库基本信息:show database || 模糊查询:show databases like ‘pattern’
查看数据库创建语句:show create database 数据库名字
模糊匹配
%匹配任何内容,_表示匹配一个字符
修改数据库:数据库名称不可修改,只能修改数据库的库选项
语法:alter database 数据库名字[库选项]
删除数据库:drop database 数据库名字
表操作
表不能脱离字段存在,字段也不能脱离表,所谓的表操作就是表和字段同时操作
新增表:create table 表名(字段1 字段类型,字段 2 字段类型)[表选项]
1. 字段必须要有字段类型: 字段字段类型
2. 字段与字段之间使用逗号分隔
3. 最后一个字段不需要使用逗号
表选项
字符集:当前表的数据采用什么字符集保存,字符集以表的字符集为标准
存储引擎:当前表的数据采用什么样的存储引擎来存储
存储引擎:不同存储和处理数据的方式
注意:数据表必须存储在数据库内部
两种方式解决以上问题
1. 显示指定数据库:在创建表名的时候使用:库.表名
2. 隐式指定数据:事先进入到某个数据库的环境:use数据库名字
创建表语句执行之后的结果:在对应的数据库文件夹下创建两个对应的数据表的结构文件
该结构与选定的存储引擎有关系
存储引擎:1.innoDB 和Myisam
InnoDB:只会创建一个表结构文件,其他索引和数据存放在ibdatal文件中
Myisam:会创建三个文件,一个是结构文件,一个是数据文件,一个是索引文件
查看表:
1. 查看表基本信息:show tables||show tables like ‘pattern’;
2. 查看表的创建语句:show create table 表名; //并不完全是用户创建的时候写的SQL语句,而是系统根据表的结构自己生成的创建语句
3. 查看表结构:desc|describe|show columns from 表名;
修改表
可以修改表的名字,表的字段的增删改查,字段的属性的修改,字字段名字段的位置的修改
语法:alter table 表名[add/modify/drop] [column] 字段名字 [字段类型] [字段位置]
增加字段
Alter table 表名 add column字段名字字段类型
字段默认在表最后增加
位置:first表示在最前面,alter表示在某个字段之后(默认其实是alter最后一个字段之后)
修改字段
修改字段位置,修改字段的类型,修改字段的名字
关键字modify
修改字段类型+字段位置
修改字段名字
Alter table 表名 change 旧字段 new 字段字段类型字段位置
注意:不管修改字段的那个部分都应该跟上字段的类型
删除字段
alter table 表名 drop 字段名字
删除表:drop table 表名
删除表还会对表文件进行删除
注意:
1. 创建过程中会不知道当前表是否存在:if not exists 表示只有表名不存在的时候才去创建,否则放弃
2. 删出表的过程中,不知道表是否存在 . if not exists
3. 数据库和数据表都不能随意的删除,删除具有不可逆性。如果确定要删除数据库或者数据表,那么实现备份数据
语法:rename table 旧表名 to 新表名
数据操作
新增数据:insert into 表名(字段列表) value(值列表)
字段列表可以没有意味着值列表里的字段必须在表中的字段数完全一致
注意:value里面的数据值,必须与字段顺序完全对应上
插入数据必须注意
1. 插入的数据类型必须与数据字段定义的数据类型一致,除了整型可以不加引号之外,其它的都要加上引号
2. 整型也可以加上引号
在严格模式下,只能将字符串转换为数值
在严格模式下,自增不能使用空字符串代替
3. 允许一次插入多条记录,在values字段后面使用逗号分隔即可
查看数据:select 字段列表 from 表名 [where 条件]
修改(更新) 数据:update 表名 set 字段 = 值 [where 条件]
注意:修改一般要指定条件,不是会修改全部数据
删除数据
Delect from表名 where 条件
注意:一点要小心删除数据,切记需要使用where条件,在删除之间需要对数据进行备份
行(row)和记录(record):行和记录表示的意思是完全一样的,行是站在表结构的角度上定义,而记录是站在数据的角度上去定义
列(column)和字段(field):与行和记录的区别是一样的
字符集问题(乱码问题)
1. Cmd控制台只能是gbk格式的数据
不管当前客服端是发送数据给服务端还是客服端返回数据给客服端,告诉客服端当前我的客服端只能识别gbk编码
在发送数据之间,需要将utf8转换为gbk
客服端与服务端进行不同编码的通信的原理
客服端(本身有编码)
CMD:gbk
2. Set name gbk 的功能
客服端与服务端进行不同编码通信的原理
客服端 CMD:gbk 编码软件:utf8 |
服务端 |
DBMS:在安装的时候指定UTF8 |
数据库:创建的时候指定UTF8 |
数据表:创建的时候指定UTF8(大部分的情况下字符集靠数据表来指定) |
数据字段:也可以在创建的时候指定字符集一般不使用 数据最终存储格式依赖关系:字段->表->库->DBMS 跟外部数据传输的格式没有任何关系
|
Insert into 表value(’表’) |
1. 中字在客服端cmd下占两个字节 2. 服务器认为客服端的编码是utf8,所以使用三个字符来解析‘中’字,因此解析失败,所以报错 3. Set name gbk,告诉服务器数据是gbk格式 4. 服务器安装两个字节来解析 5. 服务器内部将中字从gbk转换成utf8,存储到数据表 |
1. 服务器将数据从表中查出来,字符集是utf8,中字占三个字节 2. 将手机发送给客服端 3. 客户端字符集是gbk,认为得到的数据是gbk编码,用两个字节读取中字,最终变成乱码 4. 在传输数据之间,set names gbk,告诉服务器,客户端只识别gbk格式数据 5. 服务器在拿到utf8格式数据后,先转化成gbk格式,然后再发送给客户端 |
了解数据库的字符集
查看数据支持哪些字符集?show character set;
Mysql支持39种字符集编码
查看服务器对客户端的默认识别方式:将客户端当作何种字符集对待。
Show variables like‘character_set_%’;
Variable_name | Value |
character_set_client | gbk |
character_set_connection | gbk |
character_set_database | latin1 |
character_set_filesystem | binary |
gbk | |
character_set_server | latin1 |
character_set_system | utf8 |
character_sets_dir | E:\wamp\bin\mysql\mysql5.6.17\share\charsets\ |
character_set_client : 表示服务器默认接受客服端数据时,所认为的字符集
character_set_connection:连接层的字符集
character_set_database:在处理数据的时候使用什么字符集来处理
character_set_results:表示当服务器执行完毕之后,得到结果,将以什么字符集方式,将数据传送出去
1. 要保证服务器能够正确识别客户端传过去的数据,只要保证character_set_client的字符集与客户端的字符集一致即可.
2. 要保证服务器能够正确的给客户端提供对应字符集的数据,只要保证characte_set_results与客户端的字符集一致即可