-数据库操作
--create database 数据库名字[库选项]
--库选项:用来约束数据库,分为两个选项
--字符集设定:charset/character set 具体字符集(数据存储的编码形式):常用字符集:GBK和UTF8
--校对集设定:collate 具体校对集(数据比较规则)
--创建数据库
creat database myfirst charset utf8;
--查看数据库
show databases;
show databases like 'm%';
--修改数据库(只能修改库选项)
alter database myfirst charset gbk;
--删除数据库
drop database myfirst;
数据表操作
create table[if not exists] 数据库名.表名( --将当前数据表创建到指定数据库下
字段名字 数据类型,
字段名字 数据类型 --最后一行不需要逗号
)[表选项];
--表选项:控制表的表现
--字符集:charset/chracter set 具体字符集;保证表中数据存储的字符集
--校对集:collate 具体校对集(数据比较规则)
--存储引擎:engine 具体的存储引擎(innodb 和 myisam)
--创建数据表
create table if not exists mydatabase.student(
name varchar(10),
gender varchar(10),
number varchar(10),
age int
)charset utf8;
--进入某个数据库
use mydatabse;
--查看所有表
show tables;
--查看以s结尾的表
show tables like '%s';
--查看表创建语句
show create table student\g --\g === ;
show create table student\G --将查到的结果旋转90度
--查看表结构:查看表中的字段信息
Desc/describe/show columns + 表名
desc class;
describe class;
show columns from class;
--修改数据表
--修改表本身:表名和表选项
--修改表名:rename table 老表名 to 新表名
rename table student to my_student;
--修改表选项:字符集,校对集,存储引擎
alter table 表名 表选项 (=)值
alter table student charset gbk;
--修改字段(新增,修改,重命名,删除)
--新增字段
alter table 表名 add[column] 字段名 数据类型[列属性][位置];
--位置:字段名可以存放表中的任意位置
First:第一个位置
after:在哪个字段之后,after 字段名;默认的是在最后一个字段之后
--给学生表增加id放到第一个位置
alter table my_student
add column id int
first; --mysql会自动寻找分号作为语句结束符
--修改字段
--alter 表名 modify 字段名 数据类型[属性]
alter table my_student
modify number char(10) after id;
--重命名字段
--alter table 表名 change 旧字段 数据类型
alter my_student
change gender sex varchar(10);
--删除字段
--alter table 表名 drop 字段名
alter table my_student drop age;
--删除数据表
--drop table 表名1,表名2..; 可以一次性删除多个表
drop table class;
数据操作
--新增数据
--方案一:给全表字段插入数据,不需要指定字段列表,
--要求数据的值的出现的顺序必须与表中设计的字段出现的顺序一致,
--凡是非数值数据,都需要使用引号(建议是单引号)
insert into my_student values(1,'itcast0001','jim','male');
--方案二:
--insert into 表名(字段列表) values(值列表)[,(值列表)];
insert into my_student(number,sex,name,id) values('itcast0003','male','tom',3);
--查看数据
select * from my_student
select id,number,sex,name from my_student where id=1;
--更新数据
update 表名 set 字段=值[where 条件]; --建议都有where,要不然会更新全部
update my_student set sex = 'female' where id=1;
--删除数据
delete from 表名 [where];
delete from my_student where sex='male';
中文数据问题
--中文数据问题本质是字符集问题
--只有三个都是gbk才能插入中文,并且查询数据中能出现中文
//查看服务器到底识别哪些字符集
show character set;
--服务器基本上所有字符集都支持
//既然服务器识别这么多,总有一种是服务器默认的跟客户端打交道的字符集
1.--查看服务器默认的对外处理的字符集
show variables like 'character_set%';
2.--修改服务器认为的客户端数据的字符集
set character_set_client = gbk;
3.--修改服务器给客户端的数据字符集为gbk
set character_set_result = gbk;
--!!!注意:set 变量 = 值 ;修改只是会话级别(当前客户端,当次连接有效,关闭失效)
--设置服务器服务器对客户端的字符集的认识:可以使用快捷方式 set names 字符集
set names gbk;
=
character_set_client
character_set_connection
character_set_result
--connection连接层,是字符集转变的中间者,如果统一了效率更高
校对集问题
--校对集:数据比较的方式
--校对集有三种格式
_bin:binary,二进制比较,取出二进制位,一位一位的比较,区分大小写
_cs:case sensitive,大小写敏感,区分大小写(少见)
_ci:case insensitice,大小写不敏感,不区分大小写
查看数据库所支持的校对集:show collation;
--校对集应用:只有当数据产生比较大的时候,校对集才会生效
--对比:使用utf8的_bin和_ci来验证不同的校对集的效果
--创建表使用不同的校对集
create table my_collate_bin(
name char(1)
)charset utf8 collate utf8_bin;
create table my_collate_ci(
name char(1)
)charset utf8 collate utf8_general_ci;
--插入数据
insert into my_collate_bin values('a'),('A'),('B'),('b');
insert into my_collate_ci values('a'),('A'),('B'),('b');
--比较:根据某个字段进行排序,order by 字段名[asc|desc]
--排序查找
select * from my_collate_bin order by name;
select * from my_collate_ci order by name;
--校对集:必须在没有数据之前声明好,如果有了数据,那么再进行校对集修改无效
Web乱码问题
--动态网站由三部分构成:浏览器,apache服务器(PHP),数据库服务器,三个部分都有自己的
--字符集(中文),数据需要再三个部分之间来回传递,很容易产生乱码
float精度损失问题
1.float类型必须同时写总位数和小数位数才有效,否则只是默认的宽度6位
float(10,2),总位数是10,小数位数2位。
float(10),用desc查看时,仍然是float,说明不能单独定总位数,这样仍然是默认的宽度6位
2.默认为float类型,没有小数部分,超过六位时会出现误差
3.如果存在小数部分,无论整数部分是多少位,只要有效数字超过八位就会出现误差。
TRUNCATE TABLE t_user 删除表中所有行,主键自增重新从1开始计算
DELETE FROM t_user 删除数据库的记录,主键自增的值不变